commit 5afe54e6eb235d9476e93b8e89cb8d3a863bd2a9 Author: wangdongpo <544209413@qq.com> Date: Sun Feb 22 23:27:51 2026 +0800 [项目初始化] diff --git a/README.md b/README.md new file mode 100644 index 0000000..10bfe94 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# ZeroTier AIO 自建 Moon + Controller + ztncui(中文版) + +## 目录说明 +/opt/zerotier-aio/ +├── docker-compose.yml 配置文件 +├── etc ztncui 数据库、配置 +├── zerotier-one ZeroTier 数据(身份、Moon、网络) +├── zerotier-aio-zh.tar 离线镜像包 +└── zt-mkworld planet 生成目录(暂未使用) + +## 快速部署 +1. 上传 zerotier-aio-zh.tar 到 /opt/zerotier-aio/ +2. chmod +x deploy-zerotier-aio.sh +3. sudo ./deploy-zerotier-aio.sh +4. 阿里云安全组放行:9993/udp、3000/tcp、3443/tcp + +## 备份与迁移 +备份: +tar -czf zerotier-aio-$(date +%Y%m%d).tar.gz /opt/zerotier-aio + +新服务器恢复: +1. 解压到 /opt/zerotier-aio +2. 修改 docker-compose.yml 中的 MYADDR 为新公网 IP +3. 如果 Moon IP 变了,需要重新生成 Moon(删除 zerotier-one/moons.d 后重新运行脚本) +4. docker load -i zerotier-aio-zh.tar +5. docker compose up -d + +## 客户端加入 +1. 手动放置 Moon 文件 或 执行: + zerotier-cli orbit +2. zerotier-cli join <网络ID> +3. Web 面板授权成员 +4. set <网络ID> allowManaged=1 + +## 注意事项 +- 密码:admin123(首次登录立即修改) +- HTTP 端口:3000(已禁用 HTTPS) +- Moon 文件为二进制,不要用文本编辑器打开 diff --git a/deploy-zerotier-aio.sh b/deploy-zerotier-aio.sh new file mode 100644 index 0000000..9944027 --- /dev/null +++ b/deploy-zerotier-aio.sh @@ -0,0 +1,116 @@ +#!/bin/bash +set -e + +echo "======================================" +echo " ZeroTier AIO 离线快速部署脚本 v2" +echo " 支持备份恢复 / 新服务器迁移" +echo "======================================" + +[ "$EUID" -ne 0 ] && { echo "请用 root 执行"; exit 1; } + +# 安装依赖 +command -v docker &>/dev/null || { + apt update -y + apt install -y docker.io docker-compose-plugin curl + systemctl enable --now docker +} + +# 检查 TUN +modprobe tun 2>/dev/null || true +[ -c /dev/net/tun ] || { echo "TUN 不可用"; exit 1; } + +# 获取公网 IP +PUBLIC_IP=$(curl -s http://100.100.100.200/latest/meta-data/eipv4 || true) +[ -z "$PUBLIC_IP" ] && PUBLIC_IP=$(ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -n1) +[ -z "$PUBLIC_IP" ] && read -p "无法自动获取公网IP,请手动输入: " PUBLIC_IP +echo "公网 IP: $PUBLIC_IP" + +INSTALL_DIR="/opt/zerotier-aio" +mkdir -p "$INSTALL_DIR" +cd "$INSTALL_DIR" + +# 如果有备份包,优先恢复 +if ls zerotier-aio-backup*.tar.gz 1>/dev/null 2>&1; then + echo "检测到备份包,正在恢复..." + tar -xzf zerotier-aio-backup*.tar.gz -C /opt +elif ls zerotier-aio-essential*.tar.gz 1>/dev/null 2>&1; then + tar -xzf zerotier-aio-essential*.tar.gz -C /opt +fi + +# 加载镜像(如果 tar 存在) +[ -f zerotier-aio-zh.tar ] && { + echo "加载本地镜像..." + docker load -i zerotier-aio-zh.tar +} + +# 生成或使用 docker-compose.yml +cat > docker-compose.yml < /tmp/moon.json + sed -i "s|\"stableEndpoints\": \[\]|\"stableEndpoints\": [\"$PUBLIC_IP/9993\"]|" /tmp/moon.json + docker exec zerotier-aio bash -c "cd /tmp && zerotier-idtool genmoon moon.json" + MOON_FILE=$(docker exec zerotier-aio find /tmp -name "*.moon" | head -n1) + mkdir -p "$MOONS_DIR" + docker cp "zerotier-aio:$MOON_FILE" "$MOONS_DIR/" + MOON_ID=$(basename "$MOON_FILE" .moon) + docker restart zerotier-aio +else + MOON_ID=$(ls "$MOONS_DIR"/*.moon | head -n1 | xargs basename | cut -d. -f1) +fi + +# 防火墙(ufw) +command -v ufw &>/dev/null && { + ufw allow 9993/udp 3000/tcp 3443/tcp + ufw reload || true +} + +cat <