EasyConnect净化-以江南大学为例

深信服作为全国各大高校主流的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作为我们的代理软件。具体可以添加以下规则:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 放通VPN及内网认证
- DOMAIN,vpn.jiangnan.edu.cn,DIRECT
- DOMAIN,net.jiangnan.edu.cn,DIRECT
- IP-CIDR,202.195.159.160/32,DIRECT
# 江南大学网站群
- DOMAIN-SUFFIX,jiangnan.edu.cn,VPN
# 江南大学内网IP段
- IP-CIDR,172.16.0.0/12,VPN
# 江南大学外网IP段
- IP-CIDR,202.192.0.0/12,VPN

除了vpn.jiangnan.edu.cnnet.jiangnan.edu.cn这两个基础性域名需要直连以外,还需要放通202.195.159.160这个IP,这是在短信认证阶段抓包发现的,似乎是用作EasyConnect登陆验证的。

包含端口设置和代理设置的配置文件可以参考:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
mixed-port: 7890
allow-lan: false
mode: Rule
log-level: info
external-controller: 127.0.0.1:9090
proxies:
  - {name: VPN-socks5, server: localhost, port: 1080, type: socks5} 
proxy-groups:
  - name: VPN
    type: select
    proxies:
      - VPN-socks5
      - DIRECT
rules:
 - DOMAIN,vpn.jiangnan.edu.cn,DIRECT
 - DOMAIN,net.jiangnan.edu.cn,DIRECT
 - IP-CIDR,202.195.159.160/32,DIRECT
 - DOMAIN-SUFFIX,jiangnan.edu.cn,VPN
 - IP-CIDR,172.16.0.0/12,VPN
 - IP-CIDR,202.192.0.0/12,VPN

如果你不需要直连内网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):

1
2
3
4
Host host-1
  HostName 172.xx.xx.xx
  User xxxx
  ProxyCommand nc -x 127.0.0.1:7890 -X 5 %h %p

如果不想写配置文件也可以在SSH连接时加上,比如:

1
ssh -o "ProxyCommand=nc -x 127.0.0.1:7891 -X 5 %h %p" xxxx@172.xx.xx.xx

值得注意的是,netcat在不同操作系统上的实现并不相同,这里的实验环境是macOS,如果是Windows WSL或者其他Linux发行版,可能需要修改对应的nc命令参数。


Reference