Oamc

SSH 隧道与端口转发 · 修改记录

这是 vpn/ssh-tunnel.md 的每次改动内容,按时间从新到旧。其他文章一起提交的部分不会出现在这里。

#1 2026-10-18 +69 −0 docs: 新增邮件系统、VPN 分类,网络设备补 BGP/QinQ/IRF/镜像 4 篇 60178fc
 new file mode 100644
 @@ -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` 更省事。