背景
办公电脑在校园网后面,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
两个执一互访,就像在同一台机器上。
踩坑
- 仪表盘别暴露公网 — 绑
127.0.0.1,想看 SSH 进去curl localhost:7500 - WSL 要加
autoReconnect— 校园网不稳定,断线不重连第二天就失联 - GitHub 被墙 — 用 Gitee 镜像 clone + 国内 Go 代理编译