服务器上使用本地代理实现科学上网——SSH Reverse Forwarding
在服务器上,修改 ~/.zshrc (或~/.bashrc),设置网络代理:
Copy# set reverse forward port, connect to local proxy port
export http_proxy=http://127.0.0.1:
export https_proxy=http://127.0.0.1:
修改本地 SSH 配置文件~/.ssh/config,在服务器对应的 Host 栏目下添加一条:
CopyRemoteForward localhost:
将
代理软件需要 打开允许局域网 选项。
打开 “允许局域网”(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” 是让你的本地代理能够处理从远程服务器转发过来的流量的关键。