通过SSH反向隧道让远程服务器走本地代理

1. 场景描述

先说一下笔者遇到的情况:

  • 本地 Windows 电脑 已经配置好代理或者加速工具,能正常访问外网的Git仓库;
  • 通过复杂的代理链路,成功 SSH 登录了一台 远程 Linux 服务器(IP 如 10.250.4.84:2347);
  • 但当在服务器上执行 git pull 时,却卡住或超时——因为服务器本身无法直连外网;
  • 希望:让服务器“借用”本地的代理网络

这正是本文要解决的问题。

2. 核心思路

因为是通过代理来连接的服务器,所以想当然的认为服务器也可以访问本地机器。实际上本地机器处于 NAT 或防火墙之后,服务器无法主动连接本地机器(比如它 ping 不通本机地址 192.168.2.225)。因此解决方案就是:本地机器主动发起的 SSH 连接,建立一个“反向通道”。具体示意图如下:

服务器 (10.250.4.84) 
    ←─[SSH 隧道]─→ 
本地电脑 (192.168.2.225:7890)
    → 代理 → 外网 (Git仓库)

具体做法就是建立一个 SSH 反向隧道(Reverse Tunnel),在服务器上监听一个端口(如 1080),所有流量经由 SSH 隧道转发到你本地的代理端口。

3. 实操步骤

第一步:确认本地代理(例如http://192.168.2.225:7890)支持局域网访问。不同的代理客户端有不同的设置方法,另外最好临时关闭 Windows 防火墙,排除拦截问题。

第二步:用 PowerShell 建立反向隧道。在 PowerShell 中执行:

ssh -p 2347 -R 1080:192.168.2.225:7890 charlee@10.250.4.84

参数说明:

  • -p 2347:指定服务器的 SSH 端口(标准端口是22)。
  • -R 1080:192.168.2.225:7890:在服务器的 127.0.0.1:1080 建立监听,转发到你本地的代理;
  • 登录后,你会进入交互式 shell,可以像 MobaXterm 一样操作服务器。

💡 如果使用了非默认 SSH 密钥,加上 -i ~/.ssh/id_ed25519

第三步:在服务器上配置代理。在服务器终端执行:

# 设置环境变量(临时生效)
export http_proxy=http://127.0.0.1:1080
export https_proxy=http://127.0.0.1:1080

如果要配置 Git:

git config --global http.proxy http://127.0.0.1:1080
git pull  # 应该流畅运行

如果要验证隧道是否生效,可以在服务器上 ping 本机地址,成功建立反向隧道后,一般都会成功。

posted @ 2025-11-23 21:19  charlee44  阅读(3)  评论(0)    收藏  举报