2025-04-18  2025-04-18    1377 字  3 分钟

之前使用WireGuard组网, 有时会遇到UDP被限制的情况

如果要udp2raw将UDP转为TCP发送, 那么多了一层势必要增加损耗, 并且会降低稳定性, 于是选了则EasyTier作为新的组网方案

下载

直接去 GitHub 下载最新的版本就可以

解压后会得到 cli, core, web三个文件, 本教程使用到的是cli, core两个, web是可以在网页进行配置, 但博主更喜欢编辑配置文件

将这几个文件放在 /path/to/vpn/exec/ 目录下

编辑配置文件

我的配置文件放在 /path/to/vpn/data/config.toml

这里只给出了其中一个节点的配置, 具体每个参数的作用已经在注释中给出

注意如果两个节点之间没有通过 [[peer]] 指定对方的IP来建立直接连接, 那么这两个节点就会根据配置自动选择最合适的路由, 并通过其他节点进行通信. 当然你也可以开启P2P来让EasyTier自动打洞

 1instance_name = "server-name" # 给当前机器起个名字
 2instance_id = "411d4bdf-96a7-4f89-abd6-964685d78894" # UUID, 可以直接使用 cat /proc/sys/kernel/random/uuid 获取一个
 3ipv4 = "10.0.7.1/16" # 当前机器分配的IP和网段
 4dhcp = false # 关闭DHCP
 5rpc_portal = "127.0.0.1:10001" # RPC监听, 用于查看EasyTier的组网信息, 如路由
 6listeners = [ # 监听的服务端口
 7    "tcp://0.0.0.0:10002",
 8    "tcp://[::]:10002",
 9#    "udp://0.0.0.0:10002",
10#    "udp://[::]:10002",
11    "wss://0.0.0.0:10003/",
12    "wss://[::]:10003/",
13]
14exit_nodes = []
15routes = [ # 允许那些IP的节点成为中继节点, 如果不指定那就全都允许
16    "10.0.5.1", # 允许 10.0.5.1 中转流量
17    "10.0.6.0/24", # 允许 10.0.6.0/24 网段所有机器中转流量
18    "10.0.7.0",
19]
20
21[network_identity] # 身份验证
22network_name = "akvicor-vpn" # 网络的名字
23network_secret = "xxxxxxx" # 网络的密码
24
25[flags]
26dev_name = "vpn" # 创建的虚拟网卡的名字
27enable_ipv6 = true # 是否启用IPv6
28no_tun = false # 启用虚拟网卡
29use_smoltcp = false # 使用系统提供的网络协议栈
30mtu = 1380 # 最大传输单元
31latency_first = false # 两个节点之间存在多条路径时, 是否优先选择低延迟的线路或路由来进行通信, 无论带宽和吞吐量如何
32disable_p2p = true # 关闭P2P打洞
33default_protocol = "tcp" # 默认使用TCP传输
34enable_encryption = true # 开启加密
35enable_exit_node = false # 启用出口节点
36foreign_network_whitelist = "" # 允许访问的外部网络 IP 或子网白名单
37relay_network_whitelist = "" # 允许中继的网络范围白名单, 中继服务只会针对此范围的网络流量
38relay_all_peer_rpc = false # 是否允许转发所有 Peer 的 RPC 请求
39
40[[peer]]
41uri = "tcp://1.2.3.4:10002" # 当前节点与 公网IP为1.2.3.4的节点建立直接连接
42
43[[peer]]
44uri = "tcp://2.3.4.5:10002" # 当前节点与 公网IP为2.3.4.5的节点建立直接连接

配置服务

vpn.service

这里我并没有使用官方提供的service模板, 而是使用了自己的一套模板

 1[Unit]
 2Description=vpn
 3After=network.target auditd.service syslog.target
 4ConditionFileIsExecutable=/path/to/vpn/exec/core
 5
 6[Service]
 7User=root
 8Group=root
 9StartLimitInterval=5
10StartLimitBurst=10
11ExecStart=/path/to/vpn/exec/core -c /path/to/vpn/data/config.toml
12WorkingDirectory=/path/to/vpn/data
13Restart=always
14RestartSec=15
15LimitNPROC=32768
16LimitNOFILE=1048576
17# CAP_NET_ADMIN:允许执行网络管理任务
18# CAP_NET_RAW:允许使用原始套接字(ping需要)
19# CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口
20CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE
21AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE
22
23[Install]
24WantedBy=multi-user.target

/etc/systemd/system 目录下创建 vpn.service

  • 开机自启: systemctl enable vpn
  • 启动: systemctl start vpn

查看路由

1./cli -p 127.0.0.1:10001 route

windows自启动

下载 nssm.exe 工具, 这是一个自动为可执行程序创建服务的工具i. 解压后找到适合自己系统的 nssm.exe 程序

config.toml, nssm.exe 放在 easytier 的目录, 然后执行下面的而bat脚本, 会自动创建一个名为 easytier_vpn 的服务.

 1@echo off
 2chcp 65001
 3
 4:: 获取当前批处理文件的目录并导航到该目录
 5set "CURRENT_DIR=%~dp0"
 6
 7:: 构建命令字符串
 8set COMMAND=%CURRENT_DIR%/nssm.exe install easytier_vpn "%CURRENT_DIR%/easytier-core" -c "%CURRENT_DIR%/config.toml"
 9
10
11:: 确保删除服务之前先停止它(如果存在)
12echo 正在停止并删除服务(如果存在)...
13%CURRENT_DIR%/nssm.exe stop easytier_vpn
14%CURRENT_DIR%/nssm.exe remove easytier_vpn confirm
15
16:: 执行组装好的命令
17echo 正在执行命令:%COMMAND%
18%COMMAND%
19
20:: 设置服务为延迟自动启动
21%CURRENT_DIR%/nssm.exe set easytier_vpn Start SERVICE_DELAYED_AUTO_START
22%CURRENT_DIR%/nssm.exe start easytier_vpn
23echo 服务已安装并设置为了自启动!
24pause

如果需要卸载, 可以执行下面的脚本

 1@echo off
 2chcp 65001
 3
 4:: 获取当前批处理文件的目录并导航到该目录
 5set "CURRENT_DIR=%~dp0"
 6
 7%CURRENT_DIR%/nssm.exe stop easytier_vpn
 8%CURRENT_DIR%/nssm.exe remove easytier_vpn confirm
 9echo 卸载命令执行完成!
10pause

注意: Windows默认禁止公开网络的Ping, 如果想要其他机器能ping通Windows, 需要在Windows中开启公开网络的防火墙

除另有声明外本博客文章均采用 知识共享 (Creative Commons) 署名 4.0 国际许可协议 进行许可转载请注明原作者与文章出处