SSH 反向隧道代理本地网络实现国内服务器网络通畅

2026-04-18

最近在折腾公司的服务器(国内环境),想 apt install 几个包或者拉个 GitHub 仓库,结果毫无意外地卡在半空中。

如果要在服务器上装一套 Mihomo 或者其他代理工具,不仅配置繁琐,而且对于一台可能只是临时需要外网环境的机器来说,实在太重了。我更喜欢服务器干干净净的,不留多余的后台进程和公网暴露风险。

分享一个我常用的偷懒技巧:利用 SSH 反向隧道(Reverse Tunnel),直接让服务器共享你本地电脑的科学网络。 用完即走,不留痕迹。

原理简述

简单来说,就是用 SSH 牵一根“无形的网线”。

在连接服务器时,带上 -R 参数,比如 ssh -R 10808:127.0.0.1:10808 root@ip。 这行命令的意思是:把服务器的回环地址 127.0.0.110808 端口,通过当前的 SSH 加密通道,映射到我本地电脑的 10808 端口(也就是我本地代理软件的混流端口)。

v2rayformac.png

这样一来,服务器在本地 10808 端口发出的请求,都会钻进 SSH 隧道,回到我的 Mac 上走代理发出去。

testcurlgoogle.png

配置懒人包

为了不用每次都敲那么长的命令,我们可以把这个过程封装成简单的快捷指令。

1. 本地电脑配置(以 Mac / zsh 为例)

打开本地终端的配置文件:

vim ~/.zshrc

在末尾塞入这个小函数:

# SSH 反向隧道:共享本地代理给服务器
proxyof() {
    if [ -z "$1" ]; then
        echo "用法: proxyof <服务器IP> [远程端口(默认10808)]"
        return 1
    fi
    
    local target_ip=$1
    local target_port=${2:-10808}
    local local_port=10808 # 你本地代理软件的端口

    echo "正在打通隧道: 本地 $local_port -> $target_ip:$target_port"
    echo "提示: 登录后在服务器端输入 'proxyon' 即可接通网络。"
    
    ssh -R ${target_port}:127.0.0.1:${local_port} root@${target_ip}
}

保存后执行 source ~/.zshrc 生效。

2. 服务器配置(以 Debian / bash 为例)

虽然隧道通了,但 Linux 默认不会主动走这个代理端口,我们还需要配置一下环境变量。

登录服务器,打开配置:

vim ~/.bashrc

加入两个别名,当做代理的开关:

# 代理环境变量开关
alias proxyon='export http_proxy=http://127.0.0.1:10808; export https_proxy=http://127.0.0.1:10808; echo "proxyon success (127.0.0.1:10808)"'
alias proxyoff='unset http_proxy https_proxy; echo "proxyofline"'

保存后执行 source ~/.bashrc 生效。

日常工作流

现在,不管服务器在哪,只要 SSH 能连上,需要外网时只需要两步:

在 Mac 敲:

proxyof 192.168.x.x

直接登录进服务器,隧道同时建立。

进去后敲:

proxyon

然后就可以丝滑地拉代码、跑 curl 脚本了。

爽点在哪? 完事之后,只需 exit 断开 SSH,这根虚拟网线就物理熔断了。服务器上没装任何乱七八糟的软件,安全组也不用放行这个端口(因为它只监听在 127.0.0.1)。绝对的安全、绝对的干净。

download.png