如何使用 iptables 进行本地端口映射

如何使用 iptables 进行本地端口映射

我通常用这个命令来做本地端口映射

socat TCP4-LISTEN:80,fork,reuseaddr TCP4:127.0.0.1:8080

因此,每当客户端与我的机器的 80 端口通信时,它实际上是与 8080 端口通信。

它实际上是一个代理。

我想知道我是否可以使用 iptables 而不是运行代理来实现相同的目标。例如,我尝试了以下命令,但没有成功。

iptables -t nat -A PREROUTING -d <my-ip> -p tcp --dport 80 -j DNAT --to-destination :8080

更新

上述命令应该可以起作用,但是却没有起作用,因为有其他iptables规则影响它。

因此,如果没有其他规则,以下 3 个命令均可行。

iptables -t nat -A PREROUTING -d <我的 ip> -p tcp --dport 80 -j DNAT --to-destination <我的 ip>:8080
iptables -t nat -A PREROUTING -d <我的 ip> -p tcp --dport 80 -j DNAT --to-destination <我的 ip>:8080
iptables -t nat -A 预路由-d <我的 IP 地址>-p tcp --dport 80 -j DNAT --到目的地<我的 IP>:8080

谢谢@AlexD。读完你的回答后,我更加仔细地重新开始测试,并弄清楚了这一点。还要感谢@Ginnungagap,REDIRECT你向我展示的目标更简单、更直接。

新问题

根据测试结果,我现在有了新的问题,看起来 aSNATMASQUERADE目标对我来说不是必需的,为什么?我以为 aSNAT对于规则来说是强制性的DNAT

答案1

下面应该有效

iptables -t nat -A PREROUTING -p tcp -d <your-ip> --dport 80 -j DNAT --to-destination <your-ip>:8080

相关内容