У меня есть основной сервер (Centos 6.2), который служит маршрутизатором / межсетевым экраном и имеет виртуальные машины. Виртуальные машины в сети 10.0.0.0/8, а все остальные (есть DHCP-сервер) по 192.168.0.0/16.
У меня есть два интерфейса, выходящих в Интернет, ppp0 с переменным IP и ppp1 со статическим IP. Что мне нужно сделать, так это сделать так, чтобы весь исходящий трафик с 10.0.0.0/8 проходил через ppp1, чтобы виртуальные машины были видны как статический IP. Машины в 192.168.0.0/16 должны иметь возможность напрямую связываться с машинами в 10.0.0.0/8.
... в основном, весь трафик, который должен идти в Интернет, проходить через ppp1, если он исходит из 10.0.0.0/8. Сохранение способности разных сетей разговаривать друг с другом.
Я безуспешно пробовал несколько примеров маршрутизации на основе источника, у меня не было доступа с главного сервера к виртуальным машинам. С iptables тоже ничего не работает.
Вся моя схема выглядит так:
Server:
ppp0: facing internet variable ip
ppp1: facing internet static ip
vnet0: bridge with ips: 192.168.0.1, 10.0.0.1
eth1: facing the local network
vnet1: interface to the first virtual server
vnet2: interface to the second virtual server
Virtual server 1:
eth0: interface connected to main server, with ip: 10.0.0.10.
Virtual server 2:
eth0: interface connected to main server, with ip: 10.0.0.11.
Local Machine *: (All the computers of people working in the office)
eth*: interface connected to main server, with ip: 192.168.0.*.
Выход ip route show
на сервере:
10.9.100.1 dev ppp1 proto kernel scope link src 190.196.26.245
10.52.173.3 dev ppp0 proto kernel scope link src 190.21.97.109
192.168.0.0/24 dev vnet0 proto kernel scope link src 192.168.0.1
169.254.0.0/16 dev eth0 scope link metric 1002
169.254.0.0/16 dev eth2 scope link metric 1004
169.254.0.0/16 dev vnet0 scope link metric 1005
10.0.0.0/8 dev vnet0 proto kernel scope link src 10.0.0.1
default dev ppp0 scope link
Выход ip link show
является:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:21:5e:c2:af:20 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:14:78:7c:47:87 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether ac:f1:df:69:5c:70 brd ff:ff:ff:ff:ff:ff
5: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether 00:14:78:7c:47:87 brd ff:ff:ff:ff:ff:ff
7: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3
link/ppp
8: ppp1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc pfifo_fast state UNKNOWN qlen 3
link/ppp
9: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
link/ether fe:54:00:54:f8:48 brd ff:ff:ff:ff:ff:ff
10: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
link/ether fe:54:00:d0:14:24 brd ff:ff:ff:ff:ff:ff
Вы должны иметь iproute
установлен пакет для выполнения политики маршрутизации.
# create a new ip routing table entry
echo "66 static-ip" >> /etc/iproute2/rt_tables
# add the rule entry to have packets with source 10.0.0.0/8 routed through the
# alternate "static-ip" routing table
ip rule add from 10.0.0.0/8 lookup static-ip
# add the routes to the "static-ip" table
ip route add default dev ppp1 table static-ip
ip route add 192.168.0.0/16 dev vnet0 table static-ip
ip route add 10.0.0.0/8 dev vnet0 table static-ip
По сути, это все, но вам нужно будет выяснить, как сделать записи перезагружаемыми постоянными (что обычно можно сделать, поместив их в сценарий запуска и немного параметризовав их в соответствии с вашими потребностями). Взгляни на это сообщение в списке рассылки для примера, как это можно сделать в стиле CentOS.
Обратите внимание, что использование мостового интерфейса с двумя IP-псевдонимами, вероятно, не то, что вам нужно, поскольку вы не сможете безопасно фильтровать трафик - мостовое соединение всегда будет передавать трафик из одного сегмента сети в другой, независимо от того, как вы настраиваете свои IP-фильтры. Вы должны использовать два отдельных интерфейса, подключенных к сетям 10.0.0.0/8 и 192.168.0.0/16 соответственно (eth0 и eth2 в вашей конфигурации, если вы не будете использовать мост AFAICS). Также следует убрать из маршрутов сеть APIPA (169.254.0.0/16) - добавить NOZEROCONF=yes
к /etc/sysconfig/network
и перезапустите сеть (или хост).
Вы хотите выполнить маршрутизацию на основе политик, что-то в этом роде:
echo 200 Static >> /etc/iproute2/rt_tables
ip rule add from 10.0.0.0/8 table Static
ip route add default via <ppp1 IP> dev ppp1 table Static
ip route flush cache
Это направит любой трафик с 10.0.0.0 через ppp1, любой другой трафик должен подчиняться обычным правилам маршрутизации. Возможно, вам потребуется добавить правило, чтобы сообщить сетям, как разговаривать друг с другом, однако это должно делать то, что вы просили ..
Немного дальнейшего чтения, это очень хорошее введение в концепции: http://lartc.org/howto/