前言

放假在家,连接学校内网需要使用深信服家的 EasyConnect ,我偶尔需要连接学校的服务器或者访问内网网页,便打算下载使用。

但是!!!EasyConnect 这个软件比较流氓,也就是常说的毒瘤软件。我便开始寻找起了应对方法。

在 macOS下,EasyConnect 主要有以下行为:

  1. 后台常驻进程 EasyMonitor 和 ECAgentProxy,且都以 root 权限运行;
  2. 自动安装根证书,包括系统根证书与 FireFox 的根证书,且在删除后会重新安装。

ps:以 root 权限常驻进程,意味着这些进程可以读取和写入任何东西;安装根证书,意味着可以直接进行中间人攻击,随意篡改数据。

法1

该方法适合已安装 EasyConnect 的电脑,最少折腾。

  1. 使用 sudo su 获取管理员权限;

  2. 删除(rm)

    /Library/LaunchDaemons/com.sangfor.EasyMonitor.plist;

  3. 删除 /Library/LaunchAgents/com.sangfor.ECAgentProxy.plist;

  4. 重新启动 Mac;

  5. 打开钥匙串,删除系统钥匙串-系统-证书下面的证书(关键词 sangfor)。

注意一定要 先重启Mac再删除证书 ,因为在后台的 EasyMonitor 进程会在证书被删除后自动导入。

这样就消除了 EasyConnect 的问题。但是,目前为止会导致 EasyConnect 不能连接,因此我们需要用安全的方式启动 EasyConnect。可以编写两个脚本实现启动和退出。

startEasyConnect.sh

#! /bin/bash

/Applications/EasyConnect.app/Contents/Resources/bin/EasyMonitor > /dev/null 2>&1 &
/Applications/EasyConnect.app/Contents/MacOS/EasyConnect > /dev/null 2>&1 &

killEasyMonitor.sh

#! /bin/bash

pkill EasyMonitor
pkill ECAgent
pkill ECAgentProxy

2025.3.24更新:

如果普通用户不能直接pkill上述三个进程,可以尝试sudo pkill -9 -f “EasyConnect”等方式强制杀死进程。感谢@Jeblqr。

再次提醒,本人还是更加建议使用docker容器运行,详见法2(推荐) 。毕竟动用sudo需要手动输入密码,可能会比较麻烦。

将上述两个脚本放到 PATH 路径下,并给予可执行权限:

chmod +x startEasyConnect.sh
chmod +x killEasyMonitor.sh

在需要使用 EasyConnect 时,使用 普通用户 身份执行 startEasyConnect 命令(EasyMonitor 进程就没有权限导入根证书了)。退出 EasyConnect 后,执行 killEasyMonitor 杀掉后台的 EasyMonitor 进程即可。

法2(推荐)

适合还未安装 EasyConnect 的情况下,并且具有一些Docker知识,不怕麻烦的。(正在使用)

安装Docker

2022.12.05 更新:

推荐macOS用户使用Colima安装docker运行环境,点击查看 。

Windows

macOS

安装Clash

Windows

macOS可以安装ClashX Meta 。

安装VNC Viewer(可选)

如果你用的 EasyConnect 需要 图形界面登录的话,就需要安装 VNC Viewer,否则可以跳过这一步。

如果不知道可以先不装,到后面用 Docker 运行 EasyConnect 的时候提示你不能在命令行界面完成再返回这一步安装。

VNC Viewer 的安装非常简单,到官网的 下载 页面,选择相应的版本下载,然后一路下一步就完成了。

安装文本编辑器

因为涉及到 yaml文件 的编辑修改,你可能需要安装一个 VSCode ,不使用记事本的原因是它不带高亮,没有单词拼写提示也不会自动调整格式,可能会导致你有一些缩进、拼写和标点等方面的错误比较难发现。

VSCode是免费的,这里再推荐一个软件:Sublime Text(付费)。

使用 Docker 运行 EasyConnect

首先确保你的 Docker 是运行状态(可以输入 docker ps -a 测试一下)。打开终端,根据是否需要图形化界面输入不同的命令。

2026.09.21更新:

docker-easyconnect现由docker-easyconnect组织 维护,并提供arm64图形界面镜像。M系列Mac使用图形界面版时,请按项目README加入-e DISABLE_PKG_VERSION_XML=1参数;纯命令行镜像仍仅支持amd64。

纯命令行版(推荐):

touch ~/.easyconn
docker pull hagb/docker-easyconnect:cli
docker run --device /dev/net/tun --cap-add NET_ADMIN -v $HOME/.easyconn:/root/.easyconn -it -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 -e EC_VER=7.6.3 -e CLI_OPTS="-d vpn.xxx.edu.cn -u USERNAME -p PASSWORD" hagb/docker-easyconnect:cli

下面对命令进行解释:

  • 第一行,我们在当前用户的 $HOME 目录下创建了一个配置文件,用来保存登录信息。

  • 第二行,拉取我们需要的docker镜像到本地。

  • 第三行,我们启动了一个 Easy­Con­nect 命令行版 Docker 容器:

    • --device /dev/net/tun --cap-add NET_ADMIN 创建了虚拟网络设备;

    • -it 返回一个交互式终端,用来显示信息;

    • -v 指定挂载卷,我们将当前用户 $HOME$ 目录下的配置文件映射到容器内,实现登录信息的持久化;

    • -p 指定容器的端口映射,可以根据实际情况更改端口号。其中 1080 是 Socks5 代理端口,8888 是 HTTP 代理端口;

    • -e EC_VER 设置容器内环境变量 EC_VER 的值,指定 Sangfor 的版本,最好和服务端一致;

    • -e CLI_OPTS 设置容器内环境变量 CLI_OPTS 的值,指定运行 Sangfor 时的参数。这里的 -d 指定 VPN 地址,-u 指定用户名,-p 指定用户的密码。这些信息请 自行修改正确 !

    • -e IPTABLES_LEGACY=1 使用旧式的 iptables 命令,主要目的是和 WSL 保持兼容。在部分发行版的 WSL 版本上,缺少了这个环境变量会使得 VPN 不能正常运行。(非必要不选)

      2022.12.09 更新:

      建议增加容器自动重启选项,方便开机自启:

      • 已安装:

        在原容器的基础上使用update命令更新参数即可。

        docker ps -a
        docker update --restart=always 容器ID
        docker restart 容器ID
      • 未安装:

        直接在上面命令的基础上加上--restart参数即可。

        docker run --restart=always --device /dev/net/tun --cap-add NET_ADMIN -v $HOME/.easyconn:/root/.easyconn -it -p 127.0.0.1:1080:1080 -p 127.0.0.1:8888:8888 -e EC_VER=7.6.3 -e CLI_OPTS="-d vpn.xxx.edu.cn -u USERNAME -p PASSWORD" hagb/docker-easyconnect:cli

      2022.12.07 更新:

      如果在运行完上述命令后 docker容器保持在运行状态 ,我们需要Ctrl + C手动停止运行后,

      # 找到容器ID
      docker ps -a
      # 重新运行容器
      docker start 这里填写easyconnect容器ID

      2022.09.05 更新:

      这个参数建议先删除,如果不能正常运行,再加上。

      macOS Catalina系统下我测试添加此参数后账号将不能自动登录,建议删除。删除后一切正常。

具体的参数设置请参考:usage.md

图形界面版:

docker pull hagb/docker-easyconnect:7.6.3
docker run --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 hagb/docker-easyconnect:7.6.3

其中 hagb/docker-easyconnect:7.6.3 表示使用 7.6.3 版本的 EasyConnect,请根据实际情况修改版本号。

ps:当你的 5901 或者 1080 端口被其他服务占用时,可以通过如下命令更改我们上面用 docker 运行的 EasyConnect 的端口(以纯命令行版举例,图形界面版也是一样的);

127.0.0.1:15901:5901 和 127.0.0.1:10180:1080中的 15901 和 10180 各位可以随意修改成自己没有被占用的端口。

docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -e PASSWORD=xxxx -v $HOME/.ecdata:/root -p 127.0.0.1:15901:5901 -p 127.0.0.1:10180:1080 hagb/docker-easyconnect:7.6.3

图形化 VNC Viewer 连接

输入完之后打开 VNC Viewer,点击左上角的 File -> New connection,或者在空白处 右键 -> New connection,或者使用快捷键 Ctrl + N,新建一个链接,在弹出的对话框中的 VNC Server 中填入 127.0.0.1:5901 ,Name 可以不填。

VNC Viewer

点击 OK 后,双击我们刚刚创建好的链接,输入密码 XXXX,就可以进行连接了,进去之后是熟悉的界面,输入地址,用户名和密码之后就可以关掉了。

在 Docker 中运行的 EasyConnect 都不用输验证码,更加方便。

同时由于这个项目本身是会记住你输入的服务器地址的,所以以后使用的时候只需要点一下登录按钮就可以了。

进行到这一步,就会有一个 socks5 代理跑在你电脑的 1080 端口 了,接下来就是配置 Clash,在我们需要的时候进行转发。

配置 Clash

2022.12.07 更新:

可以直接创建一个新的配置文件,以免配置更新导致失效。ClashX同理,文件内容可以参考下面:

port: 7890
socks-port: 7891
allow-lan: true
mode: Rule
log-level: info
external-controller: :9090
proxies:
  - {name: vpn, type: socks5, server: 127.0.0.1, port: 1080}
proxy-groups:
  - name: 校园网
    type: select
    proxies:
      - vpn
rules:
  - IP-CIDR,172.20.2.0/24,vpn

这一小节讲述如何让你在需要的时候使用 EasyConnect 的 VPN 服务。

首先运行 Clash,点击左侧导航栏的 Profiles ,你会看到一个默认的 config.yaml ,如果你有其他配置文件也可以编辑其他配置文件。点击你想编辑的配置文件右边的形如 < > 的按钮,意思就是在文本编辑器中编辑配置文件,在最后增加:

# 增加一个名字是 vpn 的 sock5 代理
proxies:
	- {"name": "vpn", "type": "socks5", "server": "127.0.0.1", "port": "1080"}

# 添加 ip-cidr 的规则
rules:
	- IP-CIDR,222.192.6.0/24,vpn

注意事项:

这里填写的 222.192.6.0/24 是指只有访问 222.192.6.xxx 的流量才会走上面配置的那个代理,需要根据你的实际情况进行更改。

当然,你如果是编辑你自己的机场配置文件,是需要在原来的 proxies 和 rules 下新增上面内容,而不能再新增这两个属性。

到这一步,在 Clash 的 General 页面,将 System Proxy 打开,你就已经可以访问学校内网了,但是不可以使用远程桌面等功能,如果需要使用这些功能,还需要进一步配置。

配置 ClashX

与上面类似:

proxies:
	- { name: 'vpn', type: socks5, server: 127.0.0.1, port: 1080 }

rules:
	- 'IP-CIDR,172.20.2.0/24,vpn'

配置 TUN 模式

对于 TUN 模式,官方文档是这么描述的:

对于不遵循系统代理的软件,TUN 模式可以接管其流量并交由 CFW 处理,在 Windows 中,TUN 模式性能比 TAP 模式好。

浏览器之类的应用都是使用系统代理的,一些非系统代理应用,可以通过设置被 CFW 接管。总之,配置 TUN 模式之后,我们的需求就可以实现了,启动 TUN 模式需要进行如下操作(MacOS 用户跳过前两步):

  1. 打开 Clash 的 General 页面,找到 Home Directory,点击右边的 Open Folder 打开 Home Directory 文件夹;
  2. 进入网站 Wintun ,点击界面中 Download Wintun xxx 下载压缩包。根据系统版本将 wintun-x.xx/wintun/bin 对应目录中 wintun.dll 复制至 Home Directory 目录中。基于 x64 的处理器的 64 位操作系统请使用 amd64 版本,M1 版本的 Mac 选择 arm64 版本;
  3. 点击 General 中 Service Mode 右边 Manage,在打开窗口中安装服务模式,安装完成应用会自动重启,Service Mode 右边地球图标变为绿色即安装成功;
  4. 点击 settings -> Profile Mixin -> YAML,点击 YAML 右侧的 Edit,输入下面的内容,点击右下角的按钮保存。
mixin: 
  hosts:
    'mtalk.google.com': 108.177.125.188
    'services.googleapis.cn': 74.125.203.94
    'raw.githubusercontent.com': 151.101.76.133
  dns:
    enable: true
    default-nameserver:
      - 223.5.5.5
      - 1.0.0.1
    ipv6: false
    enhanced-mode: redir-host #fake-ip
    nameserver:
      - https://dns.rubyfish.cn/dns-query
      - https://223.5.5.5/dns-query
      - https://dns.pub/dns-query
    fallback:
      - https://1.0.0.1/dns-query
      - https://public.dns.iij.jp/dns-query
      - https://dns.twnic.tw/dns-query
    fallback-filter:
      geoip: true
      ipcidr:
      - 240.0.0.0/4
      - 0.0.0.0/32
      - 127.0.0.1/32
    domain:
      - +.google.com
      - +.facebook.com
      - +.twitter.com
      - +.youtube.com
      - +.xn--ngstr-lra8j.com
      - +.google.cn
      - +.googleapis.cn
      - +.gvt1.com
  tun: 
    enable: true
    stack: gvisor
    dns-hijack:
      - 198.18.0.2:53
    macOS-auto-route: true
    macOS-auto-detect-interface: true # 自动检测出口网卡
  1. 返回 general 页面开启 Mixin 即可,之后点击 connections 会发现所有连接都是 TUN 模式,这时候我们就完成了所有配置。

更详细的配置可以参考CFW历史文档镜像中的TUN模式 页面。

过滤应用

相关规则可以参考:

proxies:
  - name: "officeVpnProxy"
type: "socks5"
server: "127.0.0.1"
port: "10180"
proxy-groups:
# programs
  - name: "programs"
type: select
proxies:
  - "DIRECT"
  - "PROXY"
rules:
# programs
  - PROCESS-NAME,vpnkit.exe,programs
  - PROCESS-NAME,vpnkit-bridge.exe,programs
  - PROCESS-NAME,com.docker.dev-envs.exe,programs
  - PROCESS-NAME,com.docker.backend.exe,programs
  - PROCESS-NAME,com.docker.extensions.exe,programs
  - PROCESS-NAME,com.docker.proxy.exe,programs
  - PROCESS-NAME,com.docker.service,programs
  - PROCESS-NAME,com.docker.wsl-distro-proxy.exe,programs
  - PROCESS-NAME,Docker Desktop.exe,programs
  - PROCESS-NAME,docker.exe,programs
  - PROCESS-NAME,wsl.exe,programs
  - PROCESS-NAME,wslhost.exe,programs

注意:其中的 port 要对应你前面配置 docker 配置的端口,需要对应起来。

再次启动

当你关掉终端窗口,或者重启电脑,想再次启动 Docker 时,我们只需要启动相应的容器,并且在 VNC Viewer 中点击登录就可以(如果你不使用图形界面的话只需要启动容器)。

启动容器的操作就不用再去打上面创建容器时的那一串命令了,因为那一串命令的意思是创建容器、下载镜像、启动并进入容器,我们已经创建好了容器,以后只需要启动就行了。所以,我们先要知道我们有哪些容器,然后启动相应的容器就可以。

首先,查看我们已有的容器:

docker ps -a

你应该会得到类似的输出,如果你是第一次使用 Docker,应该只有一个容器

docker container

当电脑重启之后又想开启它的时候,只需要输入:

docker start 81f

就可以了,其中 81f 是我要启动的容器的 ID 也就是第一列的值,这个值很长,通常你只需要输入前几位就可以,或者也可以通过 docker rename 命令修改。

docker rename OLDNAME NEWNAME

卸载 EasyConnect

前面说道,EasyConnect 的流氓之处之一就是非常难卸载,但是我还是根据网上的资料和我自己操作的经验总结出一套方法,这一套方法可能略显复杂,可能有多余的操作,不过按照这样操作是可以将 EasyConnect 完全卸载干净的。

首先,找到 EasyConnect 的安装目录,双击运行他的卸载程序,等他运行完之后你会发现,这个目录并没有被完全删掉,还是有很多文件,这时候我们执行下列步骤:

  1. 全选 Shift + Delete,如果遇到不给删的就跳过,这时候还是会剩下很多文件。
  2. 断网重启电脑,来到安装目录下,把所有文件夹都改名,随便改成什么,再次重启
  3. 全选刚刚改过名的文件夹 Shift + Delete,如果这时候还删不了就把文件夹剪切到别的地方再删除
  4. 重启电脑,管理员权限打开命令行(如果你没有常用的命令行工具可以 Win + X 选择 Windows PowerShell(管理员))
  5. 输入命令 netsh winsock reset 回车

最后两步重置 winsock 非常重要,如果不执行很可能会出现各种客户端无法连接网络的情况。

如果卸载之后发现还有 sanfor 这个服务可以参考 这篇文章 尝试解决。

效果

查看已经创建的docker容器,可以发现 docker-easyconnect:cli 字样。

docker container

我是配合ClashX Pro使用,效果很不错,需要的时候直接切换到对应配置即可。

配置样式

感谢

docker-easyconnect

Soulike

Jortana

Nativus