基于podman的EasyConnect容器化实践

基于podman的EasyConnect容器化实践

引言

为什么要把easyconnect容器化:

避免占用资源的自启进程、与梯子共存、

支持断线自动重连。避免与csgo反作弊干扰

podman的优势:无需守护进程、基本完全兼容docker

podman安装与配置

Windows系统需要开启WSL,但是不必安装发行版。

  1. 安装podman:Github下载安装包(linux也可用包管理工具)

  2. 从github下载rootfs

  3. 在rootfs.tar.xz所在目录下打开终端

  4. 键入如下命令,初始化machine并启动:

    1
    2
    
    podman machine init --image-path .\rootfs.tar.xz
    podman machine start

注意:在windows上podman已经做了映射,所以podman相关的命令都可以在命令行或者powershell直接执行,不用打开WSL

运行docker-easyconnect

首先拉取镜像,CLI版本即可,资源占用更少:

1
podman pull docker.io/hagb/docker-easyconnect:cli

然后运行(其中${xxx}表示的变量请自行替换,dns参数必须指定一个能解析服务器域名的DNS服务器,否则会无法连接):

1
2
podman run --device /dev/net/tun --cap-add NET_ADMIN --dns 114.114.114.114 -ti -p ${SOCKS5_PORT}:1080 -p ${HTTP_PORT}:8888 `
  -e EC_VER=7.6.3 -v ${accountFile}:/root/.easyconn hagb/docker-easyconnect:cli

第一次运行时会提示输入服务器、用户名和密码。当出现如下输出时表示成功连接:

user "[用户名]" auto login successfully

前面的的-v选项就是将登录信息保存到前面配置的$accountFile。后面再运行就可以自动登录。断线会自动重连,Ctrl+C可以退出。

安全提示:$accountFile保存格式为二进制明文,请注意不要泄露。

配置代理

此时就可以通过socks5或者HTTP使用前面设定的端口配置代理。以浏览器的SwitchyOmega插件示例,创建一个连接该端口代理的情景模式,使用该情景模式时即可访问内网。

自动分流

假设用梯子的时候已经有一个能够自动判断是否走代理的情景模式auto,那么可以创建一个名为auto+EC的情景模式,对于内网站点和知网等IP登录的文献网站使用easyconnect的代理,其他的站点则继承此前的配置。

其他的如clash等代理软件方法类似。

托盘图标程序

上面的容器在运行时每次都要通过终端触发。在linux下添加alias和操作终端都比较方便,但是在Windows可能还是具有一个图形界面更加方便。

考虑到其他语言从头建工程太大动干戈,最近又发现powershell可以与.net框架无缝集成,可以在脚本中直接创建GUI,非常适合拿来写一些简单的界面。

于是就顺手写了个托盘图标、菜单和必要的设置对话框:

脚本运行时会自动启动podman machine,当点击Enable时,会在后台自动执行前面的podman run指令启动EasyConnect。

之后就可以正常使用EasyConnect代理。需要停止时同样右键托盘图标取消Enable复选框即可。

写完之后还是脚本,还是需要终端运行,这时通过PS2EXE编译成exe就可以了。当然,本质是调用终端命令,并且没有写登录界面,所以在使用前请通过终端手动运行一次前面的podman run指令并生成accountFile

如果不怕简陋的话可以下载试用

0%