ZeroTier 介绍

ZeroTier 是一款强大的 P2P 工具,它能让你在互联网上搭建属于自己的虚拟局域网。通过它,你可以轻松实现远程访问家中设备的需求 - 比如在公司用手机直接访问家里的 NAS。最重要的是,设备之间是点对点直连的,无需经过中转服务器,既保证了速度,又提升了安全性。

它的工作原理是这样的:通过 ZeroTier One 客户端,在不同设备(如笔记本、手机、服务器等)之间建立 P2P 连接,即使这些设备都在 NAT 后面也没问题。它使用了 STUN 等技术,可以穿透大多数类型的 NAT,实现设备间的直接通信。如果实在无法直连,才会通过中转服务器进行通信。

简单来说,ZeroTier 就像是一个跨越互联网的"虚拟交换机",让分布在世界各地的设备,都能像在同一个局域网内一样方便地相互访问。和 Tailscale 类似,Zerotier 同样也可以实现网络控制器以及根服务器的自部署,只不过以前我们只能自建卫星服务器(Moon 服务器)以及网络控制器,而现在则可以实现自部署根服务器(行星服务器),这样你完全不需要注册官方的 Zerotier 的任何账号也可以实现整个虚拟局域网的自建。

ZeroTier 网络中的关键概念

PLANET(行星服务器):ZeroTier 网络的核心根服务器,负责网络发现和初始连接。相当于整个网络的"中枢"。

MOON(卫星服务器):用户可以自建的私有根服务器。它可以作为区域性的代理节点,帮助就近的设备更快地建立连接,提升网络性能。

LEAF(叶子节点):所有接入 ZeroTier 网络的终端设备,如电脑、手机、服务器等。这些设备通过 PLANET 和 MOON 的协调来相互发现和通信。

本教程将指导您搭建一个私有的 PLANET 服务器,让您完全掌控自己的 ZeroTier 网络。

为什么要自建 PLANET 服务器:

  1. 提升网络稳定性:官方服务器位于海外,国内用户访问延迟高且不稳定。自建服务器可以大幅提升连接质量。
  2. 加快连接速度:本地化的 PLANET 服务器可以更快地帮助设备建立 P2P 连接。
  3. 增强网络控制:自建服务器让您完全掌控网络配置,可以根据需求进行优化调整。
  4. 提高安全性:私有化部署意味着网络流量不经过第三方服务器,更加安全可靠。
  5. 降低依赖:避免因官方服务器故障或网络波动影响您的业务正常运行。

开始部署

购买服务器

首先第一件事就是购买一台国内云服务提供的云服务器,整体规格上「1 核 2G」或者「2 核 2G」就可以,最重要的需要有一个公网 IP 方便进行设备管理。

安装Git、docker并启动docker

# debian 系检查更新
apt update

# debian 系无需确认安装 git
apt install -y git

# 通过 docker 官方源安装 docker
curl -fsSL https://get.docker.com |bash

# 通过 systemd 启动 docker 服务
systemctl start docker
# red hat 系检查更新
yum update

# red hat 系无需确认安装 git
yum install git -y

# 通过 docker 官方源安装 docker
curl -fsSL https://get.docker.com |bash

# 通过 systemd 启动 docker 服务
systemctl start docker

下载 xubiaolin 制作的自建行星服务器安装脚本

官方地址

git clone https://github.com/xubiaolin/docker-zerotier-planet.git

加速地址

git clone https://ghproxy.imoyuapp.win/https://github.com/xubiaolin/docker-zerotier-planet.git

执行安装脚本

进入克隆下来的项目目录

cd docker-zerotier-planet

运行项目脚本

./deploy.sh

根据提示来选择即可,操作完成后会自动部署

欢迎使用zerotier-planet脚本,请选择需要执行的操作:
1. 安装
2. 卸载
3. 更新
4. 查看信息
5. 退出
请输入数字:

脚本会给出相关的提示选择,这里直接输入 1 回车来安装,安装过程中要你输入相应的端口,这里全部选择默认即可。安装成功脚本会有提示登录zerotier控制台进行设置及会生成对应的moon配置和planet配置文件。

zerotier控制台.png

可以访问控制台说明安装成功

请根据选择的端口号和脚本提示去服务器防火墙放行相对应的端口

新建网络

访问控制台使用默认账号为:admin默认密码为:password进行登录

成功登录之后选择Add netWork,给新建的网络命名一个名称,然后点击Create Network

创建网络.png

创建成功后系统会自动生成一个网络ID,这个ID在后续客户端配置时会用到,请记录下来。

网络id.png

其中(342b....)这串数据就是网络id

分配网络IP

Networks界面选择Easy setup进入网络分配界面

分配网络IP.png

选择Generate network address生成ip范围之后Submit即可,到此zerotier根服务器搭建完成。

客户端加入

搭建完成后可以让我们的设备加入到这个网络中组成虚拟局域网,ZeroTier 支持多种主流操作系统的客户端,包括:

  • Windows
  • macOS
  • Linux
  • Android

Windows配置

首先去zerotier官网下载一个zerotier客户端,将生成的plant文件覆盖粘贴到C:\ProgramData\ZeroTier\One中(这个目录是个隐藏目录,需要运允许查看隐藏目录才行)

Win+S 搜索 服务

service.png

找到ZeroTier One,并且重启服务

restart_service.png

加入网络

使用管理员身份打开PowerShell

执行如下命令,看到join ok字样就成功了

PS C:\Windows\system32> zerotier-cli.bat join 网络id(就是在网页里面创建的那个网络)
200 join OK
PS C:\Windows\system32>

登录管理后台可以看到有个个新的客户端,勾选Authorized就行

网络id.png

勾选之后IP assignment 里面会出现zerotier的内网ip

执行如下命令:

PS C:\Windows\system32> zerotier-cli.bat peers
200 peers
<ztaddr> <ver> <role> <lat> <link> <lastTX> <lastRX> <path>
fcbaeb9b6c 1.8.7 PLANET 52 DIRECT 16 8994 1.1.1.1/9993
fe92971aad 1.8.7 LEAF 14 DIRECT -1 4150 2.2.2.2/9993
PS C:\Windows\system32>

可以看到有一个 PLANTET 和 LEAF 角色,连接方式均为 DIRECT(直连)

如果你的ztaddr是REPLAY, 就说明是中转

到这里就加入网络成功了

Linux 客户端

下面将使用docker来安装,直接安装请参考zerotier官网

安装docker和docker-compose

搜索相关教程

配置

创建一个zerotier目录,在这个目录下创建一个docker-compose.yml文件,内容如下:

version: '3.8'

services:
zerotier-client:
image: zerotier/zerotier-containerized:latest
container_name: zerotier-client
restart: always
network_mode: host
devices:
- "/dev/net/tun:/dev/net/tun"
cap_add:
- NET_ADMIN
- SYS_ADMIN
volumes:
- ./zerotier-data:/var/lib/zerotier-one

为了避免不必要的问题配置文件的网络必须使用host

然后在docker-compose.yml文件目录下启动服务:

# 创建并启动容器(后台运行)
docker-compose up -d

# 查看实时日志(按 Ctrl+C 退出)
docker-compose logs -f

启动之后会在docker-compose.yml文件目录下自动创建出zerotier-data文件夹

然后进入到该文件夹下,将部署根服务器生成的planet文件下载复制到该目录下,替换掉原有的planet文件。

docke版zerotier客户端数据文件.png

然后重启docker容器

docke restart zerotier-client

加入网络

docker exec zerotier-client zerotier-cli join 你的网络ID

去zerotier控制台授权加入即可

授权之后输入以下命令就可以看到角色信息了

docker版zerotier角色信息.png

安卓客户端配置

Zerotier 非官方安卓客户端

下载安装后,先去设置启动自定义Planet然后点击设置Planet文件将根服务器的Planet文件地址复制进去就会自动更新,然后在首页添加网络,将网络id添加进去之后去zerotier控制台授权即可。

MacOS 客户端配置

步骤如下:

  1. 进入 /Library/Application\ Support/ZeroTier/One/ 目录,并替换目录下的 planet 文件
  2. 重启 ZeroTier-One:cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill
  3. 加入网络 zerotier-cli join 网络 id
  4. 管理后台同意加入请求
  5. zerotier-cli peers 可以看到planet 角色

OpenWRT 客户端配置

步骤如下:

  1. 安装zerotier客户端
  2. 进入目录 /etc/config/zero/planet
  3. 替换目录下的 planet 文件
  4. 在openwrt网页后台先关闭zerotier服务,在开启zerotier服务
  5. 在openwrt网页后台加入网络
  6. 管理后台同意加入请求
  7. 执行 ln -s /etc/config/zero /var/lib/zerotier-one
  8. zerotier-cli peers 可以看到planet 角色

参考

xubiaolin/docker-zerotier-planet: 一分钟私有部署zerotier-planet服务

更适合国内的远程访问方法:自建根服务器打造基于 ZeroTier 虚拟内网 - 少数派