深信服作为全国各大高校主流的VPN提供商,却魔改VPN协议,甚至会向系统加入自签名的CA证书(具体的危害可以搜素之)。本文介绍一种将深信服VPN客户端EasyConnect放进容器里的方法,实现应用与宿主机隔离,仅向外部暴露代理接口,实现净化的同时允许按需连接(以江南大学作为案例)。
本文默认docker已经完成安装。
部署docker-easyconnect容器
这一步主要需要参考docker-easyconnect项目的说明文档。需要注意的是目前大部分高校所使用的EasyConnect版本应该是具有图形界面的版本,所以需要选择第二个版本。同时可以考虑去掉官方文档中的:
- ti:用于启动一个交互式终端,意义不大。
- rm:在容器停止后删除容器,可以考虑保留容器下次直接重新启动。
另外端口可以按照实际情况进行修改,比如8888
端口一般会和jupyter冲突。如果你和我一样使用的是macOS系统,可以使用Screen Sharing.app
连接VNC而不需要下载新的软件。
增加Clash规则
按照官方文档中的步骤,此时系统已经在1080端口启动了一个socks5代理,在8888端口启动了一个http代理。我们现在需要做的就是修改系统代理,让流量走我们刚刚部署好的净化容器。
这里我们使用Clash作为我们的代理软件。具体可以添加以下规则:
|
|
除了vpn.jiangnan.edu.cn
和net.jiangnan.edu.cn
这两个基础性域名需要直连以外,还需要放通202.195.159.160
这个IP,这是在短信认证阶段抓包发现的,似乎是用作EasyConnect登陆验证的。
包含端口设置和代理设置的配置文件可以参考:
|
|
如果你不需要直连内网IP,也可以不用加入内网和外网IP段。
Note:若你需要为你的学校配置规则,可以参考以下思路:
- 替换学校网站群域名,尤其注意不能被代理的域名(比如VPN登陆和内网登陆系统等,可以观察Clash日志)。
- 获取学校内网网段,这个信息一般是不公开的,可以在不冲突的情况下设置大一些,替换内网段。
- 通过IP获取学校外网ASN,可以使用https://tools.ipip.net/as.php,替换外网段。
详细的配置文件说明这里不再赘述,可以参考Clash Wiki的说明。
为SSH添加ProxyCommand
到目前为止常规的代理配置基本上就结束了。但是对于计算机专业而言,可能还有通过SSH连接内网服务器的需求。由于SSH默认是不支持socks5或http代理的,我们还需要进一步配置。
配置的方法其实也很简单,在ProxyCommand
中使用netcat
设置SSH的代理即可,可以参考以下配置(~/.ssh/config):
|
|
如果不想写配置文件也可以在SSH连接时加上,比如:
|
|
值得注意的是,netcat在不同操作系统上的实现并不相同,这里的实验环境是macOS,如果是Windows WSL或者其他Linux发行版,可能需要修改对应的nc命令参数。