我有一个带有两个虚拟 NIC 的 kvm 客户机。
- 具有内部 IP 的 NIC
III.III.III.III
(eth0) - 具有外部 IP 的 NIC
EEE.EEE.EEE.EEE
(eth1)
我正在使用 macvtap。主机有自己的外部 IP。我可以从主机 ping 通两个 NIC,但无法EEE.EEE.EEE.EEE
从外部 ping 通。我在两个 NIC 上都执行了 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 设置,用于带 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 的原因,我无法EEE.EEE.EEE.EEE
从外部 ping 通,请求发送到一个 IP,而回复来自另一个 IP?设置 2 个默认路由可能不是一个好主意,我应该删除额外的 NAT。但是我不明白为什么 ICMP 应答数据包没有发送到接收请求的接口上。这是“功能”(一种负载平衡器)吗?可以避免这种情况吗?