内网穿透方案(一)Zerotier自建IPV6 Moon根服务器
本文最后更新于 2025-01-01,文章内容可能已经过时。
Zerotier的Moon服务器搭建 - liuyun的博客
简介
ZeroTier 是一个开源的虚拟网络平台,它允许设备通过一个虚拟局域网(VLAN)连接到互联网上的其他设备,尽管这些设备可能位于不同的物理位置。ZeroTier 通过创建一个虚拟的、加密的点对点网络,让设备能够相互通信,就像它们都在同一个本地网络中一样。
“Moon 服务器”是 ZeroTier 的一个重要概念,通常与 ZeroTier 网络的连接管理相关。简单来说,Moon 是 ZeroTier 网络中的一个特殊节点,充当网络的中继服务器,提供以下功能:
中继功能:Moon 服务器充当一个信号转发点,帮助不直接可达的设备之间建立连接,特别是在 NAT(网络地址转换)或防火墙配置较复杂的网络环境中。
增强连接性:在某些情况下,设备之间的直接连接可能会受到防火墙或 NAT 的阻碍,Moon 服务器可以作为中介来帮助它们建立连接,尤其是在 P2P(点对点)无法直接建立连接时。
独立的服务: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
可以查看,至此大功告成
- 感谢你赐予我前进的力量