本文最后更新于 2025-01-01,文章内容可能已经过时。

Zerotier 搭建私有根服务器及创建虚拟局域网

Zerotier的Moon服务器搭建 - liuyun的博客

简介

ZeroTier 是一个开源的虚拟网络平台,它允许设备通过一个虚拟局域网(VLAN)连接到互联网上的其他设备,尽管这些设备可能位于不同的物理位置。ZeroTier 通过创建一个虚拟的、加密的点对点网络,让设备能够相互通信,就像它们都在同一个本地网络中一样。

“Moon 服务器”是 ZeroTier 的一个重要概念,通常与 ZeroTier 网络的连接管理相关。简单来说,Moon 是 ZeroTier 网络中的一个特殊节点,充当网络的中继服务器,提供以下功能:

  1. 中继功能:Moon 服务器充当一个信号转发点,帮助不直接可达的设备之间建立连接,特别是在 NAT(网络地址转换)或防火墙配置较复杂的网络环境中。

  2. 增强连接性:在某些情况下,设备之间的直接连接可能会受到防火墙或 NAT 的阻碍,Moon 服务器可以作为中介来帮助它们建立连接,尤其是在 P2P(点对点)无法直接建立连接时。

  3. 独立的服务:Moon 服务器并不依赖于 ZeroTier 的中央服务器进行管理或身份验证,因此可以帮助用户搭建独立的、自主管理的 ZeroTier 网络。

Moon服务器搭建

准备工作

开放端口9993,UDP

安装Zerotier

curl -s https://install.zerotier.com | sudo bash
sudo systemctl start zerotier-one
sudo systemctl enable zerotier-one
sudo zerotier-cli join [NETWORK_ID]

成功加入后能在管理中心看到设备,本地查看如下:

使用IPV6搭建Moon服务器

# 进入默认安装目录
cd /var/lib/zerotier-one
# 生成public公钥
zerotier-idtool generate identity.public
# 创建一个空目录
mkdir ~/data/zerotier-moon && cd ~/data/zerotier-moon
# 复制公钥到目录
cp /var/lib/zerotier-one/identity.public ~/data/zerotier-moon/
# 生成配置文件
zerotier-idtool initmoon identity.public >> moon.json

编辑配置文件

nano moon.json

在配置文件中的"stableEndpoints": []中写入云服务器公网ip/9993写好后需要在云服务器上放行9993端口流量,下图后一个9993端口是ipv6地址,可以不写

作者使用的是动态ipv6搭建,因此需要使用脚本与cron定时获取ipv6更新到moon.json

脚本get_ipv6.sh如下

#!/bin/bash
# 获取当前的全球可路由 IPv6 地址
current_ipv6=$(ip -6 addr show dev wlp4s0 | grep "inet6" | grep "global temporary" | awk '{print $2}' >

# 检查是否找到了有效的全球可路由 IPv6 地址
if [ -n "$current_ipv6" ]; then
    # 目标 JSON 配置文件路径
    moon_config="./moon.json"
    # 使用 sed 命令更新 stableEndpoints 字段
    sed -i "s|\"stableEndpoints\": \[\"[^\"]*\"\]|\"stableEndpoints\": [\"$current_ipv6/9993\"]|" "$mo>
    # 打印更新后的结果
    echo "Updated Moon stableEndpoints to $current_ipv6/9993"
    # 生成配置
    zerotier-idtool genmoon "$moon_config"
    echo "Generated new Moon configuration with zerotier-idtool."
    # 执行moon命令,将配置文件移动到moons.d
    sudo mv /home/moon/data/zerotier-moon/000000b464f6d1f1.moon /var/lib/zerotier-one/moons.d
    echo "Moved 000000b464f6d1f1.moon to moons.d/"
    # 可选:重启 ZeroTier 服务(如果需要)
    sudo systemctl restart zerotier-one
    echo "Restarted ZeroTier service."
else
    echo "No global IPv6 address found"
fi

将脚本添加到定时任务:

crontab -e

添加以下内容:

0 * * * * /home/moon/data/zerotier-moon/get_ipv6.sh

每个小时就会执行该脚本获取ipv6并更新moon配置文件

moon的设备号既是b464f6d1f1,可以使用zerotier-cli info 查询

在其他设备安装zerotier并加入moon服务器节点

安装后使用zerotier-cli orbit b464f6d1f1 b464f6d1f1添加进网络

随后使用zerotier-cli peers可以查看,至此大功告成