Skip to content

私有化部署Zerotier Planet Server

公网访问局域网的需求

有时候需要在不同的地方访问放在寝室、实验室的PC或服务器,尝试过Frp和Zerotier等方案。 但由于Zerotier国内环境确实不太稳定,使用上也不尽方便,实际上最常用的还是Frp。不过,Zerotier有一个很好的功能,可以设置网段的路由,这样只要在内网里的一个设备上配置好,然后在控制台里设置相应的路由,就可以轻松地访问到内网里的所有设备。所以,能否找到一个办法,能够让Zerotier的访问更加稳定呢?

为什么Zerotier不稳定?

查阅一些资料后发现,尽管Zerotier的方案是P2P的,但依赖于ZeroTier的根服务器来打洞,并且由于Zerotier的根服务器(Planet Server, Planet)都在国外,因此时常出现不稳定的情况。一种解决方案是部署Moon Server(Moon),这是官方推荐的私有 Planet 的部署方法,在默认 Planet 无法访问的时候承担 Planet 的作用。 但这种方案仍然存在以下缺点:

  • 需要手动在每个客户端添加Moon,并且官方的移动端由于没有控制台,没办法利用Moon节点。
  • 部分云服务器可能封堵了9993端口

解决方案

如题,自建Zerotier Planet节点。最开始参考了《放弃moon节点,直接搭建Zerotier根服务器》,本以为可以解决Planet访问稳定性与客户端部署的便捷性的问题,但在实践过程中,发现这个方案并不能解决客户端部署便捷性的问题;但好消息是,发现了以前我部署了Moon,却仍然有时候会不稳定的原因——被封堵的9993端口。 因此,这个方案仅仅解决了端口被封的问题,移动端的访问,仍然需要各类修改客户端的操作。

服务端部署

准备

  • 具有公网 ip 的服务器(需要开放 3443/tcp 端口,9993/tcp 端口,9993/udp 端口)[这里的9993需要你根据实际情况替换]
  • 安装 dockergit

下载项目源码

官方地址

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

加速地址

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

执行安装脚本

进入项目目录

cd docker-zerotier-planet

运行 deploy.sh 脚本

./deploy.sh

下载 planet 文件

脚本运行完成后,会在./data/zerotier/dist目录下有个 planet 文件,下载该文件以备用

登录Webui

访问 http://ip:3443 进入controller页面

默认账号为:admin

默认密码为:password

可以进去后在User界面,自行创建新用户后删除默认的admin用户

创建网络

进入Network页面,点击Add network创建网络,输入名称 得到网络 id

客户端配置

Windows 客户端

替换planet文件

将 planet 文件覆盖粘贴到C:\ProgramData\ZeroTier\One中(这个目录是个隐藏目录,需要运允许查看隐藏目录才行)

在服务中重启ZeroTier One服务

加入网络

使用管理员身份打开PowerShell

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

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

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

执行如下命令:

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连接方式为 DIRECT(直连)

Linux 客户端

步骤如下:

  1. 安装linux客户端软件
  2. 进入目录 /var/lib/zerotier-one
  3. 替换目录下的 planet 文件
  4. 重启 zerotier-one 服务(service zerotier-one restart)
  5. 加入网络 zerotier-cli join 网络 id
  6. 管理后台同意加入请求
  7. zerotier-cli peers 可以看到 planet 角色

设置防火墙允许转发

sudo iptables -A FORWARD -i ztbtovkhwr -j ACCEPT
sudo iptables -A FORWARD -o ztbtovkhwr -j ACCEPT
sudo iptables -t nat -A POSTROUTING  ! -o lo -j MASQUERADE


sudo ip6tables -I FORWARD -i ztbtovkhwr  -j ACCEPT
sudo ip6tables -I FORWARD -o ztbtovkhwr -j ACCEPT
sudo ip6tables -t nat -I POSTROUTING -o ztbtovkhwr -j MASQUERADE
#这里ztbtovkhwr为zerotier虚拟网卡
#保存iptable规则
#sudo apt-get install iptables-persistent
#sudo sh -c "iptables-save > /etc/iptables/rules.v4"
或在自定义防火墙规则
iptables -I FORWARD -i ztbtovkhwr  -j ACCEPT
iptables -I FORWARD -o ztbtovkhwr -j ACCEPT
iptables -t nat -I POSTROUTING -o ztbtovkhwr -j MASQUERADE

ip6tables -I FORWARD -i ztbtovkhwr  -j ACCEPT
ip6tables -I FORWARD -o ztbtovkhwr -j ACCEPT
ip6tables -t nat -I POSTROUTING -o ztbtovkhwr -j MASQUERADE

安卓客户端配置

Zerotier 非官方安卓客户端发布:支持自建 Moon 节点 - V2EX

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 角色

路由配置

  1. 访问 http://ip:3443 进入controller页面
  2. 进入Networks页面,进入刚才创建的网络
  3. 点击Routes,填写Add new route:下的内容
    1. Target: # 填入内网安装zerotier的客户端的内网ip网段
    2. Gateway: # 填入内网安装zerotier的客户端的Zerotier虚拟网分配的ip

参考链接

  1. GitHub - xubiaolin/docker-zerotier-planet: 私有部署zerotier-planet服务

  2. 放弃moon节点,直接搭建Zerotier根服务器