启动参数里的--device /dev/net/tun --cap-add NET_ADMIN是不可少的。 因为 VPN 要创建 tun 网络接口。
-
DISABLE_PKG_VERSION_XML: 默认为空。设为非空时会阻止 EasyConnect 使用pkg_version.xml配置文件(通过将其设为/dev/null的软链接),从而绕过一些客户端和服务端版本不匹配的问题。注意这个选项并不能绕过第三级(如7.6.3中的3)不匹配的问题,只能绕过第四级版本(如7.6.7.x中的x)不匹配的问题。 -
EXIT: 默认为空,此时前端退出后会自动重连。不为空时,前端退出后不自动重启,并停止容器。 -
EXIT_LOCK: 默认为空,此时前端退出后会自动重连。不为空时, 前端退出后不自动重启,循环等待锁释放,当锁文件被删除后才会执行到下一步。 -
FAKE_HWADDR: 默认为空,向 VPN 提供的固定网卡 MAC 地址。Podman 在非 root 权限下无法固定虚拟网卡的 MAC 地址,为了防止每次启动容器都要重新提交硬件 ID,可设置该环境变量为某一 MAC 地址(建议使用 podman 先前启动时随机生成的地址或已提交的 MAC 地址),劫持 VPN 使其获取到该固定地址。Docker 默认的情况下 MAC 地址即固定,root 环境下的 podman 可以直接使用--mac-address参数设置,无需使用FAKE_HWADDR。 -
FORWARD: 默认为空,用于将 vpn 服务端一侧对客户端虚拟 ip 发起的访问转发到客户端侧的 ip,格式如下(以下所有 ip 均为 ipv4 ip):[SOURCE_IP:]CONTAINER_PORT:DESTINATION_IP:DESTINATION_PORT
其中
SOURCE_IP: 可选项。服务端侧发起连接的 ip 或 ip 段,这些 ip 对容器的CONTAINER_PORT端口发起的连接允许被转发,为空则服务端侧任意 IP 对容器CONTAINER_PORT端口发起的连接都会被转发。CONTAINER_PORT: 容器接受服务端侧传入连接的端口DESTINATION_IP: 转发的目的 ipDESTINATION_PORT: 转发的目的端口
例如:
1010:172.17.0.1:1013指服务端侧所有 ip 访问容器的1010端口会被转发到172.17.0.1:1013;10.234.0.0/24:1010:172.17.0.1:1013指服务端侧10.234.0.0/24(即10.234.0.0~10.234.0.255)访问容器的1010端口会被转发到172.17.0.1:1013;10.234.0.1:1010:172.17.0.1:1013指服务端侧10.234.0.1访问容器的1010端口会被转发到172.17.0.1:1013 -
IPTABLES_LEGACY: 默认为空。设为非空值时强制要求iptables-legacy。 -
MAX_RETRY: 最大重连次数,默认为空。 -
NODANTED: 默认为空。不为空时提供 socks5 代理的danted将不会启动(可用于和--net host参数配合,提供全局透明代理)。 -
PING_ADDR: 默认为空。用于定时 ping 的目的地址(域名、ip 皆可,但需要是 VPN 进行代理的地址),可用于保持 VPN 连接,留空时不做此操作。(服务端可能会配置成无流量通过 VPN 超过一定时间则自动断线,故用此方法可以保持更长时间在线) -
PING_ADDR_URL: 默认为空。用于定时 访问 的目的地址(某个网页,或者js/css等资源,但需要是 VPN 进行代理的地址),可用于保持 VPN 连接,留空时不做此操作。(功能和PING_ADDR类似,用于部分无法ping的环境进行替代PING_ADDR) -
PING_INTERVAL: 默认为 1800。单位为秒的 pingPING_ADDR的间隔。 -
SOCKS_USER: 默认为空,不为空时以此为用户名启用 socks5 代理的密码认证 -
SOCKS_PASSWD: 默认为空,SOCKS_USER不为空时此变量作为 socks5 代理的密码
-
EC_VER: 指定运行的 EasyConnect 版本,必填 -
CLI_OPTS: 默认为空,给easyconn login加上的额外参数,可用参数如下:-d vpn address, make sure it's assigned and the format is right, like "199.201.73.191:443" -t login type, "pwd" means username/password authentication "cert" means certificate authentication -u username -p password -c certificate path -m password for certificate -l certificate used to be authentication例如
CLI_OPTS="-d 服务器地址 -u 用户名 -p 密码"可实现原登录信息失效时自动登录。
-
CLIP_TEXT: 设置 VNC 内的剪贴板内容,特别是用于设置中文的用户名或者密码以供粘帖。若需多次设置不同的内容,或者在容器启动后操作 VNC 的剪贴板,可参看操作 VNC 的剪贴板。 -
DISPLAY:$TYPE为x11或使用无 vnc 的 image 时通过该变量来显示图像界面。 -
PASSWORD: 用于设置 vnc 服务的密码,该变量的值默认为空字符串,表示密码不作改变。变量不为空时,密码(应小于或等于 8 位)就会被更新到变量的值。默认密码是password. -
TYPE(仅适用于非vncless的图形界面镜像): 如何显示图形界面。有以下两种选项:-
x11或X11: 将直接通过DISPLAY环境变量的值显示前端,请同时设置DISPLAY环境变量。 -
其它任何值(默认值): 将在
5901端口开放 vnc 服务以操作前端。
-
-
URLWIN: 默认为空,此时当 VPN 前端想要调用浏览器时,不会弹窗,若该变量设为任何非空值,则会弹出一个包含链接的对话框供用户复制。 -
USE_NOVNC: 默认为空,不为空时将启动 noVNC 服务,可供用户在浏览器中访问 VPN 的图形界面,端口为 8080, 可用 -p 参数转发。 -
VNC_SIZE: 默认为空,为空时 VNC 服务分辨率为1110x620(7.6.7 版 EasyConnect 登录后的默认窗口尺寸),可设置为自定义的 VNC 分辨率。
socks5 和 http 代理会分别在容器的 1080 和 8888 端口开启,VPN 登录后可用它们来访问 VPN 的网络。这些端口可用 -p 参数转发到宿主机的 127.0.0.1 上或对外开放(不推荐,对外开放 http、socks5 端口不安全)。
浏览器和一些其他程序可使用这些代理,例如在 python requests 中使用:
requests.get('https://www.hao123.com', proxies={'http': '127.0.0.1:8888'})宿主机可以通过路由表(将容器地址作为下一跳路由)来设置透明代理,mtu 应与容器内的 tun0(EasyConnect)或 utun7(aTrust)网络接口保持一致。可通过 docker exec 容器名 cat /sys/class/net/接口名/mtu 来获取,一般为 1400(EasyConnect)或 1500(aTrust)。
如:
MTU=$(docker exec "$NAME" cat /sys/class/net/tun0/mtu)
ip route add 172.10.0.0/16 via 172.17.0.2 mtu $MTU table 3
ip rule add iif lo table 3可使宿主机通过 vpn 来访问 172.10.0.0/16。
带 VNC 的版本中,默认情况下环境变量 TYPE 留空会在 5901 端口开启 VNC 服务器。
带 VNC 的版本中,环境变量 USE_NOVNC 不留空会在 8080 端口开启 noVNC 的web服务。
处理成将链接(追加)写入/root/open-urls,如果设置了 URLWIN 环境变量为非空值,还会弹出一个包含链接的文本框。
可以直接使用宿主机的界面来显示前端。
容器启动参数中需加入 -v /tmp/.X11-unix:/tmp/.X11-unix -v ${XAUTHORITY:-~/.Xauthority}:/root/.Xauthority -e TYPE=x11 -e DISPLAY=$DISPLAY,且 X 服务器需设置允许 root 用户的连入(如通过命令 xhost +LOCAL:root)。
用 -v 参数将宿主机的登录信息文件(请确定该文件已存在)挂载到容器的 /root/.easyconn,如 -v $HOME/.easyconn:/root/.easyconn。
只需要用 -v 参数将宿主机的目录挂载到容器的 /root。
如 -v $HOME/.ecdata:/root。
将容器的 54530(EasyConnect)或 54631(aTrust) 端口映射到宿主机(加入 -p 127.0.0.1:端口号:端口号 参数),之后便可以在宿主机上打开 VPN 服务器的网页进行登录。
这种登录方式可以在不使用 X11 或 VNC 的情况下登录 VPN。
注意,EasyConnect web 登录需要提前在相应浏览器打开 https://127.0.0.1:54530 并选择忽略证书错误——此处 EasyConnect 使用了一份自签证书;aTrust 则无此类问题。
VNC 的剪贴板同步功能可能无法正常同步中文文本,此时可以关闭 VNC 客户端的剪贴板同步功能,并在容器中运行 set-vnc-clip.sh 文本 来设置 VNC 的剪贴板,运行 get-vnc-clip.sh 来获取 VNC 的剪贴板内容。此外,也可以在容器启动时使用 -e CLIP_TEXT=文本 参数来设置 VNC 中的剪贴板内容。
EasyConnect 客户端大致有以下三种版本
7.6.3:适用于连接 <7.6.7 版本的 EasyConnect 服务端。7.6.7:适用于连接 >= 7.6.7 版本的 EasyConnect 服务端。cli:来源于 @shmille 提供的命令行版客户端 deb 包。适用于所有版本的 EasyConnect 服务端(需配合环境变量参数-e EC_VER=7.6.3或-e EC_VER=7.6.7),但只有 amd64 版本,只能使用用户名、密码来登录。
以下例子中,开放的 Socks5 在127.0.0.1:1080(-p 127.0.0.1:1080:1080)。图形界面(X11 socket 和 vnc)两例中,登录信息均保存在~/.ecdata/文件夹(-v $HOME/.ecdata:/root)
下列例子可启动纯命令行的 EasyConnect 7.6.7(-e EC_VER=7.6.7),并且退出后不会自动重启(-e EXIT=1)。
touch ~/.easyconn
docker run --rm --device /dev/net/tun --cap-add NET_ADMIN -ti -v $HOME/.easyconn:/root/.easyconn -e EC_VER=7.6.7 -e EXIT=1 -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 hagb/docker-easyconnect:cli在当前桌面环境中启动 EasyConnect 前端,并且该前端退出后不会自动重启(-e EXIT=1),EasyConnect 要进行浏览器弹窗时会弹出含链接的文本框(-e URLWIN=1)。
xhost +LOCAL:root
docker run --rm --device /dev/net/tun --cap-add NET_ADMIN -ti -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/root/.Xauthority -e EXIT=1 -e DISPLAY=$DISPLAY -e URLWIN=1 -e TYPE=x11 -v $HOME/.ecdata:/root -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 hagb/docker-easyconnect:vncless
xhost -LOCAL:root客户端退出会自动重启,VNC 服务器在127.0.0.1:5901(-p 127.0.0.1:5901:5901),密码为xxxx(-e PASSWORD=xxxx)。
docker run --rm --device /dev/net/tun --cap-add NET_ADMIN -ti -e PASSWORD=xxxx -v $HOME/.ecdata:/root -p 127.0.0.1:5901:5901 -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 hagb/docker-easyconnect