深信服easyconnect断网问题解决&实现多个vpn自动分流

深信服easyconnect断网问题解决&实现多个vpn自动分流

环境

Windows10专业版+Docker桌面版

或者

Centos7+Docker(建议使用centos7的安装时选择有图形环境的选项)

介绍

使用到的开源项目:

docker-easyconnect

让深信服开发的非自由的 EasyConnect 代理软件运行在 docker 中,并开放 Socks5 供宿主机连接以使用代理

clash

一款有名的代理软件

教程

安装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即可

image-20221027211023935

选择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中执行即可

image-20221027212335850

如图所示,如果你启动容器中输入的账号密码不正确的话,命令行中会提示你重新输入,当出现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(容器)(下文配置自动分流可能会用到),这个目录每个容器必须不一样!!,否则会出现各种奇怪的问题,也可以设置不挂载,这样遇到奇奇怪怪的问题会很少很多,但是缺点是你每次启动都得手动输入地址和账号密码。

image-20221027212733168

上图为VNC图形版正常启动之后的输出,然后使用VNC客户端连接容器

ip127.0.0.1,要注意,不支持远程连接,只能在宿主机连接

端口默认为5901,可以在run的时候修改,比如改成-p 127.0.0.1:9501:5901则使用9501端口连接VNC

密码为你刚刚设置的

image-20221027213146546

登进去之后你就会看见一个熟悉的界面,要注意,这个docker容器是不能显示中文字的,所以部分中文显示为方块是正常的

然后按照正常流程登录即可,如果出现上图所示的The client version and server software version is not matching时,请参见文末疑难杂症

image-20221027215408628

看见这个时,你的vpn容器已经正常启动

测试代理

docker run的时候配置了两个端口,一个是http端口,一个是socks5端口,windows10的系统代理是可以直接配置http端口的

image-20221027215643133

如上图配置代理,其中端口为你刚刚自己运行容器时设置的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架构或者系统是什么特殊的

image-20221027220622952

下载完后解压得到一个文件,传到Linux服务器上,进入到运行目录,运行./clash -d . Clash默认会下载一个文件,并生成一个默认配置文件

配置Clash

规则配置

Windows的Clash配置文件和Linux大同小异,区别就是顶上的那些什么端口啊就不需要了,就算写了也没有用,官方说明是将配置文件以插件的形式加载。

image-20221027221435239

点击配置,第一次运行应该会有一份默认的配置文件,里面长啥样我不太清楚,反正最重要的配置项只有两项,右键编辑即可

#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>

image-20221027222704557

这时候,就需要视自己的情况,将这些地址删掉,即可使用代理

收工测试

代理中,点击全局,已经可以看见我们刚刚配置的两个socks5代理了,这里如果你的代理不能访问互联网的话,测试结果是超时是正常的,如果你要将整机流量全都走这个VPN的话,就在全局中选择你要使用的代理即可

image-20221027222924352

正常来说,我们一般用的都是规则模式,切换很简单,点击上面的选项卡切换就行

如下图,如果照我刚刚的配置的话,你会发现没有东西,这也是正常的,其实这个时候代理规则已经生效,所有经过Clash的流量都已经正常都分流了

image-20221027223147686

开启系统代理和TUN模式

系统代理会让大部分应用优先选择代理模式,当然也有很多应用默认不会走Clash代理,这时候就需要开TUN模式或者安装虚拟网卡了,比如Navicat连接数据库,就需要这样做

疑难杂症

  1. VNC版本的容器登录VPN提示The client version and server software version is not matching

    意思为服务端和客户端的版本不匹配,这种情况,多半是你在这个容器中登录过别的地址的VPN,解决方法也很简单,启动容器的时候映射了一个目录-v %cd%/.ecdata:/root,如果照我上面命令的话,这个文件夹就在cmd当前的目录下,停止容器后删掉这个文件夹,重新运行就行了

    当然上面也说了,多个VNC容器不能共用这个文件夹,也需要注意

  2. 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>

    然后重启容器即可解决版本过低问题,一劳永逸

评论区
头像
文章目录