iptables正在重写我的UDP数据包上的源端口,这些端口是从tun接口出来的。我有NAT规则设置与端口X转发(详见下文)。当NAT后面的应用程序在端口X上接收到转发的UDP数据包,然后通过发送另一个具有源端口X的UDP数据包“应答”时,该数据包将以某种方式获得源端口1024。源端口甚至在离开NATed框之前就已经重写了。远程应用程序拒绝这个包,因为它期望的是源端口X,而不是1024。
我认为"隐式源端口映射“正在发生。我不需要这样做,因为端口X专用于一个函数,不会发生冲突: NATing机器和任何其他机器都不会使用该端口。如何强制iptables只保留源端口的原样?
在NAT后面的主机上,具有重写源端口的数据包的来源,我尝试了以下(一次一次),所有结果都一样:
iptables -t nat -A POSTROUTING -o tun0 -p udp --sport X -j SNAT --to 10.7.0.5:X
iptables -t nat -A POSTROUTING -o tun0 -p udp -j SNAT --to 10.7.0.5
iptables -t nat -A POSTROUTING -o tun0 -p udp -j MASQUERADE在执行NAT的远程外接框上:
iptables -t nat -A PREROUTING -i eth0 -p udp --dport X -j DNAT --to-destination 10.7.0.5:X
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE发布于 2017-12-03 19:55:51
通过将应用程序绑定到tun0接口而不是0.0.0.0来解决问题。
我尝试这样做是因为在conntrack -E中,我看到连接具有来自不同接口(而不是tun0)的源地址。因此,即使数据包到达正确的目的地,并重写了正确的源地址,连接跟踪器中的数据包状态也是不正确的。
https://unix.stackexchange.com/questions/408585
复制相似问题