前言

假期在家,学校的 VPN 突然罢工,导致无法访问我在实验室的 NAS

与此同时,师兄为了保证计算服务器的正常使用,使用VPS运行wireguard搭建了一个VPN作为临时顶替,因此我可以连接到内网里的docker虚拟机,从而以此为跳板连接同在学校内网的NAS

本文将介绍如何利用 SSH 隧道(SSH Tunneling) ,在不依赖极不可靠的 CUMTB VPN 的情况下,顺畅地打开内网 NAS 的 web 管理页面。

场景描述

  • 目标设备:群晖 NAS(内网地址:10.25.116.249,Web 端口:5000
  • 跳板服务器:Ubuntu Server(已通过虚拟局域网连接,可远程 SSH,内网地址:10.66.0.203,SSH 端口:25500
  • 当前困境:VPN 故障,本地电脑无法直连 10.25.x.x 网段,但跳板服务器可以访问该网段。

单个端口转发

1
ssh -p 25500 -L 5000:10.25.116.249:5000 root@10.66.0.203

参数拆解:

  • -p 25500:指定连接跳板机的 SSH 端口。
  • -L:表示本地端口转发。
  • 5000本地端口。你可以自定义,只要不被占用即可。
  • 10.25.116.249:5000目标地址与端口。即 NAS 在内网中的实际 IP 和 Web 管理端口。
  • root@10.66.0.203:跳板机的登录账号与地址。

运行上述命令并成功登录后,不要关闭该终端窗口。打开浏览器,在地址栏输入:

http://127.0.0.1:5000

此时,你会发现群晖 NAS 的登录界面奇迹般地出现了!所有的流量都会经过 SSH 加密隧道,由 Ubuntu 服务器中转给 NAS。

SOCKS5 动态转发(全局代理)

如果你不仅想访问 NAS 的 Web 页面,还想访问内网其他端口的服务器,频繁设置本地转发会很麻烦。这时可以使用 动态端口转发

1. 建立隧道

1
ssh -p 25500 -D 1080 root@10.66.0.203

-D 1080 会在本地建立一个 SOCKS5 代理服务器。

2. 浏览器配置

配合浏览器插件 SwitchyOmega

  1. 新建一个情景模式,代理协议选择 SOCKS5
  2. 代理服务器填 127.0.0.1,端口填 1080
  3. 启用该模式后,你可以直接在浏览器输入内网原始 IP:http://10.25.116.249:5000 即可访问。