学校使用了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
- 在 Windows 上下载 VcXsrv 并安装
- 第一步的设置窗口状态怎么选关系不大,我一般是用 One large window ,默认的 Multiple windows 在多屏情况下显示会有一些问题。然后 Display number 可以用默认的 -1 ,或者设置成 0
- 下一步,选择 Start no client 。
- 下一步,选项全部勾上 (特别是“Disable access control”),Additional parameters 不用管。
Mac
- 安装XQuartz:
brew install xquartz --cask
- 安装后通过 应用-实用工具-XQuartz 可启动 XQuartz 程序
- 在命令行中设置 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代理,可以通过代理访问内网资源。