深信服(Sangfor EasyConnect)提供的 VPN 服务常常具有白名单配置,不在名单内的 IP 是不能用 VPN 连接的。比如我校的校园网 VPN 就有很大限制,想在校外用返校 VPN 访问百度是不可能的。

注意,本文不会破解 Sangfor 本身的白名单机制,只是借用一台白名单内的机器实现隧道罢了。如果白名单设置的非常严格,或者你无法搞到一台有白名单的机器,这个方法是完全无效的。

为了解除这样的限制,必须在 Sangfor 提供的 VPN 上再打通一条隧道。为了配置简单有效,我选择了 SSH。

下面开始正式介绍。

设置 EasyConnect VPN

对于 Sangfor 这种做网络监控的“安全”企业,我不会把他们的软件之间装在电脑上。所以就有了这篇文章:将 Sangfor EasyConnect 校园 VPN 关进 Docker 里 - Nativus' Space (naiv.fun)

根据上面这篇文档设置好 Docker 和 EasyConnect 之后,1080 端口由 EasyConnect 提供 SOCKS5 代理服务。记下这个端口,进入下一步。

搭建 SSH 隧道

SSH,安全外壳协议,应该大家都用过,但大部分情况下只是使用它连接远程的 Shell。这里我们利用他的另一个特性,实现隧道。

首先学习两个比较陌生的参数:

  • -o "ProxyCommand= ..." 指定 SSH 连接时使用的代理方法。我们需要 ProxyCommand 让 SSH 使用 EasyConnect 的 SOCKS5 代理连接远程的服务器。
  • -D $ProxyPort 指定 SSH 在本地开启的端口。我们后面通过这个端口开启的代理实现无限制的访问。

通过将两个参数组合起来,我们就可以让 SSH 通过 1080 端口连接到校内的服务器,然后再让 SSH 在 $ProxyPort 上开放一个 SOCKS5 代理,以供我们访问不在白名单里面的服务。

完整代码如下(注意将命令中的信息替换为自己的):

ssh -o "ProxyCommand=ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p" -D $ProxyPort $User@$Host -p$RemoteSSHPort 

SSH 成功连接之后,就可以通过上面指定的 $ProxyPort 使用无限制的 SOCKS5 代理了。

需要注意的是上面的 ProxyCommand,一般可以用 nc (Linux 内置),但是由于我用的是 Windows(缺少 nc),所以使用了 Ncat。Windows 用户如果想要直接运行上面的指令,必须下载安装 Ncat,并确保 ncat.exe 在环境变量中

配置 SwitchyOmega 实现网页访问

SwitchyOmega 是一款浏览器插件,打开 SwitchyOmega,新建情景模式,如图:

SwitchyOmega.png
SwitchyOmega.png

图中的 12345 即为刚刚设置的 $ProxyPort

然后可以切换到这个情景模式,访问 ipip.net 看看自己的 IP 地址是不是变成远程服务器的IP 了。