Zerotier虚拟组网创建并添加moon服务器&一键脚本

Hexa 教程 发布于 16 天前 28 次阅读


服务端部署(Linux Moon 节点)

前提准备

  1. 一具有公网IP的服务器。
  2. 确保服务器的防火墙开放 9993 端口(UDP)。
如果你只需要一键部署脚本请移步到下面部署脚本

操作步骤

下载并安装 ZeroTier

curl -s https://install.zerotier.com/ | sudo bash

启动并设置自启

 systemctl start zerotier-one.service systemctl enable zerotier-one.service

加入网络

 zerotier-cli join <NetworkID>
替换 <NetworkID> 为实际的网络 ID,例如 63xxxxxxx

进入安装目录

cd /var/lib/zerotier-one/

生成节点配置

zerotier-idtool initmoon identity.public > moon.json

编辑 moon.json 文件: 修改 moon.json 文件中的公网 IP 为服务器的实际公网地址:

... "stableEndpoints": [ "你的公网IP/9993" ]

生成签名

 zerotier-idtool genmoon moon.json

查看生成的文件名: 记录类似 000000xxxxxx.moon 的文件名。

移动文件到 moons.d 目录

mkdir moons.d mv 000000xxxxxx.moon moons.d/

重启 ZeroTier 服务

systemctl restart zerotier-one

导出 .moon 文件: 将 .moon 文件下载到本地,发放到需要的服务器进行配置。


客户端部署(Win&linux&android)

操作步骤

  1. 安装 ZeroTier 客户端
  2. 进入安装目录
    • 默认路径为: C:\ProgramData\ZeroTier\One
  3. 创建 moons.d 文件夹
    • 在上述路径下创建 moons.d 文件夹,需要管理员权限。
  4. 放入 .moon 文件
    • 将从服务端导出的 .moon 文件复制到 moons.d 文件夹下。
  5. 重启 ZeroTier 服务
    • Win + R,输入 services.msc 打开服务管理。
    • 找到 ZeroTier One 服务,右键选择重启。
  6. 检查配置:
    • 以管理员权限打开 cmd,运行zerotier-cli peers
    • 如果输出中包含 moon 字段,则配置成功。

linux导入节点与前面的moon部署方法相似,到安装完这一步后直接将准备好的moon文件放入moons.d即可

安卓由于官方客户端无法导入,所以请下载zerotier-fix,安装后选择入轨,导入上面提到的000000xxx.moon文件或输入moon名称和种子(一般与moon文件同名即可)进行导入

iOS暂时没有可以使用的自定义客户端

部署脚本

服务端部署脚本(Linux)

首先执行vim deploy_moon.sh,将以下脚本保存并执行:

#!/bin/bash

# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then
    echo "请以 root 用户运行此脚本!"
    exit 1
fi

# 安装 ZeroTier
curl -s https://install.zerotier.com/ | sudo bash

# 启动并设置服务自启
systemctl start zerotier-one.service
systemctl enable zerotier-one.service

# 提示用户输入 NetworkID
echo "请输入要加入的 ZeroTier 网络 ID:" 
read NETWORK_ID
zerotier-cli join $NETWORK_ID

# 进入安装目录
cd /var/lib/zerotier-one/

# 生成节点配置文件
zerotier-idtool initmoon identity.public > moon.json

# 配置公网 IP
echo "请输入服务器的公网 IP 地址:" 
read PUBLIC_IP
sed -i "s/\"stableEndpoints\":.*/\"stableEndpoints\": [\"$PUBLIC_IP\/9993\"]/" moon.json

# 生成签名
zerotier-idtool genmoon moon.json

# 创建 moons.d 目录并移动文件
mkdir -p moons.d
MOON_FILE=$(ls *.moon)
mv $MOON_FILE moons.d/

# 重启服务
systemctl restart zerotier-one

echo "Moon 节点部署完成!"
echo "请从以下路径下载 .moon 文件并配置到其他主机:"
echo "/var/lib/zerotier-one/moons.d/$MOON_FILE"

运行脚本 sudo bash deploy_moon.sh

客户端脚本(Windows)

创建新的文本文件,将文件名及后缀改为add_moon.bat,保存并以管理员权限运行

@echo off
:: 检查是否以管理员权限运行
net session >nul 2>&1
if %errorlevel% neq 0 (
    echo 请以管理员权限运行此脚本!
    pause
    exit /b
)

:: 配置路径变量
set ZT_PATH=C:\ProgramData\ZeroTier\One
set /p MOON_FILE=请输入 .moon 文件的完整路径: 

:: 检查 ZeroTier 安装目录
if not exist "%ZT_PATH%" (
    echo ZeroTier 安装目录未找到!
    pause
    exit /b
)

:: 创建 moons.d 目录
if not exist "%ZT_PATH%\moons.d" (
    mkdir "%ZT_PATH%\moons.d"
    echo 已创建 moons.d 目录。
) else (
    echo moons.d 目录已存在。
)

:: 检查输入的 .moon 文件路径
if not exist "%MOON_FILE%" (
    echo 无法找到 %MOON_FILE% 文件,请检查路径是否正确。
    pause
    exit /b
)

:: 复制 .moon 文件到 moons.d
copy "%MOON_FILE%" "%ZT_PATH%\moons.d\"
if %errorlevel% neq 0 (
    echo 复制 .moon 文件失败!
    pause
    exit /b
)

:: 重启 ZeroTier 服务
sc stop "ZeroTierOneService"
if %errorlevel% neq 0 (
    echo  ZeroTier 服务强制停止,尝试直接启动服务...
)
pause
sc start "ZeroTierOneService"
if %errorlevel% neq 0 (
    echo 启动 ZeroTier 服务失败!重试中
)

echo ZeroTier 配置已更新并生效。

:: 验证配置是否生效
echo 检查路由表中是否包含 moon...
zerotier-cli peers

pause

完成后若显示对应id的moon服务器,或者也可以自己在管理员模式下启动cmd执行zerotier-cli peers,显示对应id的moon服务器则说明成功