学校使用了cisco anyconnect作为VPN,但是其不支持修改路由,必须使用全局代理,极大降低了正常网络访问的速度。于是就打算将其运行在docker中,通过代理的方式访问。

简单搜搜索了一下,发现有openconnect这个开源的解决方案。但是使用后发现,学校的VPN使用了sso + 2fa的登录方式,openconnect并不支持。

进一步搜索之后,发现了openconnect-sso这个项目,其在openconnect基础上封装了一层,调用网页浏览器,支持sso + 2fa登录。因此我打算将其封装到docker中,并通过X11访问网页浏览器,完成认证。

Docker-openconnect-sso

最终项目地址:https://github.com/RManLuo/docker-openconnect-sso

使用方法

配置docker环境

配置X11环境

Windows

教程

  1. 在 Windows 上下载 VcXsrv 并安装
  2. 第一步的设置窗口状态怎么选关系不大,我一般是用 One large window ,默认的 Multiple windows 在多屏情况下显示会有一些问题。然后 Display number 可以用默认的 -1 ,或者设置成 0
  3. 下一步,选择 Start no client 。
  4. 下一步,选项全部勾上 (特别是“Disable access control”),Additional parameters 不用管。

Mac

教程

  1. 安装XQuartz: brew install xquartz --cask
  2. 安装后通过 应用-实用工具-XQuartz 可启动 XQuartz 程序
  3. 在命令行中设置 DISPLAY 环境变量:export DISPLAY=:0,关闭access control:xhost +

启动docker容器

1
docker run -itd --privileged --name=anyconnect-sso-x11 -v /dev/shm:/dev/shm -v /tmp/.X11-unix:/tmp/.X11-unix -e SERVER_NAME=${SERVER_NAME} -e USER_NAME=${USER_NAME} -e DISPLAY=host.docker.internal:0.0 -p 127.0.0.1:10081:1080 --restart=unless-stopped rmanluo/openconnect-sso-x11:latest

请将 SERVER_NAME 和 USER_NAME 替换为您自己的。

样例:

docker run -itd —privileged —name=anyconnect-sso-x11 -v /dev/shm:/dev/shm -v /tmp/.X11-unix:/tmp/.X11-unix -e SERVER_NAME=vpn.xx.edu -e USER_NAME=xxx@xx.edu -e DISPLAY=host.docker.internal:0.0 -p 127.0.0.1:10081:1080 —restart=unless-stopped rmanluo/openconnect-sso-x11:latest

理论会弹出浏览器窗口,输入密码即可登录。

Note 如果未弹出浏览器窗口,请检查X11是否配置正确。

完成2FA验证

docker会在本地10081端口启动socks5代理,可以通过代理访问内网资源。