ZeroTier

piaoxue888 2023-6-8 970

一、简介

ZeroTier 是一个跨平台、虚拟局域网软件(不需要公网 IP,不依赖服务端网络性能

1、注册(免费套餐能连接 25个设备

https://accounts.zerotier.com/auth/realms/zerotier/protocol/openid-connect/registrations?client_id=zt-central&redirect_uri=https%3A%2F%2Fmy.zerotier.com%2Fapi%2F_auth%2Foidc%2Fcallback&response_type=code&scope=openid+profile+email+offline_access&state=state

2、下载安装

https://www.zerotier.com/download/

https://download.zerotier.com/

https://github.com/kaaass/ZerotierFix         #修改官方apk,允许加入moon

3、管理

https://my.zerotier.com/network

 

二、搭建私有planet(解除官方的设备连接数限制;提升手机客户端连接的稳定性)

planet:核心角色,官方不允许自建私有,zerotier 的行星服务器,用于管理全球所有的 zerotier 客户端的地址信息,帮助建立客户端间的直接链接,以及在无法建立直接链接时,作为中继服务器转发设备间的流量。

https://zhuanlan.zhihu.com/p/573746661

1、搭建私有 planet 

docker run -d \
--name zt-ui \
-v /home/docker/zt-ui/zerotier-one:/var/lib/zerotier-one \
-v /home/docker/zt-ui/ztncui/etc:/opt/key-networks/ztncui/etc \
-p 4000:4000 \
-p 9993:9993 \
-p 9993:9993/udp \
-e MYADDR=1.1.1.1 \                                        #1.1.1.1公网
-e HTTP_PORT=4000 \
-e HTTP_ALL_INTERFACES=yes \
-e ZTNCUI_PASSWD=admin123 \
--restart=always \
hausen1012/ztncui

docker exec -it zt-ui bash /tmp/patch.sh && \             #生成 planet 文件
docker restart zt-ui

docker exec -it zt-ui zerotier-cli listmoons              #测试
# 显示如下内容则表示搭建成功
[
 {
  "id": "00000004e3b1b4b0",
  "roots": [
   {
    "identity": "04e3b1b4b0:0:ea0c548b45efcc701c052305f06568c749a4647b9a5b111e2b372c05f7c3ed56ae1009c29cb1aa51d95057bf1b65b3a2f7b01d129437f6b72efd08f68281fb52",
    "stableEndpoints": [
     "1.1.1.1/9993"
    ]
   }
  ],
  "signature": "b4f539ef93e198203d9e270c155d091769408ff98489d83bcf6444d2a95112ca7369138b98d42512caa3c878f3eff2c27ecada28f549ea19e3a407e71bbeb008d51f6ba92af17e8b6e4c1b8eacbd4abc42f0f639746ea924cffb99b539f94e2b",
  "timestamp": 1665642068786,
  "updatesMustBeSignedBy": "7fcb120079801a1ddde8c1fb6657365351bca7279e8470728f4cf01fb5efc81b57cde03338b4ea76dfd39570f74f2654d8d52a22613e77ed2e4cbb46a648a42d",
  "waiting": false
 }
]

2、访问 http://公网ip:4000,账号密码:admin/admin123

3、客户端配置

docker run -d \
--name=zt-cli \
--device=/dev/net/tun \
--net=host \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN -d \
-v /home/docker/zt-client/zerotier-one:/var/lib/zerotier-one \
--restart unless-stopped \
hausen1012/zerotier
将服务器下载的 planet 文件上传到客户端的 /home/docker/zt-client/zerotier-one 目录
docker restart zt-cli                               #重启客户端
docker exec -it zt-cli zerotier-cli listpeers       #查看 planet
docker exec -it zt-cli zerotier-cli join 8b8b9ed58a10bd45    #加入网络
把服务器上的planet文件覆盖客户端C:\ProgramData\ZeroTier\One
net start ZeroTierOneService
net stop ZeroTierOneService
zerotier-cli.bat listpeers                                     #查看planet
C:\ProgramData\ZeroTier\One\zerotier-one_x64.exe -q listpeers  #查看planet

 

教程使用Ubuntu Server 24.04),OpenSSH、WinSCP、Xshell或别的任意一款远程工具

##zerotier安全组说明
#ztncui Web控制面板使用的端口TCP:3443
# Zerotier节点与控制器通讯的端口TCP:9993
#MOON节点与控制器通讯的中继端口UDP:9993

# 更新服务器缓存和软件依赖
sudo apt update
sudo apt upgrade
# 下载c++需要的编译环境
sudo apt install gcc gcc-c++ vim wget git -y
# 如果需要使用json编辑器
sudo apt install json-devel -y

#下载安装ZeroTier和ztncui
#ztncui 需要在同一台机器上安装ZeroTier One 。它将作为网络控制器运行以建立 ZeroTier 网络。
#ztncui 是在 Linux 平台上开发的,并且期望 ZT 主目录位于/var/lib/zerotier-one。
curl -s https://install.zerotier.com | sudo bash
curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.8.14_amd64.deb
sudo apt install ./ztncui_0.8.14_amd64.deb

#配置ztncui
sudo sh -c "echo ZT_TOKEN=`sudo cat /var/lib/zerotier-one/authtoken.secret` > /opt/key-networks/ztncui/.env"   #authtoken.secret里的字符串
sudo sh -c "echo HTTPS_HOST=127.0.0.1 >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo HTTPS_PORT=3443 >> /opt/key-networks/ztncui/.env"                       #默认是 TCP port 3000
sudo sh -c "echo NODE_ENV=production >> /opt/key-networks/ztncui/.env"
#sudo sh -c "echo "ZT_ADDR=127.0.0.1:9993 >> /opt/key-networks/ztncui/.env"            #默认是 localhost:9993
#sudo sh -c "echo HTTP_ALL_INTERFACES=yes >> /opt/key-networks/ztncui/.env"         #使应用程序监听所有接口的 HTTP 请求,http是未加密的

#授予权限
sudo chmod 400 /opt/key-networks/ztncui/.env
sudo chown ztncui.ztncui /opt/key-networks/ztncui/.env
sudo systemctl restart ztncui

#访问ztncui的WebUI,创建网络ID
https://192.168.1.7:3443(举例)
首次登录账号:admin,密码:password

#查看字符串
sudo zerotier-cli join 网络ID
sudo more /var/lib/zerotier-one/identity.public

#获取ZeroTier源码,切换文件夹目录,修改mkworld.cpp
cd ZeroTierOne/attic/world
sudo vim mkworld.cpp
// 自己的
roots.push_back(World::Root());
roots.back().identity = Identity("字符串");  #根服务器的identity.public里的字符串C:\ProgramData\ZeroTier\One\identity.public或/var/lib/zerotier-one/identity.public
roots.back().stableEndpoints.push_back(InetAddress("14.103.249.84/9993"));#根服务器的公网ipv4
//roots.back().stableEndpoints.push_back(InetAddress("2407:c080:801:fffe::3ccc:f8e4/9993"));#根服务器的公网ipv6


#编译修改好的mkworld.cpp
source ./build.sh
./mkworld
mv ./world.bin ./planet

#将编译好的planet文件分发到每个设备,重启服务生效
cp -r ./planet /var/lib/zerotier-one
Windows Planet文件位置:C:\ProgramData\ZeroTier\One
Linux Planet文件位置:/var/lib/zerotier-one

 

三、搭建moon

moon:官方允许自建私有,作为离客户端更近的中继服务器存在,可以使转发的效率更高,需要一个具有公网 IP 地址的服务器以及开放 UDP 9993 端口,是通过 UDP 打洞实现的。

1、 Linux下搭建moon

curl -s https://install.zerotier.com | sudo bash
cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public >>moon.json
"stableEndpoints": ["60.204.248.228/9993","2407:c080:801:fffe::3ccc:f8e4/9993"]  #60.204.248.228和2407:c080:801:fffe::3ccc:f8e4是你服务器公网IP的ip4和ip6,9993是UDP端口(防火墙注意放行)
sudo zerotier-idtool genmoon moon.json 
mkdir moons.d
mv 000000ddb0158c86.moon /moons.d/ #请输入自己的文件名,或者用tab自动补全
/etc/init.d/zerotier restart
zerotier-cli listpeers

2、 Windows下搭建moon

注意如果服务器是win server系统,只能选择1.6.6版本安装,官方的后续版本都不支持server系统。
https://download.zerotier.com/RELEASES/1.6.6/dist/ZeroTierOne.msi

cd C:\ProgramData\ZeroTier\One\
zerotier-one_x64.exe -i initmoon identity.public >>moon.json
"stableEndpoints": ["60.204.248.228/9993","2407:c080:801:fffe::3ccc:f8e4/9993"]  #60.204.248.228和2407:c080:801:fffe::3ccc:f8e4是你服务器公网IP的ip4和ip6,9993是UDP端口(防火墙注意放行)

#生成MOON签名,如果未生成相应文件,检查上一步的标点符号""格式是否正确,最好从原文中复制
zerotier-one_x64.exe -i genmoon moon.json
                 
md moons.d
xcopy 0000005d45b4cf37.moon C:\ProgramData\ZeroTier\One\moons.d\

#运行下列命令重启服务生效,或打开任务管理器选择服务ZeroTierOneService重启即可
net stop ZeroTierOneService
net start ZeroTierOneService

#查询<ZeroTier Moon ID>,以便客户端连接,5d45b4cf37就是id
zerotier-one_x64.exe -q info
200 info 5d45b4cf37 1.6.6 ONLINE

3、客户端配置

window客户端
https://download.zerotier.com/RELEASES/1.14.1/dist/ZeroTierOne.msi
cd C:\ProgramData\ZeroTier\One\
zerotier-one_x64.exe -q orbit 5d45b4cf37 5d45b4cf37   #连接moon,zerotier-cli orbit <world ID> <seed>
zerotier-one_x64.exe -q listpeers     #检查是否成功连接moon服务器

安卓手机客户端
https://github.com/kaaass/ZerotierFix/releases
保存服务器生成的0000005d45b4cf37.moon到安卓手机,然后点击moon入轨,从文件导入即可,若成功可从结点列表看到moon中转信息。
最新回复 (10)
  • piaoxue888 6月前
    引用 2

    问题汇总

    问题一:zerotier自建ztncui一直卡局域网无法发现

    解决:把zerotier网卡提前,通过改网络跳点就可以解决了

     

    问题二:在尝试访问ztncui第三方控制器http://服务器IP:3443时遇到问题,使用https://IP:3443/login成功登录,具体原因不明。

     

    问题三:托盘图标程序闪退

    解决:卸载后,检查下面三个文件夹是否删除干净,特别是C:\Program Files (x86)\ZeroTier的权限问题(用IObit Unlocker 1.3.0或者火绒里的文件粉碎工具来删除zerotier-cli.bat和zerotier-idtool.bat这两个顽固文件)
    C:\ProgramData\ZeroTier
    C:\Program Files (x86)\ZeroTier             
    C:\Users\用户名\AppData\Local\ZeroTier

  • piaoxue888 6月前
    引用 3

    ztncui-aio
    https://gitcode.com/gh_mirrors/ztn/ztncui-aio
    https://github.com/kmahyyg/ztncui-aio.git

    ztncui-aio 是一个将 ZeroTier One 和 ztncui 整合到一个 Docker 容器中的强大解决方案。它提供了一个独立的 Web 界面来管理您的网络,使得创建和管理 ZeroTier 虚拟网络变得简单快捷。该项目基于 ZeroTier 网络控制器的轻量级用户界面容器化实现,支持一键构建和运行,无需复杂的服务器配置。

    1、安装 Docker 和 Docker Compose

    2、安装ztncui-aio
    git clone https://github.com/key-networks/ztncui-aio.git
    cd ztncui-aio
    docker-compose up -d

    3、访问
    http://localhost:3000

  • piaoxue888 6月前
    引用 4

    支持win系统的控制器

    https://github.com/mokeyish/zerotier-edge

    https://docs.zerotier.com/controller/ 这是官方命令行

    ZeroTier 创建一个网络,其实就是创建一个 controller ,这个 controller 相当于一个节点。默认情况就是 ZeroTier 官方提供机器,但是这个机器会掉线(见 ZeroTierOne/issues/1757),掉线的时候,我们的整个网络哪怕都可以 p2p 连接到,但是设备之间依旧无法 ping(因为没有网络控制器完成鉴权,分配 IP)。

    zerotier-edge把自己的一个设备变成网络控制器,用 Rust + SolidJs 编写,主要特性就是:
    方便,一个命令就可以启动
    轻量,仅一个小于 5M 二进制程序
    无 docker
    无 数据库,和 ZeroTier 一样,直接用 json 存储在文件目录。

    https://github.com/mokeyish/zerotier-edge/releases/download/0.1.6/zerotier-edge-x86_64-pc-windows-msvc.zip
    
    C:\ProgramData\ZeroTier\One>zerotier-edge
    2024-10-17T02:24:51.803343Z  INFO zerotier_edge: =>    zerotier api: http://localhost:9993
    2024-10-17T02:24:51.803665Z  INFO zerotier_edge: =>    working_directory: "\\\\?\\C:\\ProgramData\\ZeroTier\\One"
    2024-10-17T02:24:51.805132Z  INFO zerotier_edge: =>    listening on http://[::1]:9394
    
    网页访问http://[::1]:9394,输入C:\ProgramData\ZeroTier\One\authtoken.secret里的字符串dnoi9eqbcn14fzwxpnwf6l5o,即可进去管理
    
    创建一个网络Create A Network,
    客户端加入网络,
    在网页上找到Members,选中打勾,选择旁边的编辑,选中Allow Ethernet Bridging打勾,客户端就可以访问了。

     

     

     

     

  • piaoxue888 6月前
    引用 5

    https://88888889.xyz/planet

    https://88888889.xyz/0000005d45b4cf37.moon

  • piaoxue888 6月前
    引用 6

    zerotier 添加路由

    假设zerotier虚拟局域网的网段是192.168.88.0 局域网A 192.168.1.0 局域网B 192.168.2.0

    (如果需要互联)在局域网A和B中需要各有一台主机安装zerotier并作为两个内网互联的网关

    分别是192.168.1.10(192.168.88.10) 192.168.2.10(192.168.88.20)#括号里面为虚拟局域网的IP地址

    #如果单向连接,仅需填写下方一个即可.

    192.168.1.0/24 via 192.168.88.10

    192.168.2.0/24 via 192.168.88.20

     

    ipconfig

    route print -4

  • piaoxue888 6月前
    引用 7

    控制器 官方命令行

    获取Node ID
    C:\ProgramData\ZeroTier\One>zerotier-one_x64.exe -q info
    200 info 8a5bc2e5e9 1.14.1 ONLINE
    C:\ProgramData\ZeroTier\One>zerotier-one_x64.exe -q info | cut -d " " -f 3
    8a5bc2e5e9
    
    创建网络
    curl -X POST "http://localhost:9993/controller/network/${NODEID}______" -H "X-ZT1-AUTH: ${TOKEN}" -d {}
    
    网络列表
    curl "http://localhost:9993/controller/network" -H "X-ZT1-AUTH: ${TOKEN}"
    
    网络信息
    curl "http://localhost:9993/controller/network/${NWID}" -H "X-ZT1-AUTH: ${TOKEN}"
    
    网络成员列表
    curl "http://localhost:9993/controller/network/${NWID}/member" -H "X-ZT1-AUTH: ${TOKEN}"
    
    成员信息
    curl "http://localhost:9993/controller/network/${NWID}/member/${MEMID}" -H "X-ZT1-AUTH: ${TOKEN}"
    
    配置网络
    curl -X POST "http://localhost:9993/controller/network/${NWID}" -H "X-ZT1-AUTH: ${TOKEN}" \
        -d '{"ipAssignmentPools": [{"ipRangeStart": "192.168.192.1", "ipRangeEnd": "192.168.192.254"}], "routes": [{"target": "192.168.192.0/24", "via": null}], "v4AssignMode": "zt", "private": true }'
    
    允许成员连接
    curl -X POST "http://localhost:9993/controller/network/${NWID}/member/${MEMID}" -H "X-ZT1-AUTH: ${TOKEN}" -d '{"authorized": true}'
    禁止成员连接
    curl -X POST "http://localhost:9993/controller/network/${NWID}/member/${MEMID}" -H "X-ZT1-AUTH: ${TOKEN}" -d '{"authorized": false}'
    删除成员(删除之前,需要先禁止成员连接)
    curl -X DELETE "http://localhost:9993/controller/network/${NWID}/member/${MEMID}" -H "X-ZT1-AUTH: ${TOKEN}"
    
    查看结点信息
    C:\ProgramData\ZeroTier\One>zerotier-one_x64.exe -q listnetworks
    200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
    200 listnetworks 5d45b4cf37aa8147 piaoxue 46:0b:f1:f5:2a:5d OK PRIVATE ethernet_32776 10.10.10.161/24
    
    备份控制器
    保存C:\ProgramData\ZeroTier\One\目录下的identity.secret文件和controller.d文件夹 
    
    删除控制器
    删除C:\ProgramData\ZeroTier\One\目录下的controller.d文件夹 
    
    

     

  • piaoxue888 6月前
    引用 8

    备份

    # 用root身份运行如下命令

    cd /

    tar --lzma -cf root/zerotier-one.tar.lzma var/lib/zerotier-one

    tar --lzma -cf root/ztncui.tar.lzma opt/key-networks/ztncui

  • piaoxue888 6月前
    引用 9

    恢复

    # 先把备份文件上传到服务器/root目录中

    # 再用root身份运行如下命令

    cd /

    tar --lzma -xvf root/zerotier-one.tar.lzma

    tar --lzma -xvf root/ztncui.tar.lzma

  • piaoxue888 6月前
    引用 10

    https://blog.hitushen.cn/archives/1707011959995

  • piaoxue888 6月前
    引用 11

    https://github.com/thedunston/go_cli_zt

返回
发新帖