我有一個綁定到連接埠 8000 的 HTTP 服務,我想從網路上的另一台電腦存取該服務,但我似乎無法使用電腦的外部 IP 位址(例如 192.168.0.105)進行連線。我檢查了 OS X 防火牆沒有運行,所以我假設問題是服務僅綁定到 IP 位址 127.0.0.1,而不是外部 IP 位址。
將連接埠 8000 上的外部連線暫時轉送至 127.0.0.1:8000 的最簡單方法是什麼?
答案1
使本地綁定連接埠可用於公共介面而無需重新配置底層服務的最簡單、最快捷的方法是建立 ssh 連接埠轉送並使其全域可用(預設情況下它僅在本機偵聽)
因為是同一台機器,所以您必須使用不同的連接埠。在運行該服務的 Mac 上,啟動
ssh -v -g -L 8001:localhost:8000 localhost
-v
詳細信息,以便您看到傳入的連接
-g
使其在公共介面上可用
-L port:targethost:targetport
好吧,你已經知道了:-)
如果計算機上有多個活動接口,請擴展該-L
語句以包含您想要將其綁定到的地址。
答案2
使用ipfw,它就像linux中的iptables一樣。
我猜您正在使用 ssh 連接埠將服務轉發到本地。
ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.0.105 dst-port 8000
網路上的另一台機器可以透過 192.168.0.105:8000 存取該服務
答案3
如果我理解正確的話烏賊可能會起作用。另外,嘗試使用電腦名稱而不是 IP,或其他一些服務(ping、VNC、FTP 等)
答案4
首先,確保你正在解決正確的問題。您可以使用下列命令檢查 Web 伺服器正在偵聽哪些 IP netstat
:
$ netstat -an | grep LISTEN
tcp46 0 0 *.8000 *.* LISTEN
tcp4 0 0 *.88 *.* LISTEN
tcp6 0 0 *.88 *.* LISTEN
tcp4 0 0 127.0.0.1.631 *.* LISTEN
tcp6 0 0 ::1.631 *.* LISTEN
在此範例的第一行中,「*.8000」表示某個東西(大概是 Web 伺服器)正在偵聽所有綁定 IP 上的連接埠 8000。另一方面,最後兩行意味著某些東西正在偵聽 IPv4 和 IPv6 環回上的連接埠 631(127.0.0.1 和 ::)。如果您在執行命令時看到“127.0.0.1:8000”,則表示您的診斷正確。
如果這是問題所在,最好的解決方法可能是讓 Web 伺服器綁定到所有 IP,而不是嘗試使用轉發器來解決它。檢查您的 Apache 設定檔(OS X 上的預設值為 /etc/apache2/httpd.conf,以及其中「包含」的所有內容)中的「Listen」指令。如果你看到
Listen 127.0.0.1:8000
將其更改為
Listen 8000