首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在iptables中禁用通过NAT发送的输出UDP数据包的隐式源端口映射?

如何在iptables中禁用通过NAT发送的输出UDP数据包的隐式源端口映射?
EN

Unix & Linux用户
提问于 2017-12-03 18:16:01
回答 1查看 1.3K关注 0票数 2

iptables正在重写我的UDP数据包上的源端口,这些端口是从tun接口出来的。我有NAT规则设置与端口X转发(详见下文)。当NAT后面的应用程序在端口X上接收到转发的UDP数据包,然后通过发送另一个具有源端口X的UDP数据包“应答”时,该数据包将以某种方式获得源端口1024。源端口甚至在离开NATed框之前就已经重写了。远程应用程序拒绝这个包,因为它期望的是源端口X,而不是1024。

我认为"隐式源端口映射“正在发生。我不需要这样做,因为端口X专用于一个函数,不会发生冲突: NATing机器和任何其他机器都不会使用该端口。如何强制iptables只保留源端口的原样?

在NAT后面的主机上,具有重写源端口的数据包的来源,我尝试了以下(一次一次),所有结果都一样:

代码语言:javascript
复制
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的远程外接框上:

代码语言:javascript
复制
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
EN

回答 1

Unix & Linux用户

发布于 2017-12-03 19:55:51

通过将应用程序绑定到tun0接口而不是0.0.0.0来解决问题。

我尝试这样做是因为在conntrack -E中,我看到连接具有来自不同接口(而不是tun0)的源地址。因此,即使数据包到达正确的目的地,并重写了正确的源地址,连接跟踪器中的数据包状态也是不正确的。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/408585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档