
現在,如果我沒有記錯的話,連接埠 80 到連接埠 80 上的 Web 伺服器的 SSH 隧道應該允許我的連接埠 80 透過該伺服器建立隧道,對嗎?然而,當我設定隧道並訪問網站時,我的日誌仍然顯示來自我的家庭電腦而不是伺服器的 IP。有什麼想法嗎?
我使用以下命令,但它似乎所做的只是透過 SSH 連接到終端機中的主機:
ssh root@webserver -L 80:127.0.0.1:80
答案1
剛剛嘗試過並確認它有效:
ssh -ND 8080 [email protected]
需要 root 才能綁定電腦上的本機連接埠 80,因為它是保留連接埠(8080 是常見的備用連接埠)。若要僅轉送您的瀏覽器流量,您可以將 Firefox / Chrome / 任何裝置設定為在「8080」上使用 Socks 代理程式「localhost」。
在沒有 root 的情況下嘗試一下,它適用於我沒有 root 存取權的網頁伺服器。
答案2
設定隧道後(使用-L
),您需要更改您使用的 URL,例如,http://127.0.0.1/
或者如果由於虛擬託管設定而網站名稱必須匹配,則您需要將其新增至桌面主機檔案:
127.0.0.1 www.domain.com
您可以在伺服器虛擬主機上定義一個別名,這樣您就可以使用 127.0.0.1 的一個名稱(例如“test.domain.com”)和直接使用真實名稱(如果這有用的話)——忘記刪除條目從主機文件中讀取是引起混亂的好方法。取決於網站的運作方式。
若要轉送連接埠 80,您只需要成為桌面上的 root,「而不是」網頁伺服器。我強烈建議不要允許 root 進行 ssh 登入。
使用非特權連接埠可能工作,再次取決於您的網站:
ssh user@webserver -L 1080:127.0.0.1:80
並使用 URL http://127.0.0.1:1080/
。
-D
按照建議使用 SOCKS 代理 ( )可能導致一些意外,取決於 SOCKS/DNS/防火牆/NAT 配置。
(在 Linux 上,作為保留連接埠的 root 的替代方案,您可以使用 POSIX 功能,請參閱https://stackoverflow.com/questions/413807/is-there-a-way-for-non-root-processes-to-bind-to-privileged-ports-1024-on-l,但這不適用於 OpenSSH 的標準版本,因為它對連接埠號碼有額外的硬編碼檢查,除非使用NO_IPPORT_RESERVED_CONCEPT
定義進行編譯。連結問題的答案有各種其他解決方案。