iptables SNAT 返回流量未到达客户端

iptables SNAT 返回流量未到达客户端

我已经制定了以下设计:

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。

相关内容