docker-easyconnect / docker-easyconnect

使深信服(Sangfor)开发的非自由的 VPN 软件 EasyConnect 和 aTrust 运行在 docker 或 podman 中,并作为网关和/或提供 socks5、http 代理服务

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

分享多个EC版本同时运行的一个方案 及纯CLI登录的讨论

shmilee opened this issue · comments

首先感谢 Hagb 的详细的文档和代码,让我少踩了一些坑。
在你的基础上,我又看了安装包内的一些脚本,重新组织了代码,写了一个多个EC版本同时运行的一个方案。
顺便填坑 #25 (comment)
Hagb的多个镜像也可以同时开,我改的初衷主要是减小镜像数量和体积,多个EC版本用到时再挂载,更自由一些。

代码放在这 https://github.com/shmilee/scripts/tree/master/easyconnect-in-docker
已测试版本有 7.6.3, 7.6.7

使用分三步:

  1. 构建build一个多EC版本共用的docker镜像。
  2. 部署deploy多个EC版本到某目录,不同版本有各自的启动脚本start.sh, 以及处理各种问题、启动其他服务的脚本hook_script.sh
  3. 运行不同版本的start.sh,同时向 docker run 传所需的OPTIONS。
    运行正常后,修改版本对应的desktop文件,之后就可以不用命令行打开了。

需要注意的是有几个不同的默认值:

  1. 默认用的X11显示登录界面,VNC的安装、启动放在hook_script.sh,对于使用VNC的用户每次都需安装VNC相关的包,因此可以移入dockerfile,以节省很多时间。
  2. 默认IPTABLES的设置是关闭的。
  3. 代理软件danted配置内权限相关的部分做了修改。
  4. 添加的sshd默认是关闭的。
  5. EC调用浏览器打开网址,处理方式类似之前网址写到文件,不过打开不是在容器内窗口显示,而是在host用默认浏览器打开。
  6. 不同EC版本保存的登录信息在各自的conf目录内,不需要单独挂载处理。

其他反馈:

  1. 登陆过程中的cms client connect failed, 版本7.6.7不需hack,EC能自己处理。
  2. IPTABLES默认关闭,在我使用过程中没发现问题。
  3. 安装包内的脚本最主要的是postinst,处理文件权限相关的部分。
  4. 为了能通过desktop文件运行并且不打开终端窗口,需要docker run不带-i

更新添加一个纯 cli 的版本:easyconn_7.6.8.2-ubuntu_amd64.deb。
未找到官方下载地址,天河那边给的,已上传到github方便大家下载。

现已测试版本有

  • 7.6.3
  • 7.6.7
  • 7.6.8(CLI)

7.6.7 与 7.6.8(CLI) 都可以正常登录天河,CLI版本自动登录正常。唯一的问题是CLI版本的密码只能明文输入。

======

已将7.6.8(CLI) 的resources/bin合并到7.6.3,7.6.7内,设置USEUI=<X11,VNC,CLI>方便以三种方式登录。

这个好强啊!

(原谅我刚才情不自禁发了一句没有意义的话)请问我能把这个仓库在 README 里提到吗?
(不过现在电脑不在身边,得多一两天才能操作)

可以的啊,多一点人知道,就有多一点人测试这个包兼容哪些版本了。
不过我看打包的deb不怎么规范,包含了多余的mac平台的文件,所以极有可能是为客户需求临时做的,而不是正式发布版本。说不定版本检查可能比较松?

可以的啊,多一点人知道,就有多一点人测试这个包兼容哪些版本了。
不过我看打包的deb不怎么规范,包含了多余的mac平台的文件,所以极有可能是为客户需求临时做的,而不是正式发布版本。说不定版本检查可能比较松?

版本检查看起来是有的,不过我发现可以把不同版本的部件组合起来使用,昨天把 7.6.3 的和 7.6.8 cli 的组合起来用实现了 7.6.3 的纯 cli 版本。
大体操作就是把旧版的包中的 ECAgent 用新版的替换(起个别的名字放在统一目录,不替换也行)了,把 easyconn 也加进去,然后运行 ECAgenteasyconn 登陆,成功登陆后(比如通过杀掉 ECAgent)阻止它发心跳包(发心跳包反而会导致断线,不发一切正常)。

这样可玩性就增加许多了呀!

一开始我只把easyconn放到旧版两个来用,结果最后的登录过程一直在死循环,原来是少了resources/bin/ECAgent
为了减少三个版本占用的体积,之前对比过他们的文件。resources/lib64,三者相同。7.6.3与 7.6.7 GUI相关的大部分也相同。所以如果碰到其他7.6.x的版本混搭用,留意一下resources/{bin,conf},估计问题也不大。

一开始我只把easyconn放到旧版两个来用,结果最后的登录过程一直在死循环,原来是少了resources/bin/ECAgent
为了减少三个版本占用的体积,之前对比过他们的文件。resources/lib64,三者相同。7.6.3与 7.6.7 GUI相关的大部分也相同。所以如果碰到其他7.6.x的版本混搭用,留意一下resources/{bin,conf},估计问题也不大。

(突然发现我们偏题好久了… 改一下这个标题或者新开一个 issue 吧)

我在 Dockerfile 中这样给纯 cli 的 3.6.3 版清除无用文件,效果明显:

rm -rf /tmp/* && \
cd /usr/share/sangfor/EasyConnect/ && { rm -f * ; true ; } && rm -fr locales/ ec/ && \
cd resources/ && rm -rf *.asar *.png re/ && \
cd lib64 && rm libf* libg* libnssckbi.so libnsssysinit.so libnssdbm3.so libsoftokn3.so libsqlite3.so libssl3.so