Cervol

Cervol

服务器上使用本地代理实现科学上网——SSH Reverse Forwarding

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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。