Win11 SSH隧道安全中转
本文场景:
Win11 本机→ SSH 加密隧道→ 中转 VPS→ mixed 端口 16195→ 访问互联网
最终浏览器通过 ZeroOmega 使用本机代理:
HTTP 127.0.0.1:1080
这样做的好处是:浏览器不直接连接公网 HTTP/SOCKS5 代理,而是先通过 SSH 加密隧道连接中转 VPS,再由中转 VPS 转发到后端 mixed 代理端口。
一、整体结构
原始 mixed 代理端口:
中转VPS公网IP:16195
Win11 本机通过 SSH 映射成本地端口:
127.0.0.1:1080
最终链路:
Chrome / ZeroOmega→ 127.0.0.1:1080→ SSH 加密隧道→ 中转 VPS→ 中转VPS公网IP:16195→ 后端代理→ 目标网站
二、准备条件
需要准备:
1. Win11 电脑2. 中转 VPS SSH 登录权限3. SSH 端口,例如 100664. SSH 用户名,例如 root5. SSH 私钥,例如 vps_ed255196. mixed 代理端口,例如 161957. mixed 代理用户名和密码8. Chrome + ZeroOmega 插件
三、Win11 生成 SSH 密钥
打开 PowerShell,先创建 .ssh 目录:
mkdir "$env:USERPROFILE.ssh"
生成 ed25519 密钥:
ssh-keygen -t ed25519 -f "$env:USERPROFILE.sshvps_ed25519" -C "win11-vps"
生成后会有两个文件:
C:UsersAdministrator.sshvps_ed25519C:UsersAdministrator.sshvps_ed25519.pub
说明:
vps_ed25519 是私钥,自己保管vps_ed25519.pub 是公钥,上传到 VPS
四、上传公钥到 VPS
公钥需要追加到 VPS 登录用户的:
~/.ssh/authorized_keys
如果 SSH 用户是 root,实际路径是:
/root/.ssh/authorized_keys
在 Win11 PowerShell 执行:
type "$env:USERPROFILE.sshvps_ed25519.pub" | ssh -p 10066 root@中转VPS公网IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
注意:这里上传的是 .pub 公钥,不是私钥。
五、测试 SSH 密钥登录
执行:
ssh -p 10066 -i "$env:USERPROFILE.sshvps_ed25519" root@中转VPS公网IP
如果能登录 VPS,说明密钥配置成功。
登录后输入:
exit
退出。
六、建立 SSH 本地端口转发
因为中转 VPS 上访问:
127.0.0.1:16195
不通,但外部访问:
中转VPS公网IP:16195
是通的,所以 SSH 转发命令写成:
ssh -p 10066 -i "$env:USERPROFILE.sshvps_ed25519" -N -L 127.0.0.1:1080:中转VPS公网IP:16195 root@中转VPS公网IP
示例:
ssh -p 10066 -i "$env:USERPROFILE.sshvps_ed25519" -N -L 127.0.0.1:1080:1.2.3.4:16195 root@1.2.3.4
说明:
-p 10066指定 SSH 端口-i "$env:USERPROFILE.sshvps_ed25519"指定 SSH 私钥-N只建立隧道,不打开远程 shell-L 127.0.0.1:1080:中转VPS公网IP:16195把本机 127.0.0.1:1080 转发到中转 VPS 的 16195 代理端口
命令运行后没有输出是正常的。这个 PowerShell 窗口不要关闭,关闭后代理就断开。
七、测试本地代理是否成功
另开一个 PowerShell。
如果 mixed 代理支持 SOCKS5,可以测试:
curl.exe --socks5-hostname 用户名:密码@127.0.0.1:1080 https://ipinfo.io/ip
如果返回一个 IP,说明 SOCKS5 通了。
如果 mixed 代理支持 HTTP,也可以测试:
curl.exe -x http://用户名:密码@127.0.0.1:1080 https://ipinfo.io/ip
如果也返回一个 IP,说明 HTTP proxy 也通了。
实际测试中,如果 HTTP 能通,ZeroOmega 推荐使用 HTTP,因为 Chrome / ZeroOmega 对 HTTP 代理认证兼容性更好。
八、ZeroOmega 设置
打开 ZeroOmega:
Options → New Profile → Proxy Profile
配置如下:
Protocol: HTTPServer: 127.0.0.1Port: 1080Username: mixed 代理用户名Password: mixed 代理密码
注意:
Server 不要填中转 VPS IPServer 不要填 http://127.0.0.1Port 填 1080Protocol 选 HTTP用户名密码填 mixed 代理的用户名密码,不是 SSH 的用户名密码
保存后点击:
Apply changes
然后在浏览器右上角 ZeroOmega 图标里选择这个代理配置。
打开:
https://ipinfo.io
如果显示代理出口 IP,说明成功。
九、为什么 ZeroOmega 用 HTTP,不用 SOCKS5
虽然 curl 测试 SOCKS5 能通:
curl.exe --socks5-hostname 用户名:密码@127.0.0.1:1080 https://ipinfo.io/ip
但 ZeroOmega 使用 SOCKS5 可能不通。常见原因是:
Chrome / ZeroOmega 对带用户名密码认证的 SOCKS5 支持不稳定
而 HTTP proxy 认证在浏览器里兼容性更好。
因此推荐 ZeroOmega 使用:
HTTP 127.0.0.1:1080
不是:
SOCKS5 127.0.0.1:1080
十、安全性说明
这种方式比直接连接公网 HTTP/SOCKS5 代理更安全。
直接连接公网代理:
浏览器 → 中转VPS公网IP:16195
HTTP/SOCKS5 代理认证和目标连接信息可能在网络链路中暴露。
现在使用 SSH 隧道:
浏览器 → 127.0.0.1:1080 → SSH 加密隧道 → 中转VPS:16195
本机到中转 VPS 之间由 SSH 加密保护。
本地网络、运营商、公共 Wi-Fi 一般只能看到:
你连接了中转 VPS 的 SSH 端口连接时间流量大小
通常看不到:
代理用户名密码HTTP proxy 请求SOCKS5 握手你通过代理访问的目标网站
但要注意:
中转 VPS 或后端代理服务器仍然可能看到出口连接的目标 IP / 域名和流量特征访问 HTTPS 网站时,网页正文通常仍然由 HTTPS 保护访问 HTTP 网站时,内容可能被代理端看到
十一、写成 .bat 一键启动
在桌面新建文件:
start-proxy.bat
内容如下:
@echo offtitle SSH Proxy Tunnelecho Starting SSH tunnel...echo Local proxy: 127.0.0.1:1080echo Remote proxy: 中转VPS公网IP:16195echo.ssh -p 10066 ^ -i "%USERPROFILE%.sshvps_ed25519" ^ -o ServerAliveInterval=30 ^ -o ServerAliveCountMax=3 ^ -N ^ -L 127.0.0.1:1080:中转VPS公网IP:16195 ^ root@中转VPS公网IPecho.echo SSH tunnel closed.pause
示例:
@echo offtitle SSH Proxy Tunnelecho Starting SSH tunnel...echo Local proxy: 127.0.0.1:1080echo Remote proxy: 1.2.3.4:16195echo.ssh -p 10066 ^ -i "%USERPROFILE%.sshvps_ed25519" ^ -o ServerAliveInterval=30 ^ -o ServerAliveCountMax=3 ^ -N ^ -L 127.0.0.1:1080:1.2.3.4:16195 ^ root@1.2.3.4echo.echo SSH tunnel closed.pause
以后双击 start-proxy.bat 即可启动 SSH 隧道。
窗口保持打开,代理就有效。关闭窗口,代理断开。
十二、iPhone / 小火箭说明
iPhone 上也可以直接在小火箭里添加 mixed 代理:
Type: HTTPServer: 中转VPS公网IPPort: 16195User: mixed 用户名Password: mixed 密码
但这种方式是手机直接连接公网 HTTP proxy:
iPhone → 中转VPS公网IP:16195
安全性不如 Win11 的 SSH 隧道方式。
iOS 一般不能同时开启两个 VPN,所以不建议设计成:
WireGuard / Tailscale + 小火箭 同时使用
iPhone 更推荐:
1. 小火箭直接使用 VLESS Reality / Trojan TLS / Shadowsocks 等加密节点2. 或者使用 Tailscale / WireGuard Exit Node 替代小火箭3. 不建议长期裸连公网 HTTP/SOCKS5 mixed 代理
十三、最终推荐配置
Win11 端:
SSH 隧道:本机 127.0.0.1:1080 → 中转VPS公网IP:16195ZeroOmega:Protocol: HTTPServer: 127.0.0.1Port: 1080Username: mixed 用户名Password: mixed 密码
启动命令:
ssh -p 10066 -i "$env:USERPROFILE.sshvps_ed25519" -N -L 127.0.0.1:1080:中转VPS公网IP:16195 root@中转VPS公网IP
日常使用流程:
1. 双击 start-proxy.bat2. 保持窗口不要关闭3. Chrome 选择 ZeroOmega 的 HTTP 代理配置4. 打开 https://ipinfo.io 测试出口 IP
这种方案适合 Win11 浏览器使用,兼顾简单性和安全性。
Win11 使用 SSH 隧道连接 VPS:端口转发、反向隧道与安全注意事项
Windows 11 自带 OpenSSH 客户端,因此可以直接通过 SSH 连接 VPS。除了远程登录服务器,SSH 还可以用来做 TCP 端口转发,把本机服务、VPS 服务,或者内网中的某个服务通过一条 SSH 加密连接打通。
本文主要讨论两个常用场景:
-L:本地端口转发,Win11 访问 VPS 侧服务-R:远程端口转发,VPS 或公网访问 Win11 侧服务
这两种方式都不需要额外安装 frp、ngrok 等工具,适合少量端口、个人运维、远程调试、临时发布内部服务等场景。
1. 基本概念
SSH 隧道的核心作用是:通过已有的 SSH 连接,把某个 TCP 端口安全地转发到另一端。
常见命令格式:
ssh user@server
其中:
user = VPS 上的 SSH 用户名server = VPS 的公网 IP 或域名
例如:
ssh root@1.2.3.4ssh ubuntu@vps.example.com
如果 VPS 的 SSH 端口不是默认的 22,可以使用 -p 指定:
ssh -p 2222 ubuntu@1.2.3.4
SSH 端口转发常用参数:
-L:本地端口转发-R:远程端口转发-N:只建立连接和转发,不打开远程 shell
2. 密码登录与密钥登录
如果 VPS 允许密码登录,可以直接执行:
ssh user@VPS公网IP
然后输入 VPS 上对应用户的密码。
更推荐使用密钥登录。Win11 PowerShell 中生成密钥:
ssh-keygen -t ed25519 -C "your_email@example.com"
默认生成:
C:Users你的用户名.sshid_ed25519C:Users你的用户名.sshid_ed25519.pub
其中:
id_ed25519 私钥,保存在 Win11 本机,不要泄露id_ed25519.pub 公钥,放到 VPS 上
把公钥添加到 VPS:
type $env:USERPROFILE.sshid_ed25519.pub | ssh user@VPS公网IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
以后再连接 VPS 时,就可以使用密钥认证。
3. 本地端口转发:ssh -L
本地端口转发用于:
Win11 访问 VPS 侧可访问的服务
命令格式:
ssh -N -L 本地监听地址:本地端口:目标地址:目标端口 user@VPS公网IP
其中:
本地监听地址:本地端口= Win11 上打开的入口目标地址:目标端口= VPS 那一侧能够访问到的服务
例如,VPS 上有一个 Web 服务,只监听本机:
VPS: 127.0.0.1:8080
外部不能直接访问 VPS公网IP:8080,但可以通过 SSH 隧道访问:
ssh -N -L 127.0.0.1:18080:127.0.0.1:8080 user@VPS公网IP
然后在 Win11 浏览器中打开:
http://127.0.0.1:18080
实际访问的是 VPS 上的:
127.0.0.1:8080
数据路径:
Win11→ 127.0.0.1:18080→ SSH 加密连接→ VPS→ 127.0.0.1:8080
常见用途:
访问 VPS 上未开放公网的 Web 管理页面访问 VPS 本机数据库访问 VPS 内网中的某个服务远程调试只监听 127.0.0.1 的程序
4. 示例:Win11 访问 VPS 上的数据库
假设 VPS 上的 MySQL 只监听:
127.0.0.1:3306
Win11 可以执行:
ssh -N -L 127.0.0.1:3307:127.0.0.1:3306 user@VPS公网IP
然后 Win11 上连接:
127.0.0.1:3307
实际访问的是 VPS 上的:
127.0.0.1:3306
这样数据库端口不需要暴露到公网,只有建立 SSH 连接后才能访问。
5. 示例:Win11 访问 VPS 内网服务
如果 VPS 能访问某个内网地址:
10.0.0.25:80
Win11 可以这样转发:
ssh -N -L 127.0.0.1:18080:10.0.0.25:80 user@VPS公网IP
然后 Win11 打开:
http://127.0.0.1:18080
实际访问:
http://10.0.0.25:80
这里的关键是:目标地址:目标端口 必须是 VPS 那一侧能访问到的地址。
6. 远程端口转发:ssh -R
远程端口转发用于:
VPS 访问 Win11 侧的服务
也可以理解为:Win11 主动连接 VPS,然后在 VPS 上打开一个端口,访问这个端口的流量会通过 SSH 连接回到 Win11。
命令格式:
ssh -N -R VPS监听地址:VPS端口:Win11侧目标地址:Win11侧目标端口 user@VPS公网IP
例如 Win11 本机有一个服务:
Win11: 127.0.0.1:3000
想让 VPS 访问这个服务,可以执行:
ssh -N -R 127.0.0.1:9000:127.0.0.1:3000 user@VPS公网IP
然后在 VPS 上访问:
curl http://127.0.0.1:9000
实际访问的是 Win11 上的:
127.0.0.1:3000
数据路径:
VPS→ 127.0.0.1:9000→ SSH 加密连接→ Win11→ 127.0.0.1:3000
这种方式适合 Win11 在 NAT、路由器、公司网络后面,没有公网 IP,但又需要让 VPS 访问 Win11 上某个服务的情况。
7. 让公网访问 Win11 上的服务
如果只写:
ssh -N -R 127.0.0.1:9000:127.0.0.1:3000 user@VPS公网IP
那么 VPS 上的 9000 端口只监听在 127.0.0.1,只有 VPS 本机能访问。
如果想让公网访问:
http://VPS公网IP:9000
需要让 VPS 的转发端口监听公网地址:
ssh -N -R 0.0.0.0:9000:127.0.0.1:3000 user@VPS公网IP
但是仅写这个命令通常还不够。VPS 的 SSH 服务端需要允许远程端口绑定公网地址。
编辑 VPS 的 SSH 服务端配置:
sudo nano /etc/ssh/sshd_config
确认或添加:
AllowTcpForwarding yesGatewayPorts clientspecified
检查配置是否正确:
sudo sshd -t
没有输出通常表示配置语法正常。
重启 SSH 服务:
sudo systemctl restart sshd
部分系统服务名是 ssh:
sudo systemctl restart ssh
然后 Win11 重新建立连接:
ssh -N -R 0.0.0.0:9000:127.0.0.1:3000 user@VPS公网IP
在 VPS 上检查监听情况:
ss -lntp | grep 9000
如果看到:
0.0.0.0:9000
说明已经监听公网 IPv4。
如果看到:
127.0.0.1:9000
说明仍然只允许 VPS 本机访问,通常是以下原因之一:
GatewayPorts 没有配置SSH 服务没有重启命令中没有写 0.0.0.0:9000配置文件改错位置VPS 使用了另一个 sshd 配置文件
8. GatewayPorts 的作用
AllowTcpForwarding yes 通常默认已经开启。
但 GatewayPorts 如果没有写,默认通常等同于:
GatewayPorts no
这表示:ssh -R 可以建立,但 VPS 上打开的端口只绑定在本机地址,公网不能直接访问。
常见配置含义:
GatewayPorts no远程转发端口只监听 VPS 本机 localhost。GatewayPorts yes允许远程转发端口绑定公网地址,控制较粗。GatewayPorts clientspecified允许客户端在 ssh -R 命令中自己指定监听地址。
推荐使用:
GatewayPorts clientspecified
这样可以自己决定:
-R 127.0.0.1:9000:127.0.0.1:3000
还是:
-R 0.0.0.0:9000:127.0.0.1:3000
前者只允许 VPS 本机访问,后者允许公网访问。
9. 转发 Win11 所在内网中的其他设备
ssh -R 不只能转发 Win11 本机服务,也可以转发 Win11 所在内网里的其他设备。
假设 Win11 能访问内网设备:
192.168.1.50:80
可以这样执行:
ssh -N -R 0.0.0.0:9000:192.168.1.50:80 user@VPS公网IP
访问路径:
外部用户→ VPS公网IP:9000→ SSH 加密连接→ Win11→ 192.168.1.50:80
此时 Win11 相当于连接了 VPS 和本地内网。
需要注意:这种方式会把内网设备通过 VPS 暴露出去,必须谨慎控制访问权限。
10. VPS 防火墙和云厂商安全组
即使 SSH 隧道已经建立,如果公网仍然访问不到 VPS 端口,还需要检查:
VPS 系统防火墙云厂商安全组VPS 服务商控制台防火墙
如果使用 ufw:
sudo ufw allow 9000/tcpsudo ufw status
如果只允许某个固定 IP 访问:
sudo ufw allow from 你的公网IP to any port 9000 proto tcp
如果使用 firewalld:
sudo firewall-cmd --permanent --add-port=9000/tcpsudo firewall-cmd --reload
检查 VPS 端口是否监听:
ss -lntp | grep 9000
检查本机能否访问:
curl http://127.0.0.1:9000
Win11 上可以测试端口连通性:
Test-NetConnection VPS公网IP -Port 9000
11. 保持 SSH 隧道稳定
建议加上保活和失败退出参数:
ssh -N ` -o ServerAliveInterval=30 ` -o ServerAliveCountMax=3 ` -o ExitOnForwardFailure=yes ` -R 127.0.0.1:9000:127.0.0.1:3000 ` user@VPS公网IP
参数含义:
ServerAliveInterval=30每 30 秒发送一次保活包。ServerAliveCountMax=3连续 3 次无响应后断开连接。ExitOnForwardFailure=yes如果端口转发失败,SSH 直接退出,避免出现连接存在但端口没转发成功的情况。
如果需要长期运行,可以结合 Windows 任务计划程序,在开机或登录时自动执行 PowerShell 脚本。
12. 使用 SSH config 简化命令
可以编辑 Win11 上的 SSH 配置文件:
C:Users你的用户名.sshconfig
例如:
Host myvps HostName 1.2.3.4 User ubuntu Port 22 IdentityFile C:Users你的用户名.sshid_ed25519 ServerAliveInterval 30 ServerAliveCountMax 3 ExitOnForwardFailure yes
以后可以直接:
ssh myvps
本地转发:
ssh -N -L 127.0.0.1:18080:127.0.0.1:8080 myvps
远程转发:
ssh -N -R 127.0.0.1:9000:127.0.0.1:3000 myvps
也可以把端口转发写进配置文件:
Host web-tunnel HostName 1.2.3.4 User ubuntu Port 22 IdentityFile C:Users你的用户名.sshid_ed25519 LocalForward 127.0.0.1:18080 127.0.0.1:8080 ServerAliveInterval 30 ServerAliveCountMax 3 ExitOnForwardFailure yes
启动:
ssh -N web-tunnel
13. SSH 隧道与 frp 的区别
SSH 隧道适合:
少量端口临时调试个人使用访问 VPS 上未开放公网的服务让 VPS 访问 Win11 上的某个服务不想额外安装程序希望使用系统自带 OpenSSH
frp 更适合:
长期运行多个服务统一管理多客户端接入HTTP/HTTPS 域名转发UDP 转发复杂内网穿透开机自启和断线重连
简单判断:
Win11 访问 VPS 侧服务:用 ssh -LVPS 访问 Win11 侧服务:用 ssh -R长期管理多个内网服务:frp 更方便
如果只是少量 TCP 端口,SSH 隧道已经足够。它的优势是简单、内置、加密、配置量少。
14. 安全注意事项
端口转发解决的是“能不能连通”的问题,不等于服务本身安全。
尤其是以下写法:
ssh -N -R 0.0.0.0:9000:127.0.0.1:3000 user@VPS公网IP
这表示 VPS 的公网 9000 端口会转发到 Win11 的 3000 端口。如果 VPS 防火墙和安全组也放行了该端口,那么公网用户就可能访问到 Win11 上的服务。
不要随意暴露:
RDP数据库RedisNAS 管理后台路由器后台设备控制端口没有认证的 Web 管理页面
建议:
优先绑定 127.0.0.1只有确实需要公网访问时才绑定 0.0.0.0使用 VPS 防火墙限制来源 IP服务本身启用认证敏感服务不要直接暴露公网定期检查 VPS 上的监听端口
检查 VPS 正在监听的 TCP 端口:
ss -lntp
15. 常用命令汇总
Win11 访问 VPS 上的本地服务:
ssh -N -L 127.0.0.1:18080:127.0.0.1:8080 user@VPS公网IP
Win11 访问 VPS 内网服务:
ssh -N -L 127.0.0.1:18080:10.0.0.25:80 user@VPS公网IP
VPS 访问 Win11 本机服务:
ssh -N -R 127.0.0.1:9000:127.0.0.1:3000 user@VPS公网IP
公网访问 Win11 本机服务:
ssh -N -R 0.0.0.0:9000:127.0.0.1:3000 user@VPS公网IP
VPS SSH 服务端配置:
AllowTcpForwarding yesGatewayPorts clientspecified
检查 VPS 监听端口:
ss -lntp | grep 9000
Win11 测试端口:
Test-NetConnection VPS公网IP -Port 9000
16. 总结
Win11 使用 SSH 连接 VPS 后,可以直接利用 SSH 隧道完成 TCP 端口转发。
核心记住两条:
-L:Win11 本机开端口,用来访问 VPS 侧服务。-R:VPS 上开端口,用来访问 Win11 侧服务。
如果只是自己访问 VPS 上的内部服务,用 ssh -L。
如果要让 VPS 访问 Win11 本机或 Win11 内网中的服务,用 ssh -R。
如果要让公网访问 Win11 侧服务,需要额外配置:
GatewayPorts clientspecified
并在命令中指定:
-R 0.0.0.0:端口:目标地址:目标端口
但公网开放端口要谨慎。SSH 隧道能提供加密连接和端口转发能力,但不能替代服务认证、防火墙和访问控制。