У меня гость kvm с двумя виртуальными сетевыми адаптерами.
III.III.III.III
(eth0) EEE.EEE.EEE.EEE
(eth1) Я использую macvtap. У хоста есть свой внешний IP. Я могу пинговать оба сетевых адаптера с хоста, но я не могу пинговать EEE.EEE.EEE.EEE
снаружи. Я сделал tcpdump на обоих NIC. Я вижу запросы ICMP на eth1, но похоже, что ответы отправляются с использованием «неправильного» внутреннего интерфейса eth0.
# tcpdump -i eth1 icmp -n
14:57:30.398789 IP XXX.XXX.XXX.XXX > EEE.EEE.EEE.EEE: ICMP echo request, id 1408, seq 6, length 64
14:57:31.398546 IP XXX.XXX.XXX.XXX > EEE.EEE.EEE.EEE: ICMP echo request, id 1408, seq 7, length 64
14:57:32.398547 IP XXX.XXX.XXX.XXX > EEE.EEE.EEE.EEE: ICMP echo request, id 1408, seq 8, length 64
14:57:33.398550 IP XXX.XXX.XXX.XXX > EEE.EEE.EEE.EEE: ICMP echo request, id 1408, seq 9, length 64
# tcpdump -i eth0 icmp -n
14:57:40.398610 IP EEE.EEE.EEE.EEE > XXX.XXX.XXX.XXX: ICMP echo reply, id 1408, seq 16, length 64
14:57:41.398562 IP EEE.EEE.EEE.EEE > XXX.XXX.XXX.XXX: ICMP echo reply, id 1408, seq 17, length 64
14:57:42.398562 IP EEE.EEE.EEE.EEE > XXX.XXX.XXX.XXX: ICMP echo reply, id 1408, seq 18, length 64
14:57:43.398588 IP EEE.EEE.EEE.EEE > XXX.XXX.XXX.XXX: ICMP echo reply, id 1408, seq 19, length 64
У меня 2 маршрута по умолчанию. Одна настройка libvirt / kvm для гостевой внутренней сети с NAT, а другая настройка для eth1.
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 ###.###.###.### 0.0.0.0 UG 0 0 0 eth1
0.0.0.0 192.168.122.1 0.0.0.0 UG 0 0 0 eth0
###.###.###.### 0.0.0.0 255.255.255.255 UH 0 0 0 eth1
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Я не могу пинговать EEE.EEE.EEE.EEE
извне из-за NAT запросы отправляются на IP, а ответы приходят с другого? Наличие двух маршрутов по умолчанию, вероятно, не лучшая идея, я должен удалить лишний NAT. Однако я не понимаю, почему пакеты ответов ICMP не отправляются на интерфейс, получающий запросы. Это «фича» (своего рода балансировщик нагрузки)? Можно ли этого избежать?