我正在尝试使用具有以下设置的 OpenVPN 在两个远程 LAN 网络(10.0.0.0/24、10.0.1.0/24)之间提供 L3 连接:
+----------------+ +---------------------+ +---------------------+
|VM A | |VM B (OpenVPN Server)| |VM C (OpenVPN Client)|
|eth0:10.0.0.5/24|--|eth0:10.0.0.4/24 | |eth0:10.0.1.4/24 |
+----------------+ |tun0:10.8.0.1/32 |==|tun0:10.8.0.2/32 |
+---------------------+ +---------------------+
提供以下 IP 表规则:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.0.0.4
ping VMC->VMA(10.0.0.5) ICMP 回显请求的 IP 在 VM B 上已正确 SNAT:
VM-B# tcpdump -i eth0 icmp
09:27:36.170555 IP 10.0.0.4 > 10.0.0.5: ICMP echo request, id 4049, seq 2, length 64
09:27:36.171201 IP 10.0.0.5 > 10.0.0.4: ICMP echo reply, id 4049, seq 2, length 64
但是 ping VMA->VMC(10.0.1.4) echo reply 的 IP 不是在 VM B 上 SNATed:
VM-B# tcpdump -i eth0 icmp
09:33:31.791095 IP 10.0.0.5 > 10.0.1.4: ICMP echo request, id 6590, seq 2, length 64
09:33:31.795299 IP 10.0.1.4 > 10.0.0.5: ICMP echo reply, id 6590, seq 2, length 64
在我的情况下,这会导致其他底层(VM 的主机)反欺骗 iptables 规则丢弃数据包以防止 IP 欺骗。
我不明白为什么 ICMP 回显回复数据包没有被正确 SNAT 以及如何实现。谢谢你。