我已经制定了以下设计:
client linuxserver destination
192.168.160.34 192.168.163.196 192.168.18.1
我可以从客户端 ping 服务器,也可以从服务器 ping 客户端,它们都在同一个子网上,192.168.160/22
我也可以从服务器 ping 目标
客户端 IP 路由列表:
default via 192.168.163.196 dev ens192
192.168.160.0/22 dev ens192 proto kernel scope link src 192.168.160.34
客户端的 iptables 策略在所有链上都被接受并且已经被刷新。服务器的 iptables 在所有链上都被接受,并且有一些docker + kvm
规则等等。
我继续在服务器上添加以下内容:
iptables -t nat -A POSTROUTING -s 192.168.160.34 -j SNAT --to 192.168.163.196
我还将net.ipv4.ip_forward=1
其添加并应用于内核参数。
我仍然无法从客户端 ping 通目的地。
tcpdump:
00:00:00.000000 IP (tos 0x0, ttl 64, id 3182, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.160.34 > 192.168.18.1: ICMP echo request, id 4442, seq 1, length 64
00:00:00.000052 IP (tos 0x0, ttl 63, id 3182, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.163.196 > 192.168.18.1: ICMP echo request, id 4442, seq 1, length 64
00:00:00.000680 IP (tos 0x0, ttl 125, id 32481, offset 0, flags [none], proto ICMP (1), length 84)
192.168.18.1 > 192.168.163.196: ICMP echo reply, id 4442, seq 1, length 64
00:00:01.028150 IP (tos 0x0, ttl 64, id 3405, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.160.34 > 192.168.18.1: ICMP echo request, id 4442, seq 2, length 64
00:00:00.000042 IP (tos 0x0, ttl 63, id 3405, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.163.196 > 192.168.18.1: ICMP echo request, id 4442, seq 2, length 64
00:00:00.000489 IP (tos 0x0, ttl 125, id 32749, offset 0, flags [none], proto ICMP (1), length 84)
192.168.18.1 > 192.168.163.196: ICMP echo reply, id 4442, seq 2, length 64
00:00:01.023522 IP (tos 0x0, ttl 64, id 3641, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.160.34 > 192.168.18.1: ICMP echo request, id 4442, seq 3, length 64
我的 icmp 数据包到达目的地并返回到 linux 服务器,但无法到达客户端。如能提供任何帮助,我将不胜感激。
我尝试过的事情:
使用相同的信息在全新安装的机器上测试 nat 规则,结果发现成功了。(只需将此测试的客户端上的默认网关更改为新服务器即可)
刷新 Linux 服务器上的所有链,再次添加规则并重试(无济于事)
在Linux服务器上添加以下内核参数(没有帮助):
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.all.accept_source_route = 1
答案1
我相信你需要:
iptables -t nat -A POSTROUTING -d 192.168.18.1 -j SNAT --to <some_ip_here>
与目标连接到同一网络的 linuxserver 接口的 IP 地址在哪里。我猜它可能是 192.168.18。