ZeroTier 是一款非常简单易用的内网穿透工具,不需要像frp一样进行重复的配置和端口映射就能实现虚拟局域网的组建,让你可以在外也能连回家中、办公室的电脑和数据。
ZeroTier 特点分析
特点:
- 创建安全的点对点(P2P)网络
- 使用自己的协议,不基于 WireGuard
- 支持软件定义网络(SDN)
优点:
- 设置和使用简单
- 支持多个平台
- 高度可扩展,支持大型网络
- 自动 NAT 穿透
缺点:
- 中继服务器都在国外,国内访问延迟比较高,且不稳定,不过如果组网内的客户端都有公网IP(ipv4或ipv6)就可以直接直连,延迟和速度直接拉满
概念
Network
每一个 Network 包含的所有设备都在同一个网络里,可以理解为一个局域网。每个网络有一个 Network ID。各客户端通过这个 ID 连接到此网络。一个账号是可以创建多个网络的。
网络分为 Public 和 Private。一般我们自己组网是要用 Private,需要在页面授权设备才可以进行访问。
PLANET
星球,指的是官方提供的服务器节点。各客户端都是通过这些服务来互相寻址的。
MOON
自定义的 Planet,官方称之为Private Root Servers,也即是私有根服务。由于 Zerotier 没有国内节点,导致创建连接的速度偏慢。在自己的网络里搭建 Moon 可以使连接提速,一般都是国内有公网的服务器。
LEAF
客户端。就是连接到网络上的每一个设备。Moon 也是客户端的一种。这里特指没有额外功能,单纯用于连接的客户端。
创建网络
注册账号
登录官方网站进行注册,可以使用github或者谷歌账号登录。
创建网络
账号注册后可以创建网络,一个账号可以创建多个网络
记住这个 Network ID,后面加入网络都需要用到这个。
安装客户端
Linux下安装直接执行命令:
curl -s https://install.zerotier.com | sudo bash
更多安装方式见官网 https://www.zerotier.com/download/
安装之后使用命令 zerotier-cli join <network ID>
加入网络,其中network ID就是自己创建的网络里面的ID。
加入网络之后,需要到网络的管理页面进行授权,通过授权的客户端才算正式加入网络。
常用命令
列出所有网络:
[root@k8s-master-225 ~]# zerotier-cli listnetworks
200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
200 listnetworks b6*************** insane_tattam ee:**:**:2f:46:c1 OK PRIVATE zt***** 172.24.185.26/16
其中status是属于网络中的状态,网络状态 OK 表示正常,REQUEST_CONFIGURATION 表示没有 uPNP,连不上,ACCESS_DENIED 表示还没有授权。
加入网络
使用命令 zerotier-cli join <network ID>
[root@k8s-master-225 ~]# zerotier-cli join b6***************
200 join OK
查看连接情况
使用命令 zerotier-cli info
[root@k8s-master-225 ~]# zerotier-cli info
200 info 064fa33397 1.12.1 ONLINE
查看组网连接
使用命令 zerotier-cli peers
,可以查看到当前所在网络中其他节点的连接情况。
[root@k8s-master-225 ~]# zerotier-cli peers
200 peers
<ztaddr> <ver> <role> <lat> <link> <lastTX> <lastRX> <path>
62f865ae71 - PLANET -1 RELAY
72e1ccb8fc 1.12.1 LEAF -1 RELAY
778cde7190 - PLANET -1 RELAY
b6079f73c6 1.12.0 LEAF 230 DIRECT 3182 3182 35.208.177.26/32269
cafe04eba9 - PLANET -1 RELAY
cafe9efeb9 - PLANET -1 RELAY
其中 link 代表了连接状况。DIRECT 代表可以直接连接,RELAY 代表需要转发。
服务操作
zerotier的服务名称是zerotier-one
,所以可以使用service来管理:
service zerotier-one status
service zerotier-one restart
service zerotier-one stop
也可以使用systemctl
来管理:
# 启动服务
systemctl start zerotier-one
# 停止服务
systemctl stop zerotier-one
# 重启服务
systemctl restart zerotier-one
# 查看服务状态
systemctl status zerotier-one
# 开机自启
systemctl enable zerotier-one
# 关闭开机自启
systemctl disable zerotier-one
高级用法
自定义 Moon
官方文档为https://docs.zerotier.com/zerotier/moons/
MOON节点的作用是替代官方的PLANET以便能减少网络带来的延迟甚至超时,所以MOON应该是一个拥有公网IP的LEAF。
第一步:进入/var/lib/zerotier-one目录
第二步:执行 zerotier-idtool initmoon identity.public >>moon.json
生成moon配置文件
文件内容大概如下:
{
"id": "064faxxxx",
"objtype": "world",
"roots": [
{
"identity": "064fa33397:0:8699b284254226d46fb9c811406585fc88b8abbaea7f425244ca3d9c3cf7b94716ec97a51387d88b2fcd5617f667724d4faed24aee1ef6236303201abxxxx996d",
"stableEndpoints": []
}
],
"signingKey": "abf607960fa34e55a7d143c2bb9a7e7467832b9a51238d05aeae031f0fd8786291b224bcea14fa3d9d8afbbe24a4757b2c2f557e7b57c68efdcc318858xxxx",
"signingKey_SECRET": "2a8927367e23fff88deae15dba3f8e6bae81e84a13cdb28a802ec7a05af1383312c419a856763b8d45f63606708f39c6f114dcdf777a1e10cff72c02xxxx9de7",
"updatesMustBeSignedBy": "abf607960fa34e55a7d143c2bb9a7e7467832b9a51238d05aeae031f0fd8786291b224bcea14fa3d9d8afbbe24a4757b2c2f557e7b57c68efdcc318xxxxd5740",
"worldType": "moon"
}
需要记下这个文件里面的id,这个就是world id,后续会用到。
第三步:添加本机内网地址和端口
具体操作是拿到这个moon的内网IP,也就是加入网络后生成的内网IP(包括IPv4和IPv6),还有端口9993(默认),然后添加到上面步骤的moon.json里面的stableEndpoints字段中,格式如下:
"stableEndpoints": ["172.24.34.132/9993","fe80::ecd4:65ff:fe65:4008/9993"]
第四步:执行命令zerotier-idtool genmoon moon.json
此时会在当前目录生成一个000000064fa3xxxx.moon的文件,需要在当前目录创建一个moons.d目录,然后把这个文件移动到moons.d目录中
第五步:重启服务
执行下面两个命令(重启前把目录权限改一下):
chown zerotier-one:zerotier-one -R /var/lib/zerotier-one/
systemctl restart zerotier-one
第六步:LEAF节点加入MOON
上面步骤都是在MOON节点操作的,完成之后MOON节点就算完成了创建,此时可以将任意LEAF加入到MOON中,执行命令zerotier-cli orbit 064faxxxx 064faxxxx
即可,其中064faxxxx就是前面记下的world id。
[root@k8s-master-225 ~]# zerotier-cli orbit 064faxxxx 064faxxxx
200 orbit OK
参考文章
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://tendcode.com/subject/article/Zerotier/
许可协议:署名-非商业性使用 4.0 国际许可协议