iptables - 如何将所有外部端口转发到一个本地端口

iptables - 如何将所有外部端口转发到一个本地端口

我希望系统上的每个外部端口都运行一个服务。由于启动该服务的 65535 个单个实例(我猜是这样的......)是行不通的,所以我想到使用 iptables 来实现这一点。

该服务(仅 10 行 Python 脚本)正在监听 localhost:10000。iptables 现在应该将外部端口上的每个 TCP 请求转发到此本地端口,以便每个端口看起来都是打开的。我对 iptables 的经验很少,也没有时间阅读更多关于这个主题的内容,所以我无法让它正常工作。

我试过:

iptables -A PREROUTING -t nat -i eth0 -p tcp -j DNAT --to-destination 127.0.0.1:10000

但是,当从本地网络内扫描时,所有端口都显示为已过滤,而不是开放。当前没有其他规则处于活动状态,并且所有策略都设置为 ACC

我怎样才能做到这一点?

提前致谢!

答案1

由于您的政策是接受的,您可以使用 iptables 行,但进行 2 处更改:

  1. 使用 --dport 1:65535 添加目标端口范围
  2. 将 127.0.0.1 更改为你的接口 IP(eth0 的 IP)

例如,如果你的 eth0 IP 是 192.168.1.10,则此行有效:

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 1:65535 -j DNAT --to-destination 192.168.1.10:10000

所有到 192.168.1.10 的连接(到任何端口)都将被重定向到端口 10000。

编辑:您也可以使用 REDIRECT 目标:

iptables -t nat -A PREROUTING -p tcp --dport 1:65535 -j REDIRECT --to-ports 10000

如果您只听本地主机,这仍然不会对您有帮助。

答案2

相关内容