有没有办法使用iptables更改本地端口绑定?

问题描述

对不起,我是iptables的菜鸟。

我有一个VPN应用程序,该应用程序绑定到本地端口1080,而连接到目标端口1194(openvpn)。该应用程序不支持特权端口绑定(需要root用户,我具有)。我希望该应用程序在本地端口25上绑定。我已经浏览了Google,答案似乎是iptables。我看过很多帖子,其中很多人都说SNAT目标是我应该使用的目标。

我尝试了以下代码

iptables -I POSTROUTING -o wlan0 -t nat -p tcp --destination 195.123.216.159 -m tcp --dport 1194 -j SNAT --to-source 192.168.43.239:25

这些:

iptables -I FORWARD -p tcp -d 192.168.43.239 -m tcp --dport 25 -j ACCEPT

iptables -I FORWARD -p tcp -s 192.168.43.239 -m tcp --sport 25 -j ACCEPT

iptables -I OUTPUT -o wlan0 -p tcp -m tcp --sport 25 -j ACCEPT

iptables -I INPUT -i wlan0 -p tcp -m tcp --dport 25 -j ACCEPT

我想要的是在运行netstat命令时使输出类似于以下内容

tcp       0      0 192.168.43.239:25      195.123.216.159:1194      ESTABLISHED

但是,相反,在运行所有代码之后,netstat的输出变为:

tcp       0      0 192.168.43.239:1080      195.123.216.159:5000      ESTABLISHED

是否可以使用iptables更改绑定端口?请帮助我理解网络的概念。

解决方法

事实证明 iptables 只是在正确地完成它的工作。翻译后的数据包最终不会被 netstat 跟踪。我迷路了,完全不明白 iptables 不会改变应用程序使用的 ip v6 流量。以及不需要的转发规则,因为链策略是接受数据包。