
- 想像一個僅在本地主機上偵聽的伺服器應用程序,
- 沒有設定可以在其他介面上偵聽
- 想要強制讓它監聽其他接口,例如 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