504 字
3 分钟
自动更新Zerotier Moon
简介
- 在没有固定公网IP,但支持ddns的家用网络环境中,部署Moon节点服务,并使用此服务作为中继。
- 在公网IP发生变动后,无论是服务端还是客户端,都会在尽量短的时间内进行自动调整,保持Moon中继节点的正常连接。
Windows
-
将以下内容新建为
zerotier moon.xml文件,并将其中的9d2cxxxxxx更改为当前Moon节点的ID。zerotier moon.xml
<?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> -
打开Windows的任务计划程序,将
zerotier moon.xml文件导入。并将执行的用户调整为SYSTEM(静默执行)

- 根据实际需要调整触发器,默认在6:00后开机触发命令执行。
Linux
可参考以下命令,对不同的Linux系统版本和安装路径,应按实际情况进行调整:
#!/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 restartfi其它客户端
这里的实现原理其实很简单。 理论上,所有客户端都可以通过“退出Moon-加入Moon”的两步操作来刷新为最新的Moon节点状态,因为我暂时不需要在IOS与Android系统下接入ZeroTier网络,所以就不做测试了,有需要的可自行研究。
自动更新Zerotier Moon
https://blog.firpe.cn/posts/自动更新zerotier-moon/