2015-03-31 8 views
0

У меня есть Xen dom0, работающий под управлением Debian Wheezy (7.8) и Xen 4.1, настроенный с помощью мостовой сети.Мостовой Xen domU с шлюзом в разных подсетях

  • 199.XXX.161.64 является dom0 шлюза.
  • 199.XXX.161.65 является адресом dom0.
  • 192.XXX.13.128/28 - это подсеть для domU.

Конфигурация dom0:

[email protected]:~# cat /etc/network/interfaces 
auto lo 
iface lo inet loopback 

auto eth0 
iface eth0 inet manual 

auto xenbr0 
iface xenbr0 inet static 
    address 199.XXX.161.65 
    netmask 255.255.255.254 
    network 199.XXX.161.64 
    broadcast 199.XXX.161.65 
    gateway 199.XXX.161.64 
    dns-nameservers 199.XXX.162.41 199.XXX.162.141 
    bridge_ports eth0 
    bridge_stp off  # disable Spanning Tree Protocol 
    bridge_fd 0   # no forwarding delay 
    bridge_maxwait 0 # no delay before a port becomes available 

allow-hotplug xenbr0 # start interface on hotplug event 


[email protected]:~# ip a 
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 
    inet 127.0.0.1/8 scope host lo 
    inet6 ::1/128 scope host 
     valid_lft forever preferred_lft forever 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master xenbr0 state UP qlen 1000 
    link/ether 00:25:90:d5:06:1a brd ff:ff:ff:ff:ff:ff 
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 
    link/ether 00:25:90:d5:06:1b brd ff:ff:ff:ff:ff:ff 
4: xenbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 00:25:90:d5:06:1a brd ff:ff:ff:ff:ff:ff 
    inet 199.XXX.161.65/31 brd 199.XXX.161.65 scope global xenbr0 
    inet6 fe80::XXXX:90ff:fed5:61a/64 scope link 
     valid_lft forever preferred_lft forever 
8: vif1.0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master xenbr0 state UP qlen 32 
    link/ether fe:ff:ff:ff:ff:ff brd ff:ff:ff:ff:ff:ff 
    inet6 fe80::fcff:ffff:feff:ffff/64 scope link 
     valid_lft forever preferred_lft forever 


[email protected]:~# brctl show 
bridge name bridge id   STP enabled interfaces 
xenbr0  8000.002590d5061a no   eth0 
              vif1.0 


[email protected]:~# route -n 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
0.0.0.0   199.XXX.161.64 0.0.0.0   UG 0  0  0 xenbr0 
192.XXX.13.128 0.0.0.0   255.255.255.240 U  0  0  0 xenbr0 
199.XXX.161.64 0.0.0.0   255.255.255.254 U  0  0  0 xenbr0 

[email protected]:~# iptables -L -n 
Chain INPUT (policy ACCEPT) 
target  prot opt source    destination 

Chain FORWARD (policy ACCEPT) 
target  prot opt source    destination 
ACCEPT  all -- 0.0.0.0/0   0.0.0.0/0   PHYSDEV match --physdev-out vif1.0 --physdev-is-bridged 
ACCEPT  udp -- 0.0.0.0/0   0.0.0.0/0   PHYSDEV match --physdev-in vif1.0 --physdev-is-bridged udp spt:68 dpt:67 
ACCEPT  all -- 0.0.0.0/0   0.0.0.0/0   PHYSDEV match --physdev-out vif1.0 --physdev-is-bridged 
ACCEPT  all -- 192.XXX.13.129  0.0.0.0/0   PHYSDEV match --physdev-in vif1.0 --physdev-is-bridged 

Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination 

Этот хост может достичь своего шлюза и, таким образом, интернет.

[email protected]:~# ping -c 1 199.XXX.161.64 
PING 199.XXX.161.64 (199.XXX.161.64) 56(84) bytes of data. 
64 bytes from 199.XXX.161.64: icmp_req=1 ttl=64 time=0.459 ms 

--- 199.XXX.161.64 ping statistics --- 
1 packets transmitted, 1 received, 0% packet loss, time 0ms 
rtt min/avg/max/mdev = 0.459/0.459/0.459/0.000 ms 

У меня также есть domU (с той же ОС), для которого требуется основной IP-адрес в другой подсети. В этой подсети нет шлюза в сети. Я хочу, чтобы моя настройка сети была мостиковой (без dom0-маршрутизации или NAT), поэтому я добавил шлюз dom0 в качестве шлюза для domU, как описано в this blogpost.

Конфигурация DOMU:

[email protected]:~# ip a 
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 
    inet 127.0.0.1/8 scope host lo 
    inet6 ::1/128 scope host 
     valid_lft forever preferred_lft forever 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 
    link/ether 00:16:3e:b7:7e:cc brd ff:ff:ff:ff:ff:ff 
    inet 192.XXX.13.129/28 brd 192.XXX.13.143 scope global eth0 
    inet6 fe80::XXXX:3eff:feb7:7ecc/64 scope link 
     valid_lft forever preferred_lft forever 


[email protected]:~# route -n 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
0.0.0.0   199.XXX.161.64 0.0.0.0   UG 0  0  0 eth0 
192.XXX.13.128 0.0.0.0   255.255.255.240 U  0  0  0 eth0 
199.XXX.161.64 0.0.0.0   255.255.255.255 UH 0  0  0 eth0 

В этой конфигурации DOMU все еще не имеет доступа к сети. Чтобы проверить работу моста, я вручную добавил маршрут к dom0.

[email protected]:~# route -n 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
0.0.0.0   199.XXX.161.64 0.0.0.0   UG 0  0  0 eth0 
192.XXX.13.128 0.0.0.0   255.255.255.240 U  0  0  0 eth0 
199.XXX.161.64 0.0.0.0   255.255.255.255 UH 0  0  0 eth0 
199.XXX.161.65 0.0.0.0   255.255.255.255 UH 0  0  0 eth0 

Теперь dom0 и domU могут общаться через мост.

[email protected]:~# ping -c 1 199.XXX.161.65 
PING 199.XXX.161.65 (199.XXX.161.65) 56(84) bytes of data. 
64 bytes from 199.XXX.161.65: icmp_req=1 ttl=64 time=0.037 ms 

--- 199.XXX.161.65 ping statistics --- 
1 packets transmitted, 1 received, 0% packet loss, time 0ms 
rtt min/avg/max/mdev = 0.037/0.037/0.037/0.000 ms 

[email protected]:~# ping -c 1 192.XXX.13.129 
PING 192.184.13.129 (192.XXX.13.129) 56(84) bytes of data. 
64 bytes from 192.XXX.13.129: icmp_req=1 ttl=64 time=0.100 ms 

--- 192.XXX.13.129 ping statistics --- 
1 packets transmitted, 1 received, 0% packet loss, time 0ms 
rtt min/avg/max/mdev = 0.100/0.100/0.100/0.000 ms 

Однако domU все еще не может добраться до шлюза.

[email protected]:~# ping -c 1 199.XXX.161.64 
PING 199.XXX.161.64 (199.XXX.161.64) 56(84) bytes of data. 
From 192.XXX.13.129 icmp_seq=1 Destination Host Unreachable 

--- 199.XXX.161.64 ping statistics --- 
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms 

Я попытался войти установить, если трафик на самом деле направляется через мост, вставив -j LOG правило в верхней части ввода, вывода и FORWARD IPtables цепей. Когда domU пытается выполнить ping-шлюз, dom0 не регистрирует один пакет. Я также попытался вручную добавить запись для шлюза в таблице ARP domU, но результаты были одинаковыми. DomU не может достичь шлюза и, следовательно, не имеет доступа к сети, кроме возможности общаться с dom0 через статический маршрут.

ответ

1

Так что, если я правильно понять это, следующая конфигурация сети для DomU:

  • 192.XXX.13.129/28 - DomU IP-адрес
  • 199.XXX.161.64 - DomU GW Адрес

Проблема заключается в том, что у вашего DomU нет маршрута (уровень 3), чтобы он мог разговаривать с адресом GW, поскольку адрес GW находится в другой подсети. Таким образом, хотя маршрутизатор находится в одной сети уровня 2, маршрутизатор (если он обрабатывает ваши пакеты) не знает о вашей сети уровня 3 и отправляет ответы на свой шлюз по умолчанию.

То, что вы можете выполнить ping Dom0 из DomU, является нечетным и, вероятно, результатом как Dom0, так и DomU, используя тот же Linux-мост (который не является настоящим коммутатором Ethernet, скорее похожим на немой центр).

Простым решением является добавление адреса из вашей сети DomU в интерфейс LAN на вашем маршрутизаторе.

Лучшим решением было бы использовать VLAN для сегментирования различных сетей через уровень 2 и замены Linux-мостов Open vSwitch. Это полностью изолирует трафик Dom0 и DomU, чтобы они могли связываться через маршрутизатор и, возможно, межсетевой экран.

+0

Да, но именно поэтому я вручную добавил маршрут на domU для отправки трафика на шлюз через мост. Tcpdump показывает, что это работает, но шлюз не отвечает. Является ли прямое общение с хостом в другой подсети действительно невозможным? Поскольку blogpost демонстрирует это, и, похоже, для многих людей в комментариях я думал, что это можно сделать. Решение, которое вы предлагаете, в основном маршрутизируется на dom0, что сделает промежуточный адрес отображаемым в traceroute. Это верно? Спасибо за быстрый ответ! – Rapsey

+0

Мост работает на уровне 2, маршрутизатор работает на уровне 3. Добавление маршрута на интерфейс может получить фактический пакет для маршрутизатора через уровень 2, однако, поскольку маршрутизатор не настроен с адресом 192.XXX.13.128/28 , он отправит ответ для ваших сообщений на свой шлюз по умолчанию. Я предлагаю вам добавить дополнительный дополнительный интерфейс на маршрутизаторе, чтобы он имел как адрес 199, так и адрес 192. Я бы не рекомендовал использовать Dom0 в качестве маршрутизатора. С другой стороны, я быстро прекратил использовать Linux Bridges в пользу Open vSwitch из-за ограничений Linux Bridges. –