具有 2 个默认网关的 kvm 客户路由

具有 2 个默认网关的 kvm 客户路由

我有一个带有两个虚拟 NIC 的 kvm 客户机。

  1. 具有内部 IP 的 NIC III.III.III.III(eth0)
  2. 具有外部 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 应答数据包没有发送到接收请求的接口上。​​这是“功能”(一种负载平衡器)吗?可以避免这种情况吗?

相关内容