私有化部署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需要你根据实际情况替换] - 安装
docker
、git
下载项目源码¶
官方地址
加速地址
执行安装脚本¶
进入项目目录
运行 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 客户端¶
步骤如下:
- 安装linux客户端软件
- 进入目录
/var/lib/zerotier-one
- 替换目录下的
planet
文件 - 重启
zerotier-one
服务(service zerotier-one restart
) - 加入网络
zerotier-cli join
网络id
- 管理后台同意加入请求
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 客户端配置¶
步骤如下:
- 进入
/Library/Application\ Support/ZeroTier/One/
目录,并替换目录下的planet
文件 - 重启 ZeroTier-One:
cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill
- 加入网络
zerotier-cli join
网络id
- 管理后台同意加入请求
zerotier-cli peers
可以看到planet
角色
路由配置¶
- 访问
http://ip:3443
进入controller页面 - 进入
Networks
页面,进入刚才创建的网络 - 点击
Routes
,填写Add new route:
下的内容- Target: # 填入内网安装zerotier的客户端的内网ip网段
- Gateway: # 填入内网安装zerotier的客户端的Zerotier虚拟网分配的ip