- 想象一个仅在本地主机上侦听的服务器应用程序,
- 没有设置可以在其他接口上侦听
- 想要强制让它监听其他接口,例如 eth0
绑定程序(libindp.so) 可以做到这一点。但是,它无法从 Debian 存储库中获得,这使得使用起来很不方便。因此我想问,是否有任何bindp 的替代方案来实现相同的目标?
答案1
这个问题已经被问过十几次了,一个可以接受的答案是使用 iptables:
sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080
第一个命令是允许从外部网络到内部网络的重定向(出于安全原因禁用),第二个命令是进行重定向(当然,您必须根据您的具体情况调整端口,而您还没有这样做)无论如何解释)。
另一种解决方案可能是使用OpenSSH
本地端口重定向,它允许您执行基本相同的操作,但无需禁用内核保护(我不会详细说明这一点,因为其他解决方案已经可以使用)。
根据本地绑定服务使用的协议,您还可以用作nginx
反向代理或sshl
多路复用器。
最后,socat
、stunnel
和朋友也可以用于此目的。
iptables 解决方案的优点是它位于内核中,因此速度更快。
警告
由于SE是一个系统,准确回答被认为比尝试实际解决问题更好,所以我尝试回答这个问题。然而,鉴于您的描述缺乏细节,我怀疑您实际上属于以下两种情况之一:
- 要么该服务实际上可以配置为侦听可通过单词访问的接口,但您不知道如何操作,在这种情况下,您应该描述该服务本身并询问如何使其从外部可用。
- 或者出于技术或安全原因,该服务实际上并不意味着可以通过文字访问。
但如果我不知道它是什么服务,我就无法更准确。
答案2
索卡特工具 (Debian 软件包) 可以帮助:
socat -d -d TCP4-LISTEN:80,bind=192.168.1.1,fork TCP4:localhost:80
答案3
借助 IPv6iptables 解决方案不起作用。您可以使用@Artem的解决方案,例如
sudo socat TCP6-LISTEN:80,bind=[2001::beef],fork TCP6:[2001::beef]:8080