随机推荐

Win11 SSH 隧道安全中转与 VPS 端口转发

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 隧道能提供加密连接和端口转发能力,但不能替代服务认证、防火墙和访问控制。