反向 SSH + SOCKS5 内网穿透终极配置教程
技术背景
用最生活化的比喻,把这套系统想象成你在拉一根超长的网线:
1. 反向 SSH = “一根私有网线”
- 作用:你在家里的路由器(OpenWrt)和公网服务器(阿里云)之间,硬牵了一根“虚拟网线”。
- 特点:这根线是从家里主动抛出去的,所以无视宽带没有公网 IP 的问题。
2. SOCKS5 = “万能转换插头”
- 作用:光有网线不行,你的浏览器、远程桌面、游戏不懂怎么直接用这根线。
- 关系:SOCKS5 就是把这根网线的头,变成了一个标准的、通用的接口(即本地的 1080 端口)。谁插上谁就能通回家里。
3. Proxifier = “强行插入”
- 作用:有些软件(如远程桌面)很笨,不知道这儿有个插头。
- 关系:Proxifier 负责把这些软件强行按在 SOCKS5 这个插头上,逼它们走这根线回家。
一句话总结:
你用 反向 SSH 铺了一条回家的路,用 SOCKS5 规定了路上能跑什么车,用 Proxifier 把你电脑上的数据装上车,运回家。
正式开始
目标:
在外网通过 Proxifier 自动分流,实现直接访问家里 OpenWrt 下的所有设备(如 192.168.66.x 网段),支持浏览器、远程桌面 (RDP)、Ping 等所有协议。
环境信息:
- 公网 VPS: 47.94.xxx.xx (阿里云 Ubuntu)
- 内网 OpenWrt: 192.168.66.1
- 隧道跳板端口: 20022 (公网 VPS 上用于转发的端口)
- 本地 SOCKS 端口: 1080 (本地电脑上开启的入口)
第一阶段:服务端与路由端准备 (基础建设)
在开始本地电脑配置前,必须确保“路”是通的。
这一部分请参考上一个教程:反向SSH配置教程-内网穿透&防火墙克星
下面只对关键修改部分进行说明
1. 阿里云 VPS:开放安全组端口
你需要允许外部流量访问 20022 端口,否则反向 SSH 无法建立或无法连接。 (或者与上个教程一样,开发所有端口)
- 端口范围: 20022/20022
- 授权对象: 0.0.0.0/0 (允许所有 IP)
- 协议: TCP
2. 补充Autossh开机自启 (OpenWrt)
为了保证 OpenWrt 的22端口重启后隧道自动恢复,我们将命令加入启动脚本。
在 OpenWrt 上编辑 /etc/rc.local:
vi /etc/rc.local
在对应位置插入以下内容开放端口:
-R 20022:localhost:22 \\

保存退出(在 vi 中按 Esc,输入 :wq 回车)。
手动测试运行一次(或者直接重启路由器测试):
执行 /etc/rc.local 看有没有报错。需要先赋予权限。
chmod +x /etc/rc.local
先执行多次 killall autossh,直到提示 no process found:
killall autossh
killall autossh
然后再执行:
/etc/rc.local
3. OpenWrt:开启 TCP 转发权限
默认情况下 OpenWrt 允许 SSH 登录,但禁止转发流量(会导致 method SSH_SOCKS5_NOAUTH not found 错误)。
SSH 登录 OpenWrt。
编辑配置:vi /etc/config/dropbear
确保包含以下两行(改为 ‘on’):
option AllowTcpForwarding 'on'
option GatewayPorts 'on'
同时把option Interface 'lan'注释,不启用:
# option Interface 'lan'

重启服务:/etc/init.d/dropbear restart
确保 Autossh 已经在后台运行(指向 VPS 的 20022 端口)。
第二阶段:本地电脑建立 SOCKS5 隧道 (造桥)
这一步是在你的笔记本/办公电脑上操作,目的是打通 本地 1080 <-> 家里 OpenWrt 的通道。
方式 A:Mac 终端 / Windows CMD 命令行 (推荐mac用)
请在终端输入以下命令:
# 语法:ssh -p [VPS跳板端口] -D [本地代理端口] root@[VPS公网IP]
# 建议加 -v 查看调试日志,确认连接建立
ssh -v -p 20022 -D 1080 root@47.94.xxx.xx
或者无日志输出命令(二选一):
ssh -p 20022 -D 1080 root@47.94.xxx.xx`
- 输入 OpenWrt 的密码。
- 成功标志:看到 OpenWrt 的欢迎界面,或者日志停止滚动且无报错。
- 注意:不要关闭这个黑色窗口,最小化即可。
方式 B:Bitvise SSH Client (Windows 推荐,更稳定)
命令行窗口容易关掉,Windows 建议用 Bitvise 软件。
- Host: 47.94.xxx.xx, Port: 20022
- Username: root, Password: [OpenWrt密码]
- 找到 SOCKS/HTTP Proxy Forwarding。
- 勾选 Enabled。
- Listen Interface: 127.0.0.1
- Listen Port: 1080
第三阶段:配置 Proxifier (分流与接管)
这一步是配置“交警”,指挥流量走隧道。
1. 设置代理服务器 (Proxy Server)
告诉 Proxifier 隧道入口在哪。
- Address: 127.0.0.1
- Port: 1080
- Protocol: 勾选 SOCKS Version 5
- Authentication (认证):必须 取消勾选 (Uncheck)!
- 原因:SSH 的 -D 模式不支持 SOCKS 认证,勾选会导致“method not found”报错。
- 提示“是否设为默认”? -> 选 NO (否)。
2. 设置防死循环规则 (安全保障)
防止 Proxifier 把 SSH 隧道本身的流量也塞进隧道,导致“贪吃蛇咬尾巴”连接断开。
- Name: VPS Direct
- Target hosts: 47.94.xxx.xx (你的 VPS IP)
- Action: Direct (直连)
3. 设置内网分流规则 (核心业务)
告诉 Proxifier 只有去家里的流量才走代理。
- Name: SSH-R
- Target hosts: 192.168.66.* (使用通配符匹配全网段)
- Action: 选择刚才添加的 Proxy SOCKS5 127.0.0.1

第四阶段:实战验证
保持 SSH 终端开启(或 Bitvise 连接中),保持 Proxifier 开启。
- 浏览器访问 http://192.168.66.1。
- 结果:应该秒开 OpenWrt 后台。
- Windows 远程桌面连接 192.168.66.x。
- 结果:应该能弹出密码输入框。
常见故障自查
- 报错 Proxy closed the connection unexpectedly:
- 检查 Proxifier 规则顺序,确认 VPS IP 是 Direct。
- 检查 SSH 命令是否加了 -p 20022(没加就是连到 VPS 系统里去了,而不是 OpenWrt)。
- 报错 method SSH_SOCKS5_NOAUTH not found:
- 检查 Proxifier -> Proxy Server -> Authentication 是否已取消勾选。
- 检查 OpenWrt 的 /etc/config/dropbear 里是否开启了 AllowTcpForwarding。




