使用 iptables 进行简单的端口转发

使用 iptables 进行简单的端口转发

我从以下内容开始,这似乎没有必要,但似乎没有坏处:

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 配置中存在规则,则应通过删除筛选块中的规则来允许转发。

相关内容