在伺服器上,修改 ~/.zshrc
(或~/.bashrc
),設定網路代理:
# set reverse forward port, connect to local proxy port
export http_proxy=http://127.0.0.1:<port_remote>
export https_proxy=http://127.0.0.1:<port_remote>
修改本地 SSH 配置文件~/.ssh/config
,在伺服器對應的 Host 欄目下添加一條:
RemoteForward localhost:<port_remote> localhost:<port_local>
將<port_remote>
替換為在伺服器上用戶希望代理使用的端口,<port_local>
替換為本地代理軟體使用的代理端口。它的含義是在建立 SSH 連接時同時建立遠程端口<port_remote>
到本地端口<port_local>
的轉發。
代理軟體需要 打開允許局域網 選項。
打開 “允許局域網”(Allow LAN)選項的原因在於,本地代理服務需要能夠接受來自局域網(包括通過 SSH 反向代理轉發的流量)發起的連接請求。
-
默認情況下代理只監聽本地回環接口:
・當 “允許局域網” 選項關閉時,Clash 或其他代理服務只監聽 127.0.0.1(即本地回環接口)。這意味著只有本地機器(通過 localhost 或 127.0.0.1)發起的連接可以被代理服務接收。
・在反向代理的場景中,遠程伺服器通過 SSH 隧道將流量轉發到本地代理端口,但這些請求並非直接從本地發起,而是通過局域網接口進行傳輸。因此,本地代理服務無法接受這些來自局域網或外部接口的請求,從而導致代理無法正常工作。 -
打開允許局域網後代理可以接受外部請求:
・打開 “Allow LAN” 後,Clash 會監聽 0.0.0.0,即所有網路接口,而不僅限於 127.0.0.1。這樣一來,本地代理服務就可以接受來自其他網路接口的連接請求,包括:
・局域網內其他設備的請求。
・通過 SSH 隧道從遠程伺服器轉發的請求(因為這些請求看起來就像是局域網內其他設備的請求)。 -
反向代理與局域網請求:
・當你使用 SSH 反向代理時,實際上是在遠程伺服器上打開了一個端口(如 8000),並將該端口的請求轉發到本地的代理端口(如 7890)。這類請求從遠程伺服器通過 SSH 隧道進入本地網路,因此對於本地代理來說,這些請求是 “外部請求” 或 “局域網請求”。
・如果 Clash 不監聽局域網(即沒有開啟 “Allow LAN”),它就無法接受這些通過隧道進入的流量,導致代理請求失敗。
因此,開啟 “Allow LAN” 是讓你的本地代理能夠處理從遠程伺服器轉發過來的流量的關鍵。