0aa8fe6
这次没有正文改动。
这是 vpn/SSH 隧道与端口转发.md 的改动记录。后台每次保存都会留一份快照,
这里显示的是快照之间的差异,不会混入其他文章的改动。
还没有后台修改记录。
下面是 Git 里的提交,可能包含其他文章的改动(因为一次提交会带上工作区所有变化)。
0aa8fe6
这次没有正文改动。
60178fc
@@ -0,0 +1,69 @@ +--- +tags: [SSH, 隧道, 端口转发] +order: 30 +--- + +# SSH 隧道与端口转发 + +## 场景 + +不想装 VPN,只想临时把某个内网端口映射出来,或者把自己本地的服务给外网调试。 + +## 前置条件 + +- 有一台能 SSH 的跳板机或公网服务器 +- 知道自己要访问的地址和端口 + +## 配置 + +### 本地转发(把远端的端口映射到本地) + +```bash +# 访问跳板机能到的 10.0.0.5:3306,映射到本机 13306 +ssh -N -L 13306:10.0.0.5:3306 user@jump.example.com +``` + +### 远程转发(把本地端口暴露到远端) + +```bash +# 让别人访问公网服务器的 8080,实际转发到你本机 3000 +ssh -N -R 8080:127.0.0.1:3000 user@public.example.com +``` + +远程转发要服务端 `GatewayPorts yes` 才能监听 0.0.0.0。 + +### 动态转发(SOCKS5 代理) + +```bash +ssh -N -D 1080 user@jump.example.com +# 浏览器/客户端把代理设成 socks5://127.0.0.1:1080 +``` + +### 保持连接 + +```bash +ssh -o ServerAliveInterval=30 -o ExitOnForwardFailure=yes -N -L 13306:10.0.0.5:3306 user@jump +# 或者用 autossh +autossh -M 0 -N -L 13306:10.0.0.5:3306 user@jump +``` + +## 验证 + +```bash +ss -lntp | grep 13306 +nc -zv 127.0.0.1 13306 +curl -x socks5://127.0.0.1:1080 https://ifconfig.me +``` + +## 回滚 + +关掉 ssh 进程即可,隧道不改变任何配置。 + +## 坑 + +- **`-N` 不加会占一个交互 shell**,脚本里记得加。 +- 远程转发默认只监听 127.0.0.1,要改 `GatewayPorts`。 +- 隧道断开后本地端口还显示监听(残留),要 `ExitOnForwardFailure`。 +- 只做转发不做认证,暴露出去等于开了一个后门。 +- 多个 `-L` 参数可以叠加,写在同一行。 +- 复制文件走隧道用 `scp -o ProxyJump=jump` 更省事。