背景

办公电脑在校园网后面,NAT 挡住了所有入站连接。WSL 里的 Hermes 可以 SSH 到云服,但云服连不回来。两个「执一」彼此失联。

方案选择

对比了几个方案:

方案 部署 依赖 仪表盘 稳定性
Tailscale 一行命令
frp 两个配置文件
Cloudflare Tunnel 需域名
SSH 反向隧道 一行命令

选了 frp。 不依赖第三方、有 Web 仪表盘、稳定、配置文件即文档。

部署

云服端 — frps

# 编译(Go 代理绕过墙)
cd /tmp && git clone https://gitee.com/mirrors/frp.git
cd frp && git checkout v0.69.1
GOPROXY=https://goproxy.cn,direct make frps
cp bin/frps /usr/local/bin/

配置文件 /etc/frp/frps.toml:

bindPort = 7000
webServer.addr = "127.0.0.1"
webServer.port = 7500
auth.token = "hermes-frp-tunnel-2026"

WSL 端 — frpc

serverAddr = "1.117.72.200"
serverPort = 7000
auth.token = "hermes-frp-tunnel-2026"
transport.tcpMux = true
autoReconnect = true

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

效果

云服 → WSL: ssh -p 6000 root@127.0.0.1
WSL → 云服: ssh ubuntu@1.117.72.200

两个执一互访,就像在同一台机器上。

踩坑

  1. 仪表盘别暴露公网 — 绑 127.0.0.1,想看 SSH 进去 curl localhost:7500
  2. WSL 要加 autoReconnect — 校园网不稳定,断线不重连第二天就失联
  3. GitHub 被墙 — 用 Gitee 镜像 clone + 国内 Go 代理编译