Конфигурация Host-машины: # ifconfig eth0 Link encap:Ethernet HWaddr 00:04:23:D8:FD:C4 inet addr:10.0.101.19 Bcast:10.0.101.255 Mask:255.255.255.0 inet6 addr: fe80::204:23ff:fed8:fdc4/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3939660 errors:0 dropped:0 overruns:0 frame:0 TX packets:88993 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:278596214 (265.6 MiB) TX bytes:7778306 (7.4 MiB) Base address:0x2020 Memory:b8820000-b8840000 eth1 Link encap:Ethernet HWaddr 00:04:23:D8:FD:C5 inet addr:некий реальный адрес Bcast:некий реальный броадкаст Mask:255.255.255.0 inet6 addr: fe80::204:23ff:fed8:fdc5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3799143 errors:0 dropped:0 overruns:0 frame:0 TX packets:2831582 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:527150890 (502.7 MiB) TX bytes:437751694 (417.4 MiB) Base address:0x2000 Memory:b8800000-b8820000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1433 errors:0 dropped:0 overruns:0 frame:0 TX packets:1433 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:614915 (600.5 KiB) TX bytes:614915 (600.5 KiB) venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:2313938 errors:0 dropped:0 overruns:0 frame:0 TX packets:2057760 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:311778946 (297.3 MiB) TX bytes:172124254 (164.1 MiB) Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface реальный_адрес_для_VE_1 0.0.0.0 255.255.255.255 UH 0 0 0 venet0 некая_реальная_сеть 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.0.101.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1 0.0.0.0 некий_гейт_в_реальной_сети 0.0.0.0 UG 0 0 0 eth1 То есть у хост-машины два интерфейса, один смотрит во внутреннюю сеть, второй во внешнюю. Есть VE_1, там следующая сеть: ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) venet0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255 UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:1658 errors:0 dropped:0 overruns:0 frame:0 TX packets:1862 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:140120 (136.8 KiB) TX bytes:1346858 (1.2 MiB) venet0:0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:некий_адрес_VE_1 P-t-P:некий_адрес_VE_1 Bcast:некий_адрес_VE_1 Mask:255.255.255.255 UP BROADCAST POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 venet0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 venet0 0.0.0.0 192.0.2.1 0.0.0.0 UG 0 0 0 venet0 Проблема в том, что для VE_1 теряется маршрутизация в сеть, в которой находится eth0 хоста. Во все другие сети маршрутизация работает, а в эту никак. # traceroute -n 10.0.101.1 traceroute to 10.0.101.1 (10.0.101.1), 30 hops max, 38 byte packets 1 10.0.101.19 0.065 ms 0.024 ms 0.023 ms 2 * * * # traceroute -n 10.0.7.1 traceroute to 10.0.7.1 (10.0.7.1), 30 hops max, 38 byte packets 1 10.0.101.19 0.054 ms 0.024 ms 0.023 ms 2 10.0.7.1 0.468 ms 0.241 ms 0.488 ms Для хост-машины все работает. Что делать? Кто виноват? P.S.: # sysctl -a | grep forward|grep ipv4 net.ipv4.conf.venet0.mc_forwarding = 0 net.ipv4.conf.venet0.forwarding = 1 net.ipv4.conf.eth1.mc_forwarding = 0 net.ipv4.conf.eth1.forwarding = 1 net.ipv4.conf.eth0.mc_forwarding = 0 net.ipv4.conf.eth0.forwarding = 1 net.ipv4.conf.lo.mc_forwarding = 0 net.ipv4.conf.lo.forwarding = 1 net.ipv4.conf.default.mc_forwarding = 0 net.ipv4.conf.default.forwarding = 1 net.ipv4.conf.all.mc_forwarding = 0 net.ipv4.conf.all.forwarding = 1 net.ipv4.ip_forward = 1
Решение было найдено. В файле /etc/vz/vz.conf строчка "VE_ROUTE_SRC_DEV="eth0"", была изменена на eth1. P.S.: нифига не решение. P.P.S.: решением стало прибитие интерфейса eth0, смотрящего в 10.0.101.0/24. Трафик пошел через стандартный раутер. Отсюда вопрос: как добиться работоспособности системы, не убивая eth0?
Возможно, все дело в том, что ответ от машин из сети eth0 не доходит до VE_1. Утилита traceroute последовательно отсылает пакеты и с каждого промежуточного пункта, где пакет роутится, ей приходят ответы. Мы видим, что пришел ответ с Host-машины. Видимо, далее пакет дошел до машины из сети eth0, она отвечает, но правила маршрутизации прописаны таким образом, что ответы не доходят до VE_1, так как эта машина находится в другой сети. С принципами работы утилиты traceroute можно ознакомиться на http://ru.wikipedia.org/wiki/Traceroute P.S. VE_ROUTE_SRC_DEV="eth0" означает, что на пакетах, пришедших с Host-машины на VE_1 будет в качестве source адреса стоять ip адрес eth0 интерфейса. P.P.S. Быть может, Вам поможет SNAT на ip адрес Host-машины, который она имеет на интерфейсе eth0 при попытке доступа VE_1 к eth0 интерфейсу http://wiki.openvz.org/Using_NAT_for_VE_with_private_IPs