我如何从另一台计算机访问 127.0.0.1 上的服务监听

我如何从另一台计算机访问 127.0.0.1 上的服务监听

我有一个监听的二进制可执行文件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_localnet1带来任何安全风险。

相关内容