我从以下内容开始,这似乎没有必要,但似乎没有坏处:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
以下两个命令创建从端口 5433 到端口 5432 的端口转发。
sudo /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 5433 -m comment --comment "Port forward 5433->5432" -j REDIRECT --to-ports 5432
sudo /sbin/iptables -t nat -A OUTPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 5433 -m comment --comment "Port forward 5433->5432" -j REDIRECT --to-ports 5432
这在本地有效。以下两个命令均成功连接并获取“空回复”,因为侦听服务器不是 HTTP。
curl http://localhost:5432
curl http://localhost:5433
但是,当我从另一台服务器运行相同的命令时:
curl http://<local IP>:5432
curl http://<local IP>:5433
5432 curl 可以连接,但 5433 curl 却不连接,这意味着端口转发似乎无法从远程服务器工作。
我如何修复我的 iptables 规则以使端口转发从远程服务器和本地服务器工作?
我看到第二条规则指定“源”IP 为 127.0.0.1/32。我尝试更改它,但找不到有效的方法。
答案1
有两件事你应该知道。
你应该在 NAT 块中添加 MASQUERADE 规则例如参见那里的说明,针对整个接口或仅针对一个端口。并且,如果 iptables 配置中存在规则,则应通过删除筛选块中的规则来允许转发。