EasyTier 是一个开源的轻量级组网工具,支持 UDP/TCP 穿透,可以轻松组建虚拟局域网。

但在 Windows 上,易用的 easytier-gui 不支持开机自启,在需要重启远程电脑的场景下不太方便。

本文介绍如何用 WinSW(Windows Service Wrapper)将 EasyTier 包装为 Windows 系统服务,实现开机自启、崩溃重启、后台静默运行。

项目结构

D:\easytier-service\
├── easytier\ # EasyTier 程序目录
│ ├── easytier-core.exe # 核心守护进程
│ ├── easytier-cli.exe # 命令行管理工具
│ ├── config.yaml # EasyTier 配置文件
│ ├── wintun.dll # 虚拟网卡驱动
│ ├── Packet.dll / WinDivert64.sys # 数据包转发依赖
│ └── easytier-web.exe # Web 管理界面(可选)
├── logs\ # 服务日志目录
├── easytier-cli-service.exe # WinSW 包装程序
└── easytier-cli-service.xml # 服务配置文件

注:

EasyTier 配置

easytier\config.yaml

# dhcp = true
ipv4 = "10.126.126.1"

listeners = [
"tcp://0.0.0.0:11020",
"udp://0.0.0.0:11020",
]

[network_identity]
network_name = "netname"
network_secret = "password"

[[peer]]
uri = "tcp://your.domain:11010"

[flags]
enable_encryption = true
private_mode = false

关键点:

  • ipv4:指定本机在虚拟网络中的固定 IP
  • listeners:监听 TCP/UDP 端口,用于节点间通信
  • network_identity:网络名称和密码,同一组网的节点必须一致
  • peer:初始节点地址,用于加入网络
  • enable_encryption:开启传输加密

WinSW 服务配置

WinSW(Windows Service Wrapper)是一个开源工具,可以将任何可执行程序包装为 Windows 服务。

easytier-cli-service.xml

<service>
<id>easytier-cli</id>
<name>EasyTier-cli 服务</name>
<description>EasyTier 开机自启服务,由 WinSW 管理</description>
<executable>D:\easytier-service\easytier\easytier-core.exe</executable>
<arguments>-c D:\easytier-service\easytier\config.yaml</arguments>
<workingdirectory>D:\easytier-service\easytier</workingdirectory>
<startmode>Automatic</startmode>

<onfailure action="restart" delay="10 sec"/>
<onfailure action="restart" delay="20 sec"/>
<onfailure action="reboot" />

<resetfailure>1 day</resetfailure>

<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
<logpath>D:\easytier-service\logs</logpath>
</service>

各配置项说明:

配置项 作用
<id> 服务唯一标识,net start/stop 时使用
<name> 服务显示名称,在 services.msc 中看到
<executable> 要运行的程序的完整路径
<arguments> 启动参数
<workingdirectory> 工作目录
<startmode> Automatic 表示开机自启
<onfailure> 崩溃后的恢复策略:先等 10 秒重启,再等 20 秒重启,最后重启系统
<resetfailure> 失败计数重置时间(1 天)
<log> 日志按大小滚动,每个文件 10MB,保留 8 个

安装与使用

所有操作需要管理员权限

# 安装服务
.\easytier-cli-service.exe install

# 启动服务
net start easytier-cli

# 停止服务
net stop easytier-cli

# 查看服务状态
sc query easytier-cli

# 卸载服务
.\easytier-cli-service.exe uninstall

安装完成后,服务会自动设为开机自启,也可以通过 services.msc 手动管理。

管理 EasyTier 网络

# 查看已连接的节点
.\easytier\easytier-cli.exe peer

# 查看本节点信息
.\easytier\easytier-cli.exe me

# 查看路由表
.\easytier\easytier-cli.exe route

常见问题

1. 安装时提示 “Failed to configure the failure actions. 拒绝访问。”

这是 WinSW 的一个已知问题。安装服务的流程是:

  1. CreateService — 创建服务 → 成功
  2. ChangeServiceConfig2(SERVICE_FAILURE_ACTIONS) — 设置崩溃自动重启 → 被拒绝

ChangeServiceConfig2 这个 API 在某些 Windows 版本上需要较高的权限(接近 TrustedInstaller 级别),即使以管理员身份运行也会被拒绝。

影响:服务本身正常运行、开机自启、日志记录都正常,唯一缺失的是:如果 easytier-core.exe 崩溃,不会自动重启。

解决方法(任选其一):

  • 忽略:如果 EasyTier 运行稳定,不需要自动恢复
  • 使用 scfailureflag 参数:
    sc failure easytier-cli reset=86400 actions=restart/10000
    sc failureflag easytier-cli 1

2. 服务启动失败

查看 logs\ 目录下的 .err.log 文件获取详细错误信息。常见原因:

  • wintun.dll 缺失或未正确放置
  • 配置文件中路径使用了相对路径
  • 端口被占用

3. 无法连接网络

检查确认以下配置与服务器端一致:

  • network_name
  • network_secret
  • peer 的地址和端口可达