Назад | Перейти на главную страницу

Dom0 не перенаправляет на DomU

Ситуация:

DomU: Debian SID

/ и т.д. / сеть / интерфейсы

auto eth0
iface eth0 inet static
 address x.x.x.55
 gateway x.x.x.49
 netmask 255.255.255.255
 pointopoint x.x.x.49

Ping DomU -> x.x.x.49 (он же Dom0)

PING x.x.x.49 (x.x.x.49) 56(84) bytes of data.
64 bytes from x.x.x.49: icmp_req=1 ttl=64 time=0.107 ms

Пинг DomU -> 8.8.8.8

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
34 packets transmitted, 0 received, 100% packet loss, time 33263ms

tcpdump -Kn

21:03:30.316328 IP x.x.x.55 > 8.8.8.8: ICMP echo request, id 4904, seq 3, length 64
21:03:31.324344 IP x.x.x.55 > 8.8.8.8: ICMP echo request, id 4904, seq 4, length 64
21:03:32.332338 IP x.x.x.55 > 8.8.8.8: ICMP echo request, id 4904, seq 5, length 64
21:03:33.340323 IP x.x.x.55 > 8.8.8.8: ICMP echo request, id 4904, seq 6, length 64
21:03:34.348343 IP x.x.x.55 > 8.8.8.8: ICMP echo request, id 4904, seq 7, length 64

Dom0: Debian Wheezy с Xen 4.1

/ и т.д. / сеть / интерфейсы

auto eth0
iface eth0 inet static
 address x.x.x.49
 gateway x.x.x.33
 netmask 255.255.255.255
 pointopoint x.x.x.33

sysctl -a

net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.eth0.proxy_arp = 1
net.ipv6.conf.eth0.forwarding = 1
net.ipv4.conf.vif1/0.proxy_arp = 1

iptables -L -n (правила автоматически добавляются vif-route)

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:bootpc dpt:bootps
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            PHYSDEV match --physdev-out vif1.0 --physdev-is-bridged
ACCEPT     all  --  x.x.x.55             0.0.0.0/0            PHYSDEV match --physdev-in vif1.0 --physdev-is-bridged

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

cat /etc/xen/xend-config.sxp | grep -e скрипт

# (network-script network-bridge)
# (network-script 'network-bridge netdev=eth1')
# (network-script 'network-bridge bridge=<name>')
#(vif-script vif-bridge)
(network-script network-route)
(vif-script     vif-route)
#(network-script network-nat)
#(vif-script     vif-nat)
#(resource-label-change-script '')

Пинг Dom0 -> DomU

PING x.x.x.55 (x.x.x.55) 56(84) bytes of data.
64 bytes from x.x.x.55: icmp_req=1 ttl=64 time=0.148 ms

tcpdump -Kn | grep 55

21:01:36.545890 IP x.x.x.55 > 8.8.8.8: ICMP echo request, id 4880, seq 4, length 64
21:01:36.551504 IP 8.8.8.8 > x.x.x.55: ICMP echo reply, id 4880, seq 4, length 64
21:01:37.545838 IP x.x.x.55 > 8.8.8.8: ICMP echo request, id 4880, seq 5, length 64
21:01:37.550473 IP 8.8.8.8 > x.x.x.55: ICMP echo reply, id 4880, seq 5, length 64

Вопрос

Что может случиться, что Dom0 не пересылает входящие пакеты TCP на мой DomU?

Решение

Ну как оказалось, все настройки выше совершенно правильно. Проблема заключалась в том, что мой хостер назначил выделенный MAC-адрес дополнительному IP. Поэтому Dom0 сразу отказался от пакета, так как посчитал, что это не пакет для себя.

После удаления этого виртуального MAC пакеты были приняты без ошибок и прошли через всю систему.

Следовательно

Если вы столкнетесь с тем, что на вашем устройстве Ethernet (eth0 в моем случае), убедитесь, что все остальное правильно, и убедитесь, что MAC-адрес совпадает с вашим основным адресом, т.е. eth0!