Cervol

Cervol

伺服器上使用本地代理實現科學上網——SSH 反向轉發

在伺服器上,修改 ~/.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 反向代理轉發的流量)發起的連接請求。

  1. 默認情況下代理只監聽本地回環接口:

    ・當 “允許局域網” 選項關閉時,Clash 或其他代理服務只監聽 127.0.0.1(即本地回環接口)。這意味著只有本地機器(通過 localhost 或 127.0.0.1)發起的連接可以被代理服務接收。
    ・在反向代理的場景中,遠程伺服器通過 SSH 隧道將流量轉發到本地代理端口,但這些請求並非直接從本地發起,而是通過局域網接口進行傳輸。因此,本地代理服務無法接受這些來自局域網或外部接口的請求,從而導致代理無法正常工作。

  2. 打開允許局域網後代理可以接受外部請求:

    ・打開 “Allow LAN” 後,Clash 會監聽 0.0.0.0,即所有網路接口,而不僅限於 127.0.0.1。這樣一來,本地代理服務就可以接受來自其他網路接口的連接請求,包括:
    ・局域網內其他設備的請求。
    ・通過 SSH 隧道從遠程伺服器轉發的請求(因為這些請求看起來就像是局域網內其他設備的請求)。

  3. 反向代理與局域網請求:

    ・當你使用 SSH 反向代理時,實際上是在遠程伺服器上打開了一個端口(如 8000),並將該端口的請求轉發到本地的代理端口(如 7890)。這類請求從遠程伺服器通過 SSH 隧道進入本地網路,因此對於本地代理來說,這些請求是 “外部請求” 或 “局域網請求”。
    ・如果 Clash 不監聽局域網(即沒有開啟 “Allow LAN”),它就無法接受這些通過隧道進入的流量,導致代理請求失敗。

因此,開啟 “Allow LAN” 是讓你的本地代理能夠處理從遠程伺服器轉發過來的流量的關鍵。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。