Loading... ## 一、Zerotier 原理  #### 概念 1. planet:核心角色,官方不允许自建私有,zerotier 的行星服务器,用于管理全球所有的 zerotier 客户端的地址信息,帮助建立客户端间的直接链接,以及在无法建立直接链接时,作为中继服务器转发设备间的流量。 2. moon:官方允许自建私有,作为离客户端更近的中继服务器存在,可以使转发的效率更高。 #### 原理 1. 客户端注册 在内网机器上启动一个 zerotier 客户端,使用 join 加入一个网络,在控制台对客户端进行授权,此时 planet 上有如下记录: ```sh 10.0.0.1 - 150.0.0.1/15679 10.0.0.2 - 160.0.0.1/22226 ``` 2.尝试 p2p 连接 当在 `10.0.0.1` 机器上访问 `10.0.0.2`,内网机器向 planet 查询到目标地址的公网 `160.0.0.1`,端口为 22226。 `10.0.0.1` 尝试与 `160.0.0.1`的 22226 端口进行直接数据交互,这个过程称为 udp 打洞实现 p2p 直连。 3.planet 转发 由于各种网络限制,p2p 不能直连。 此时通过 planet 转发,如果还配置了 moon 节点,此时会通过速度快的 moon 节点进行转发。 如上图则大概率从上海的 moon 节点进行数据转发,此时网络取决于 moon 的带宽。 ## 二、私有 zerotier-planet 的优势 - 解除官方的设备连接数限制 - 提升手机客户端连接的稳定性 ## 三、搭建私有 planet 了解了 zerotier 的概念原理,那么大概了解搭建私有 planet 的重要性。 ### 1、运行控制器容器 ```sh 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 \ -e HTTP_PORT=4000 \ -e HTTP_ALL_INTERFACES=yes \ -e ZTNCUI_PASSWD=admin123 \ --restart=always \ hausen1012/ztncui ``` 这里需要注意的是传参需要将 `1.1.1.1` 修改为公网 ip。 ### 2、生成 planet 文件 ```sh docker exec -it zt-ui bash /tmp/patch.sh && \ docker restart zt-ui ``` 如果 linux 内核版本太低,可能报错 `FATAL: kernel too old`,那么需要升级内核。 当然,如果你觉得云服务器不太方便升级内核,那么完全可以用一台测试的虚拟机进行生成文件,文件生成后用 ftp 上传到 `/home/docker/zt-ui/zerotier-one` 目录,然后再启动容器。 ### 3、测试 ```sh docker exec -it zt-ui zerotier-cli listmoons ``` 显示如下内容则表示搭建成功 ```json [ { "id": "00000004e3b1b4b0", "roots": [ { "identity": "04e3b1b4b0:0:ea0c548b45efcc701c052305f06568c749a4647b9a5b111e2b372c05f7c3ed56ae1009c29cb1aa51d95057bf1b65b3a2f7b01d129437f6b72efd08f68281fb52", "stableEndpoints": [ "1.1.1.1/9993" ] } ], "signature": "b4f539ef93e198203d9e270c155d091769408ff98489d83bcf6444d2a95112ca7369138b98d42512caa3c878f3eff2c27ecada28f549ea19e3a407e71bbeb008d51f6ba92af17e8b6e4c1b8eacbd4abc42f0f639746ea924cffb99b539f94e2b", "timestamp": 1665642068786, "updatesMustBeSignedBy": "7fcb120079801a1ddde8c1fb6657365351bca7279e8470728f4cf01fb5efc81b57cde03338b4ea76dfd39570f74f2654d8d52a22613e77ed2e4cbb46a648a42d", "waiting": false } ] ``` `1.1.1.1` 为公网 ip 则搭建 planet 成功。 ## 四、创建私有网络 访问 `http://公网ip:4000`,账号密码:admin/admin123。 ### 1、创建网络  #### 2、初始化网络 点击 Easy setup  设置网段和子网掩码  ## 五、安装 zerotier 客户端 ### docker 安装 既然已经搭建了私有的 planet,当然是使用自己的,需要先下载服务器 `/home/docker/zt-planet/zerotier-one` 目录下的 planet 文件。 ##### 1、启动 zerotier 客户端 ```sh 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 ``` ##### 2、替换 planet 文件 将服务器下载的 planet 文件上传到客户端的 `/home/docker/zt-client/zerotier-one` 目录。 ##### 3、重启客户端 ```sh docker restart zt-cli ``` ##### 4、查看 planet ```sh docker exec -it zt-cli zerotier-cli listpeers ``` 可以看见 stableEndpoints 的配置是自己的公网 ip。 ##### 5、加入网络 ```sh docker exec -it zt-cli zerotier-cli join 8b8b9ed58a10bd45 ``` ##### 6、授权  ip 也可以自己设置,不过要在刚刚设置的网段内。  ### Linux安装 ##### 1、简单快捷,只要执行以下命令一键安装即可。 安装完成后会自动在`**/var/lib/zerotier-one/**`下生成相关文件及目录 ```bash curl -s https://install.zerotier.com | sudo bash ```  ##### 2、替换planet文件 需要先下载服务器 `/home/docker/zt-planet/zerotier-one` 目录下的 planet 文件 将服务器下载的 planet 文件上传到客户端的 `/var/lib/zerotier-one` 目录 ##### 3、添加开机自启 ```bash systemctl enable zerotier-one.service ``` ##### 4、启动zerotier-one.service ```bash systemctl start zerotier-one.service ``` ##### 5、加入网络 ```bash zerotier-cli join ################(networkid) ``` ##### 6、查看加入的网络的信息,比如network ```bash zerotier-cli listnetworks ``` \# 如果连接成功,并且管理页面中勾选此客户端,则会返回以下内容 ```bash 200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips> 200 listnetworks 830xxxxxxxx49 high_wozniak 4a:ce:1d:66:95:9b OK PRIVATE ztqu3hhgt3 10.147.18.122/24 ``` ##### 7、退出加入的network网段 ```bash zerotier-cli leave ################(networkid) ``` ##### 8、卸载zerotier ```bash yum remove zerotier-one -y rm -rf /var/lib/zerotier-one/ ``` ### windows 安装 ##### 1、下载客户端 [下载地址](https://www.nodeseek.com/jump?to=https%3A%2F%2Fwww.zerotier.com%2Fdownload%2F) ##### 2、安装客户端 双击安装即可 ##### 3、替换 planet 将下载好的 planet 文件复制到 `C:\ProgramData\ZeroTier\One` 目录下,(这个目录是个隐藏目录,需要运允许查看隐藏目录才行) ##### 4、重启服务 如果仅仅只是重启 ui 是不行的,需要找到任务管理器 -> 服务 -> ZeroTierOneService,进行重启。  ##### 5、查看 planet  可以看见 planet 地址是自己的公网。 ##### 6、加入网络 点击右下角图标,join new network,输入刚刚创建的虚拟网络 id,我这边是 8b8b9ed58a0baa3d。 ##### 7、授权 和 dokcer 安装一样的操作,不再赘述 ### Android安装 有人制作了可以设置planet的版本:https://github.com/kaaass/ZerotierFix #### 更新日志 - 更新 Zerotier 核心 - 更新 Zerotier 核心至 1.12.2 - 改进消息提醒相关的用户体验 - 在 APP 未获得通知权限时弹窗提示用户 - 此弹窗提示可以被永久性关闭 - MIUI 机型在成功连接网络后无法弹出 Toast 提示 - 更改通知类别名称为更具体的通知类型 - 点击状态栏通知时无法跳转至 APP - 允许使用通过非官方 Planet ID 生成的 Planet 文件 - 允许使用通过非官方 Planet ID 生成的 Planet 文件 - 该功能应当能修复此前 APP 不识别部分自建 Planet 项目生成的 Planet 文件的问题 ## 六、测试 通过上述方式将两台机器加入到网络,通过 ping 查看是否能打洞成功。其中 202 本地虚拟机,vps 是有公网 ip 的云服务器  **ping 检测** 在 10.0.0.202 机器上 ping 10.0.0.222  `listpeers` 查看到只有自己的私有根服务器,ping 的延迟不到 100ms 和直接 ping 公网 ip 差不多,说明打洞成功。 **局域网 scp 检测**  **speedtest 测速**  可以看见速度能达到十几MB,而我的根服务器是腾讯云的 3Mbps 服务器,如果通过根服务器转发肯定不可能达到这个速度,说明打洞成功。 **如果没有出现以上测试情况,Zerotier也无法保证能打通的,并且打洞成功也有可能有波动,能连接,但可能是根服务器腾讯云的 3Mbps的速度,无法点对点直连** ------ <u>参考文章:https://www.nodeseek.com/post-37619-1</u> 最后修改:2023 年 11 月 17 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏
此处评论已关闭