zerotier使用

# 专有名词

PLANET :行星服务器,Zerotier 根服务器
MOON :卫星服务器,用户自建的私有根服务器,起到代理加速的作用
LEAF :网络客户端,就是每台连接到网络节点。
# 我们本次搭建的就是 PLANET 行星服务器

1698027491397.png

# 防火墙开放端口 4000/3180 和 9993

git clone https://github.com/Jonnyan404/zerotier-planet
OR
git clone https://gitee.com/Jonnyan404/zerotier-planet

cd zerotier-planet
ls
# LICENSE
# README.md
# docker-compose.yml
# mkmoonworld-x86_64
# patch.sh


# 修改docker-compose的MYADDR为公网ip
docker-compose up -d
# 以下步骤为创建planet和moon
docker cp mkmoonworld-x86_64 ztncui:/tmp
docker cp patch.sh ztncui:/tmp
docker exec -it ztncui bash /tmp/patch.sh
# Your ZeroTier moon id is f7261acbc5, you could orbit moon using "zerotier-cli orbit f7261acbc5 f7261acbc5"
docker restart ztncui


# 然后浏览器访问 http://ip:4000 打开web控制台界面。

    用户名: admin
    密码: mrdoc.fun

# 浏览器访问 http://ip:3180 打开planet和moon文件下载页面(亦可在项目根目录的./ztncui/etc/myfs/里获取)
# 替换官方的planet文件

# windows: C:\ProgramData\ZeroTier\One
# linux: /var/lib/zerotier-one 需要先运行一次才会出现(sudo systemctl start zerotier-one.service), 进行替换
# 如果是alpine, 需要3.17才有包, 且加入之后手动配置获取的静态ip(netmask/gateway不用配置, 只要address配置为获取的ip即可)
# 官方包:
http://download.zerotier.com/
http://download.zerotier.com/debian/buster/pool/main/z/zerotier-one/

# android客户端: https://github.com/kaaass/ZerotierFix/releases

# 替换文件之后需要重启服务, linux使用命令, win在[服务]里面

# [web端]Add network 创建网络, 获取到一个前缀和moon id一致的网络ID, 如: f7261acbc52a8047
zerotier-cli join {网络id}
zerotier-cli join f7261acbc52a8047
# 离开
zerotier-cli listnetworks
zerotier-cli leave f7261acbc52a8047

# [web端] Easy setup 配置内网ip分配, [IP assignment]就会有内网ip
# [web端] network 开启[Authorized] [Active bridge]

# 查看状态
zerotier-cli peers
# 可以看到有一个 PLANTET 和 LEAF 角色,连接方式均为 DIRECT(直连)
# 到这里就加入网络成功了

# 最后可以通过[IP assignment]的ip进行访问了
  • 配合adguard/adguardhome定义本地的域名dns, 就可以通过域名访问了

# 运行 adguard/adguardhome, 参考: docs/source/dir1/openwrt/配置openwrt国内源.md

# 增加[DNS 黑名单]策略文件

# 最后客户端使用dns服务器进行解析即可
  • docker-compose.yml

### date:2021年11月29日
### author: www.mrdoc.fun | jonnyan404
### 转载请保留来源
### update:2022年08月14日
version: '2.0'
services:
    ztncui:
        container_name: ztncui
        restart: always
        environment:
            - MYADDR=1.1.1.1 #改成自己的服务器公网IP
            - HTTP_PORT=4000
            - HTTP_ALL_INTERFACES=yes
            - ZTNCUI_PASSWD=mrdoc.fun
        ports:
            - '4000:4000' # web控制台入口
            - '9993:9993'
            - '9993:9993/udp'
            - '3180:3180' # planet/moon文件在线下载入口,如不对外提供。可防火墙禁用此端口。
        volumes:
            - './zerotier-one:/var/lib/zerotier-one'
            - './ztncui/etc:/opt/key-networks/ztncui/etc'
            # 按实际路径挂载卷, 冒号前面是宿主机的, 支持相对路径
        image: keynetworks/ztncui
  • patch.sh

#!/bin/sh
### date:2022年08月14日
### author: www.mrdoc.fun | jonnyan404
### 转载请保留来源
set -x
chmod 777 /tmp/mkmoonworld-x86_64
zerotier-idtool initmoon /var/lib/zerotier-one/identity.public > moon.json
chmod 777 moon.json
moonip="[\"${MYADDR}/9993\"]"
sed -i "s#127.0.0.1#${MYADDR}#g" moon.json
sed -i "s#\[\]#${moonip}#g" moon.json
cat moon.json
zerotier-idtool genmoon moon.json
/tmp/mkmoonworld-x86_64 moon.json

mkdir /var/lib/zerotier-one/moons.d
cp *.moon /var/lib/zerotier-one/moons.d
mv world.bin planet
cp -f planet /var/lib/zerotier-one/planet

cp *.moon planet  /opt/key-networks/ztncui/etc/myfs
moon_id=$(cat /var/lib/zerotier-one/identity.public | cut -d ':' -f1)
echo -e "Your ZeroTier moon id is \033[0;31m$moon_id\033[0m, you could orbit moon using \033[0;31m\"zerotier-cli orbit $moon_id $moon_id\"\033[0m"
docker run -itd --name myzerotier \
--network=host --cap-add NET_ADMIN \
--device /dev/net/tun \
--restart=unless-stopped \
docker.2011101.xyz/zerotier/zerotier:latest

docker exec myzerotier zerotier-cli join e3918db4831c3510
docker exec myzerotier zerotier-cli listnetworks