在服务器上,修改 ~/.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” 是让你的本地代理能够处理从远程服务器转发过来的流量的关键。