Windows 下 EasyTier 组网脚本封装:启动、停止、状态查看与隐藏运行

前言

最近在使用 EasyTier 做内网穿透和多节点组网时,遇到了一些比较典型的问题:

  • TUN 模式无法正常开启
  • 虚拟网卡没有创建
  • 节点之间已经 P2P 连接,但没有虚拟 IP
  • 后台隐藏运行后,不知道 EasyTier 是否还在运行
  • 想停止程序时不方便
  • 希望启动、停止、状态查看都能脚本化

经过一轮排查和整理,最终封装了一套 Windows 下使用的 EasyTier 管理脚本。

本文记录一下完整过程和最终脚本设计思路。

当前目录结构

最终目录结构如下:

当前目录
├─ EasyTier
│  ├─ easytier-core.exe
│  └─ easytier-cli.exe
├─ config.ini
├─ Run.bat
├─ Start.bat
├─ Status.bat
└─ Stop.bat

其中:

文件 / 目录 说明
EasyTier/ EasyTier 程序目录,存放 easytier-core.exeeasytier-cli.exe
config.ini 配置文件,用于保存网络名、密钥、中间节点地址、本机虚拟 IP 等信息
Start.bat 管理脚本,推荐从这里启动
Run.bat 实际运行 EasyTier 的脚本,由 Start.bat 调用
Status.bat 查看 EasyTier 运行状态和节点信息
Stop.bat 停止正在运行的 EasyTier

遇到的问题

一开始执行:

easytier-cli.exe peer

看到的节点信息类似这样:

| ipv4 | hostname   | cost  | lat(ms) | loss | tunnel  | NAT            |
|------|------------|-------|---------|------|---------|----------------|
|      | Office-PC  | Local | -       | -    | -       | PortRestricted |
|      | Home-PC    | p2p   | 12.35   | 0.0% | udp     | PortRestricted |
|      | Cloud-Node | p2p   | 8.66    | 0.0% | tcp,udp | PortRestricted |

从结果可以看出:

  • 节点之间已经连接成功
  • P2P 通道正常
  • 延迟和丢包也正常
  • 但是 ipv4 全部为空

这说明 EasyTier 网络连接本身没有问题,问题在于节点没有拿到虚拟 IP,所以 TUN 虚拟网卡也无法正常工作。

解决思路

EasyTier 的节点需要配置虚拟 IP。

可以使用 DHCP,也可以手动指定 IP。

为了便于排查和维护,我最终选择了手动指定虚拟 IP,例如:

Cloud-Node  10.100.10.1
Office-PC   10.100.10.2
Home-PC     10.100.10.3

每个节点的虚拟 IP 必须唯一,不能重复。

启动 EasyTier 时,需要加上:

--ipv4 10.100.10.2

这样本机节点就会拥有固定的 EasyTier 虚拟 IP。

配置文件 config.ini

为了避免每次都手动输入参数,我使用 config.ini 保存配置。

示例:

network_name=demo-easytier-network
network_secret=change-me-demo-secret
peer_host=203.0.113.10
peer_port=11010
local_ipv4=10.100.10.2
show_window=1

字段说明:

配置项 说明
network_name EasyTier 网络名称
network_secret EasyTier 网络密钥
peer_host 中间节点 / 服务器的 IP 或域名
peer_port 中间节点监听端口
local_ipv4 当前机器的 EasyTier 虚拟 IP
show_window 是否显示 EasyTier 运行窗口,1 显示,0 隐藏

脚本设计

我把功能拆成了 4 个脚本。

1. Start.bat

Start.bat 是管理脚本,也是平时主要运行的入口。

它负责:

  1. 检查管理员权限
  2. 读取 config.ini
  3. 如果配置不存在,则提示用户输入
  4. 保存配置
  5. 调用 Run.bat 启动 EasyTier
  6. 输出当前节点信息和 Peer 列表

平时只需要双击:

Start.bat

2. Run.bat

Run.bat 是真正启动 EasyTier 的脚本。

它会被 Start.bat 调用,并接收参数:

Run.bat network_name network_secret peer_host peer_port local_ipv4 show_window from_start

正常情况下不建议直接双击 Run.bat

如果用户直接运行 Run.bat,脚本会自动跳转到 Start.bat,避免误操作。

3. Status.bat

Status.bat 用于查看 EasyTier 是否正在运行,以及当前节点状态。

它会执行类似下面的命令:

tasklist /FI "IMAGENAME eq easytier-core.exe"
EasyTier\easytier-cli.exe node
EasyTier\easytier-cli.exe peer

常用来确认隐藏窗口模式下 EasyTier 是否还在后台运行。

4. Stop.bat

Stop.bat 用于停止 EasyTier。

核心命令是:

taskkill /IM easytier-core.exe /F

如果当前电脑上只运行一个 EasyTier 实例,这种方式比较简单直接。

启动参数说明

最终 EasyTier 的核心启动参数类似下面这样:

easytier-core.exe ^
--network-name demo-easytier-network ^
--network-secret change-me-demo-secret ^
--ipv4 10.100.10.2 ^
--peers tcp://203.0.113.10:11010 udp://203.0.113.10:11010 ^
--dev-name easytier0

其中:

参数 说明
--network-name 网络名称
--network-secret 网络密钥
--ipv4 当前节点的虚拟 IP
--peers 中间节点地址
--dev-name 虚拟网卡名称

显示窗口和隐藏窗口

通过 show_window 控制是否显示 EasyTier 运行窗口。

显示窗口:

show_window=1

隐藏窗口:

show_window=0

如果隐藏窗口启动,平时可以通过:

Status.bat

查看状态,通过:

Stop.bat

停止 EasyTier。

日志处理

由于隐藏窗口运行时不方便看输出,所以可以把 EasyTier 的控制台日志重定向到日志文件中。

日志文件可以使用当前日期时间命名,例如:

log\20260425_184500.log

这样每次启动都会有一个独立日志文件,便于排查问题。

示例思路:

for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set "LOG_TIME=%%i"

set "LOG_FILE=%LOG_DIR%\%LOG_TIME%.log"

然后启动时重定向输出:

> "%LOG_FILE%" 2>&1

这样标准输出和错误输出都会写入同一个日志文件。

启动成功后的效果

启动后执行:

EasyTier\easytier-cli.exe node

可以看到本机节点信息:

| Virtual IP     | 10.100.10.2/24  |
|----------------|-----------------|
| Hostname       | Office-PC       |
| UDP Stun Type  | PortRestricted  |

执行:

EasyTier\easytier-cli.exe peer

可以看到所有节点信息:

| ipv4            | hostname   | cost  | lat(ms) | loss | tunnel  | NAT            |
|-----------------|------------|-------|---------|------|---------|----------------|
| 10.100.10.2/24  | Office-PC  | Local | -       | -    | -       | PortRestricted |
| 10.100.10.1/24  | Cloud-Node | p2p   | 9.82    | 0.0% | udp,tcp | PortRestricted |
| 10.100.10.3/24  | Home-PC    | p2p   | 15.21   | 0.0% | udp     | PortRestricted |

当每个节点都有虚拟 IP 后,就可以测试互通:

ping 10.100.10.1
ping 10.100.10.3

常见问题

1. 节点已经连接,但 ipv4 为空

说明该节点没有配置虚拟 IP。

需要在对应机器的配置中设置:

local_ipv4=10.100.10.x

或者启动参数中加:

--ipv4 10.100.10.x

每台机器的 IP 必须不同。

2. 本机有 IP,其他节点没有 IP

说明本机配置正常,其他节点还没有配置虚拟 IP。

例如:

Office-PC   10.100.10.2/24
Cloud-Node  10.100.10.1/24
Home-PC     空

需要到 Home-PC 上配置:

local_ipv4=10.100.10.3

然后重启 EasyTier。

3. easytier-cli status 无法使用

当前 EasyTier 版本可能没有 status 命令。

可以使用:

EasyTier\easytier-cli.exe stats

或者:

EasyTier\easytier-cli.exe stun

4. 无法创建虚拟网卡

需要检查以下几点:

  1. 是否以管理员权限运行脚本
  2. 是否配置了 --ipv4
  3. 是否误用了 --no-tun
  4. EasyTier 是否正常启动
  5. 日志中是否有 TUN 或权限相关错误

5. 无法连接中间节点

检查配置:

peer_host=中间节点公网 IP 或域名
peer_port=11010

并确认中间节点防火墙放行:

TCP 11010
UDP 11010

推荐使用流程

我的使用流程如下:

  1. 准备好 EasyTier 程序目录
  2. 配置或首次运行 Start.bat
  3. 设置当前机器的 local_ipv4
  4. 等待 EasyTier 启动
  5. 查看 Peer 列表
  6. 确认所有节点都有虚拟 IP
  7. 使用 ping 测试互通
  8. 后续通过 Status.bat 查看状态
  9. 需要停止时运行 Stop.bat

总结

这次主要解决了几个问题:

  • EasyTier 节点无虚拟 IP
  • TUN 模式无法正常创建虚拟网卡
  • 后台运行不方便查看状态
  • 隐藏窗口后不方便停止程序
  • 日志不方便排查

最终通过几个批处理脚本,把 EasyTier 的启动、停止、状态查看和配置持久化都封装了起来。

整体使用体验变成:

启动:Start.bat
查看:Status.bat
停止:Stop.bat
配置:config.ini

对于 Windows 环境下长期运行 EasyTier 的场景,这种方式会方便很多。
AI总结生成

posted @ 2026-04-25 18:58  张家华  阅读(156)  评论(0)    收藏  举报