我有一个两个虚拟网卡的kvm guest。
III.III.III.III (eth0) EEE.EEE.EEE.EEE (eth1) 我正在使用macvtap。 主机拥有自己的外部IP。 我可以从主机ping两个网卡,但我不能从外面ping EEE.EEE.EEE.EEE 。 我在两个网卡上都做了一个tcpdump。 我在eth1上看到了ICMP请求,但似乎是使用“错误的”内部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为来宾内部networking设置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
由于NAT的原因,我不能ping EEE.EEE.EEE.EEE外部的EEE.EEE.EEE.EEE ,请求被发送到一个IP地址,并且答复是从另一个地方来的? 有2个默认路由可能不是一个好主意,我应该删除额外的NAT。 但是我不明白为什么ICMP应答数据包不会在获取请求的接口上发送。 它是一个“function”(一种负载平衡器)? 可以避免这种情况吗?