504 字
3 分钟
自动更新Zerotier Moon

简介#

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

Windows#

  1. 将以下内容新建为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>
  2. 打开Windows的任务计划程序,将zerotier moon.xml文件导入。并将执行的用户调整为SYSTEM(静默执行)

任务计划程序

  1. 根据实际需要调整触发器,默认在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 restart
fi

其它客户端#

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

自动更新Zerotier Moon
https://blog.firpe.cn/posts/自动更新zerotier-moon/
作者
发布于
2025-08-23
许可协议
CC BY-NC-SA 4.0