自动更新Zerotier Moon

简介

  • 在没有固定公网IP,但支持ddns的家用网络环境中,部署Moon节点服务,并使用此服务作为中继。
  • 在公网IP发生变动后,无论是服务端还是客户端,都会在尽量短的时间内进行自动调整,保持Moon中继节点的正常连接。

Windows

  1. 将以下内容新建为zerotier moon.xml文件,并将其中的9d2cxxxxxx更改为当前Moon节点的ID。
zerotier moon.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2024-01-11T15:59:55.0333691</Date>
<Author>Pacifica_Frma\Ciccaba</Author>
<Description>更新 Zerotier Moon 配置</Description>
<URI>\zerotier moon</URI>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>2025-04-25T07:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-18</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>true</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>6</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat"</Command>
<Arguments>deorbit 9d2cxxxxxx</Arguments>
</Exec>
<Exec>
<Command>"C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat"</Command>
<Arguments>orbit 9d2cxxxxxx 9d2cxxxxxx</Arguments>
</Exec>
</Actions>
</Task>
  1. 打开Windows的任务计划程序,将zerotier moon.xml文件导入。并将执行的用户调整为SYSTEM(静默执行)

任务计划程序

  1. 根据实际需要调整触发器,默认在6:00后开机触发命令执行。

Linux

可参考以下命令,对不同的Linux系统版本和安装路径,应按实际情况进行调整:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# 指定对外域名
check_domain=moon.example.com

# 获取新的 IP 地址
new_ip=$(ping -c 1 $check_domain | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)

# 读取文件中的旧 IP 地址
old_ip=$(/root/shell/old.ip| grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | head -n 1)

# 比较新旧 IP 地址是否相同
if [ "$old_ip" != "$new_ip" ]; then
# 将下列命令中的`9d2cxxxxxx`更改为你当前Moon节点的ID。
zerotier-cli deorbit 9d2cxxxxxx
zerotier-cli orbit 9d2cxxxxxx 9d2cxxxxxx
echo $new_ip > /root/shell/old.ip
# 理论上无需重启服务,若遇到更新异常可酌情设置
#service zerotier restart
fi

其它客户端

这里的实现原理其实很简单。 理论上,所有客户端都可以通过“退出Moon-加入Moon”的两步操作来刷新为最新的Moon节点状态,因为我暂时不需要在IOS与Android系统下接入ZeroTier网络,所以就不做测试了,有需要的可自行研究。


自动更新Zerotier Moon
http://example.com/2025/08/23/自动更新Zerotier-Moon/
作者
Fir
发布于
2025年8月23日
许可协议