我有一个监听的二进制可执行文件127.0.0.1:5373
。但我希望其他人可以从另一台计算机访问该服务,就像它监听的一样0.0.0.0:5373
。
因为它是二进制文件,所以我无法修改它的源代码来监听0.0.0.0
。
我认为iptables
或者nftables
可以做到这一点但不确定如何做。
答案1
# iptables -t nat -I PREROUTING -m addrtype --dst-type local -p tcp --dport 5373 -j DNAT --to-destination 127.0.0.1
我假设程序绑定到 tcp 端口。(如果您不确定,可以使用类似的方法ss -nltpu
进行检查。如果是 UDP,情况可能会更复杂。)
-m addrtype --dst-type local
是可选的。它仅匹配目标地址为主机本身地址的流量。如果主机充当路由器等,并且您不想拦截发往另一台主机的类似流量,则这很有用。
-p tcp --dport 5373
我想这是不言自明的。
-j DNAT --to-destination 127.0.0.1
将要还确保反转SNAT 将对回复流量执行,即客户端主机将看到源地址为“原始”目标地址的回复。无需其他规则。
route_localnet
请注意,仅当sysctl 设置为1
:时,上述规则才会起作用:
# sysctl -w sysctl -w net.ipv4.conf.all.route_localnet=1
(当使用持久配置文件进行设置时,您可能想要进行设置net.ipv4.conf.default.route_localnet
。如果有兴趣,请自行研究以找出它们的区别。)
iptables
注意和的影响sysctl
都是易挥发的。请自行研究如何制作它们执着的在您使用的发行版上。
PS:顺便说一句,我不知道这是否route_localnet
会1
带来任何安全风险。