我通常用这个命令来做本地端口映射
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
你向我展示的目标更简单、更直接。
新问题
根据测试结果,我现在有了新的问题,看起来 aSNAT
或MASQUERADE
目标对我来说不是必需的,为什么?我以为 aSNAT
对于规则来说是强制性的DNAT
。
答案1
下面应该有效
iptables -t nat -A PREROUTING -p tcp -d <your-ip> --dport 80 -j DNAT --to-destination <your-ip>:8080