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

j0k*_*ker 6 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
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

提前致谢!

0xA*_*xAF 5

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

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

例如,如果您的 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
Run Code Online (Sandbox Code Playgroud)

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

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

iptables -t nat -A PREROUTING -p tcp --dport 1:65535 -j REDIRECT --to-ports 10000
Run Code Online (Sandbox Code Playgroud)

如果您只听 localhost,这仍然无济于事。