![iptables - 如何将所有外部端口转发到一个本地端口](https://linux22.com/image/1319468/iptables%20-%20%E5%A6%82%E4%BD%95%E5%B0%86%E6%89%80%E6%9C%89%E5%A4%96%E9%83%A8%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E5%88%B0%E4%B8%80%E4%B8%AA%E6%9C%AC%E5%9C%B0%E7%AB%AF%E5%8F%A3.png)
我希望系统上的每个外部端口都运行一个服务。由于启动该服务的 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 处更改:
- 使用 --dport 1:65535 添加目标端口范围
- 将 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
如果您只听本地主机,这仍然不会对您有帮助。