Skip to content

Windows 浏览器访问不可达网段:SSH SOCKS5 与 SwitchyOmega 配置 ​

一个常见的环境限制:本机(Windows)无法直接访问目标 IP,但能连上一台跳板机,跳板机可以访问目标。如果需求只是浏览器访问目标上的 Web 服务,不必给系统装全局代理客户端——用 SSH 自带的 SOCKS5 动态转发,配合浏览器插件的分流规则和 NSSM 服务化,可以做到"浏览器里直接输入目标原始地址,只有目标网段走代理,其余流量不受影响",并支持开机自启与断线自动重连。本文给出完整配置步骤与几种替代方案的对比。

方案构成 ​

三个组件各司其职:SSH -D 在本机开 SOCKS5 端口;SwitchyOmega 决定哪些地址进这个端口;NSSM 把 SSH 进程注册成 Windows 服务,负责开机自启与崩溃重启。

第一步:建立 SSH SOCKS5 隧道 ​

powershell
ssh -D 1080 user@跳板机IP -N
  • -D 1080:在本机 1080 端口开启 SOCKS5 动态转发;
  • -N:不执行远程命令,只维持转发;
  • 跳板机需允许 SSH 密钥登录(服务化后无人交互,密码登录不可行)。

验证隧道是否工作:

powershell
curl.exe --socks5 127.0.0.1:1080 http://目标IP/

能返回目标服务的响应即隧道可用。

第二步:SwitchyOmega 分流 ​

在 Chrome 应用商店安装 SwitchyOmega,配置两层:

  1. 新建代理服务器情景模式:协议 SOCKS5,服务器 127.0.0.1,端口 1080;
  2. 新建自动切换情景模式:
    • 规则列表添加一条:条件类型选 IP 通配符,IP 填目标网段(示例 10.0.*,按实际填写),情景模式选上面的 SOCKS5 代理;
    • 默认情景模式选直接连接。

最后把插件切换到自动切换模式。效果:访问目标网段时自动走 SSH 隧道,其余网站保持直连,浏览器地址栏始终使用目标的原始 IP,无需改成 localhost:某端口。

第三步:NSSM 注册开机自启服务 ​

命令行 SSH 会话随终端关闭而断开,用 NSSM(Non-Sucking Service Manager)把它注册为 Windows 服务。以下命令均在管理员 PowerShell下执行。

先确认 SSH 的完整路径:

powershell
where.exe ssh
# 通常为 C:\Windows\System32\OpenSSH\ssh.exe

注册服务:

powershell
nssm install ssh-proxy

GUI 中填写:

字段 值
Path C:\Windows\System32\OpenSSH\ssh.exe
Arguments -D 1080 -N user@跳板机IP
Startup directory C:\Windows\System32

I/O 标签页把 stdout/stderr 指到日志文件(如 C:\ssh-proxy.log),便于排查。然后设置自启并启动:

powershell
nssm set ssh-proxy Start SERVICE_AUTO_START
nssm start ssh-proxy

密钥路径是这里最常见的坑:Windows 服务默认以 SYSTEM 账户运行,它读取的是 C:\Windows\System32\config\systemprofile\.ssh,而不是你用户目录下的密钥。两种解法任选其一:

powershell
# 解法一:让服务以你的账户运行
nssm set ssh-proxy ObjectName .\你的用户名 你的密码
nssm restart ssh-proxy

# 解法二:把密钥复制给 SYSTEM 账户
Copy-Item -Recurse C:\Users\你的用户名\.ssh C:\Windows\System32\config\systemprofile\.ssh

服务运行后,SSH 断线时 NSSM 会按退出码自动重启进程,起到断线重连的效果。日常管理:

powershell
nssm start ssh-proxy      # 启动
nssm stop ssh-proxy       # 停止
nssm restart ssh-proxy    # 重启
nssm status ssh-proxy     # 状态
nssm edit ssh-proxy       # 编辑配置(GUI)
nssm remove ssh-proxy     # 删除服务

注意本机防火墙不需额外放行 1080(仅本机访问);若其他程序也要使用这个代理端口,再按需放行。

方案对比 ​

方案 访问地址 覆盖范围 额外软件
SSH -L 端口转发 localhost:映射端口 仅指定端口 无
SSH -D + SwitchyOmega 目标原始 IP 仅浏览器 浏览器插件
SSH -D + Proxifier 目标原始 IP 全系统 Proxifier(付费)

单端口转发最简单但地址会变;浏览器级分流对"访问 Web 服务"这一需求刚好够用且免费;只有当命令行工具等其他程序也需要走代理时,才需要全系统级的方案。

小结 ​

SSH SOCKS5 动态转发 + SwitchyOmega 按网段分流 + NSSM 服务化,三个免费组件组合起来,可以在不改目标服务、不装代理客户端的前提下,让浏览器透明访问不可达网段。配置的关键点只有两处:SwitchyOmega 的 IP 通配符规则决定分流边界;服务化后注意 SYSTEM 账户的 SSH 密钥路径。

最近更新

基于 VitePress 构建