深信服easyconnect断网问题解决&实现多个vpn自动分流
环境
Windows10专业版+Docker桌面版
或者
Centos7+Docker(建议使用centos7的安装时选择有图形环境的选项)
介绍
使用到的开源项目:
让深信服开发的非自由的 EasyConnect 代理软件运行在 docker 中,并开放 Socks5 供宿主机连接以使用代理
一款有名的代理软件
教程
安装docker
首先需要安装docker
https://docs.docker.com/get-docker/
修改docker镜像源
linux
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://dgxy4fzg.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
#如果第二行命令无法正常运行的话,请手动vi编辑这个文件写入即可
Windows
,
{
"registry-mirrors": ["https://dgxy4fzg.mirror.aliyuncs.com"]
}
很简单,只需要复制上面这一段,到Docker Engine
中下面粘贴 并重启docker即可
选择docker-easyconnect版本
docker-easyconnect有很多版本,github首页也都给出了介绍
如果你的vpn没有短信验证等第二步验证,请使用纯命令行版
如果你的vpn有第二次验证,或者纯命令行无法正常登录,请使用图形界面版
纯命令版
例如,我这边使用了7.6.7
版本的纯命令行:
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 -e EC_VER=7.6.7 -e CLI_OPTS="-d vpn地址 -u vpn用户名 -p vpn密码" hagb/docker-easyconnect:cli
复制之前,请填写vpn地址账号密码
windows版本,直接在cmd中执行即可
如图所示,如果你启动容器中输入的账号密码不正确的话,命令行中会提示你重新输入,当出现user "xxx" login successfully!
时,证明vpn已经正常启动
图形界面版
例如,这里使用了7.6.7
的图形界面版
# 注意!!你会发现命令中有一个%cd%,这个是windows专有的占位符,意为当前位置,linux中用$PWD代替,当然也可以用官方给出的$HOME
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -e PASSWORD=vnc设置的密码 -v %cd%/.ecdata:/root -p 127.0.0.1:5901:5901 -p 127.0.0.1:1081:1080 -p 127.0.0.1:8889:8888 hagb/docker-easyconnect:7.6.7
注意!!
上面命令行里面有一个-v %cd%/.ecdata:/root
挂载目录,意思是把主机的.ecdata
映射到容器的/root
,如果你需要启多个vpn(容器)(下文配置自动分流可能会用到),这个目录每个容器必须不一样!!,否则会出现各种奇怪的问题,也可以设置不挂载,这样遇到奇奇怪怪的问题会很少很多,但是缺点是你每次启动都得手动输入地址和账号密码。
上图为VNC图形版正常启动之后的输出,然后使用VNC客户端连接容器
ip为127.0.0.1
,要注意,不支持远程连接,只能在宿主机连接
端口默认为5901
,可以在run的时候修改,比如改成-p 127.0.0.1:9501:5901
则使用9501端口连接VNC
密码为你刚刚设置的
登进去之后你就会看见一个熟悉的界面,要注意,这个docker容器是不能显示中文字的,所以部分中文显示为方块是正常的
然后按照正常流程登录即可,如果出现上图所示的The client version and server software version is not matching
时,请参见文末疑难杂症
看见这个时,你的vpn容器已经正常启动
测试代理
docker run
的时候配置了两个端口,一个是http端口,一个是socks5
端口,windows10的系统代理是可以直接配置http端口的
如上图配置代理,其中端口为你刚刚自己运行容器时设置的http端口,比如你写了-p 127.0.0.1:8889:8888
就代表着你把容器的8888
端口映射到了宿主机的8889
端口,此时端口就应该填8889
配置完成后,打开浏览器,输出只有挂了vpn才能访问的地址,测试一下代理是否生效
注意:如果你的vpn断网的话,这个时候你的浏览器应该也是访问不了互联网的,这是正常情况
安装Clash
使用clash的主要目的为了自动分流,能够将指定的ip地址(段),指定走哪个代理端口,因此可以实现不断网的目的
Windows安装Clash
很简单,建议直接安装汉化版的,清晰明了
https://github.com/ender-zhao/Clash-for-Windows_Chinese/releases
Linux安装Clash
到Clash开源地址下载对应系统的版本包
https://github.com/Dreamacro/clash/releases
一般下载clash-linxu-amd64-v1.11.8.gz
即可,除非你的cpu架构或者系统是什么特殊的
下载完后解压得到一个文件,传到Linux服务器上,进入到运行目录,运行./clash -d .
Clash默认会下载一个文件,并生成一个默认配置文件
配置Clash
规则配置
Windows的Clash配置文件和Linux大同小异,区别就是顶上的那些什么端口啊就不需要了,就算写了也没有用,官方说明是将配置文件以插件的形式加载。
点击配置,第一次运行应该会有一份默认的配置文件,里面长啥样我不太清楚,反正最重要的配置项只有两项,右键编辑即可
#proxies为代理列表,如果你起了多个容器+vpn,请在这个列表中全都加上
proxies:
- {"name": vpn1, "type": socks5, "server": 127.0.0.1, "port": 1080 }
- {"name": vpn2, "type": socks5, "server": 127.0.0.1, "port": 1081 }
- {"name": vpn3, "type": socks5, "server": 127.0.0.1, "port": 1082 }
#这个proxy-groups配置可以不写,需要了解的去官方文档看说明,这里不赘述
proxy-groups:
#这里rules是分流规则列表,是重点,没有在这个规则中的ip都会走主机直连,不会走代理,以达成不断网的效果,仿照下面的示例写即可,最后一个逗号后面跟的是上面proxies设定的name
rules:
- 'IP-CIDR,172.20.146.0/24,vpn1'
- 'IP-CIDR,172.20.89.0/24,vpn2'
系统代理配置
Clash默认的系统代理配置,是会排除掉10.*,172.*
等等这些网段的,如果不修改,这些地址的访问就不会走代理
#Clash bypass默认配置
bypass:
- localhost
- 127.*
- 10.*
- 172.16.*
- 172.17.*
- 172.18.*
- 172.19.*
- 172.20.*
- 172.21.*
- 172.22.*
- 172.23.*
- 172.24.*
- 172.25.*
- 172.26.*
- 172.27.*
- 172.28.*
- 172.29.*
- 172.30.*
- 172.31.*
- 192.168.*
- <local>
这时候,就需要视自己的情况,将这些地址删掉,即可使用代理
收工测试
代理中,点击全局,已经可以看见我们刚刚配置的两个socks5
代理了,这里如果你的代理不能访问互联网的话,测试结果是超时是正常的,如果你要将整机流量全都走这个VPN的话,就在全局
中选择你要使用的代理即可
正常来说,我们一般用的都是规则
模式,切换很简单,点击上面的选项卡切换就行
如下图,如果照我刚刚的配置的话,你会发现没有东西,这也是正常的,其实这个时候代理规则已经生效,所有经过Clash的流量都已经正常都分流了
开启系统代理和TUN模式
系统代理会让大部分应用优先选择代理模式,当然也有很多应用默认不会走Clash代理,这时候就需要开TUN模式或者安装虚拟网卡了,比如Navicat连接数据库,就需要这样做
疑难杂症
VNC版本的容器登录VPN提示The client version and server software version is not matching
意思为服务端和客户端的版本不匹配,这种情况,多半是你在这个容器中登录过别的地址的VPN,解决方法也很简单,启动容器的时候映射了一个目录
-v %cd%/.ecdata:/root
,如果照我上面命令的话,这个文件夹就在cmd当前的目录下,停止容器后删掉这个文件夹,重新运行就行了当然上面也说了,多个VNC容器不能共用这个文件夹,也需要注意
VNC版本容器登录VPN提示版本过旧需要升级
如果第一次可以正常登录,第二次登录提示这个的话,可以删除ecdata目录,但是这样做每次都要重新输入账号密码很麻烦,所以可以通过修改版本号的方式来解决:
将~/.ecdata/conf/Version.xml文件中的版本号改成大于等于pkg_version.xml中同系列版本<force_update_le>标签下的版本号
简单说来,就是把Version.xml中的version改成pkg_version.xml最底下的一个版本号
<!-- 例如 Version.xml 如下,我安装的版本系列为767(7.6.7.*)--> <?xml version="1.0" encoding="utf-8"?> <root> <alias>linux_767</alias> <version>7.6.7.4</version> <pkg>deb</pkg> <arch>x64</arch> </root> <!-- 在pkg_version.xml中767的标签片段如下--> <linux_767> <deb> <x86> <version>7.6.7.7</version> <force_update_le>7.6.7.6</force_update_le> </x86> <x64> <version>7.6.7.7</version> <force_update_le>7.6.7.6</force_update_le> </x64> </deb> <rpm> <x86> <version>7.6.7.7</version> <force_update_le>7.6.7.6</force_update_le> </x86> <x64> <version>7.6.7.7</version> <force_update_le>7.6.7.6</force_update_le> </x64> </rpm> </linux_767> <!-- 则需要把Version.xml中的7.6.7.4改成大于等于pkg_version.xml的 force_update_le(7.6.7.6)--> <?xml version="1.0" encoding="utf-8"?> <root> <alias>linux_767</alias> <version>7.6.7.7</version> <pkg>deb</pkg> <arch>x64</arch> </root>
然后重启容器即可解决版本过低问题,一劳永逸
分别是哔哩哔哩序号35,小米运动序号2,米友社序号13,这个是同一个账号下运行的任务