Zerotier 组网

折腾
118 0

使用 Wireguard 很方便,但公网或端口封后就会无预备,安排下个工具 Zerotier。

工具有 Wireguard,Zerotier,Tailscale/Headscale(都基于 Wireguard),Nebula,Ngrok,Frp,nps,n2n/OmniEdge,rathole。

1. 介绍

通过 Zerotier 官方 planet 根服务器建立虚拟局域网

优点:
在没有自带公网 IP 的云服务器的情况下也可以异地组网,部署简单快捷,全地球都可以访问。

缺点:
① 免费版允许连接设备最大 25 台,个人够用。
② 数据不安全,外国的服务器无重要数据时可以使用。
③ 受网络波动影响,可能连接不稳定。

2. 名词

1.planet 官方的:
属于官方根服务器(行星服务器)控制端,但有人根据源码出了修改版。用于管理客户端验证、IP、router、DNS、备注等。在无法打洞建立 P2P 直连时,可作为中继服务器转发设备间流量,速度慢,数据在外,免费版最大支持 25 个设备连接。

2.moon 私人的:
属于私有根服务器(卫星服务器),可自建,可使用他人提供服务器,可作为客户端 P2P 打洞和中继服务器转发中心。moon 1.x 搁浅了,moon 2.0 据说还在进程中。

3.leaf 客户端:
连接到根服务器的网络节点,可以是 Windows、macOS、Android、iOS、Linux、NAS 等。

4.planet 私人的:
可搭建属于个人的后台控制端,管理全部。

* controller 是控制器,负责接入网络节点的管理,zerotier 本身自带命令行的控制器,但不怎么方便,做得比较好的管理界面是 ztncui(https://github.com/key-networks/ztncui);
* planet 行星,这个是网络中作为发现、发布的公共节点,简单点说就是当使用 zerotier-cli join xxxx 或者 zerotier-cli orbit xxxx xxxx 的时候,告诉客户端 xxxx 是哪台机器;
* moon 月球,这是 zerotier 网络中用于中转数据的服务器,它实现了两个无法点对点直连设备之间的中继传输;
* leaf 叶子,是网络中的末端节点,只作为客户端出现,不参与转发、管理的工作,一般情况下使用 zerotier-cli join xxxx 命令加入网络的设备都是 leaf。

* moon 可以通过 zerotier-idtool 生成相关配置文件,在 leaf 上执行 zerotier-cli orbit xxxx 命令将 moon 加入 leaf 节点的 moonlist。
* planet 必须通过修改源码并自行编译方式才能修改,且所有与之相连的 moon 和 leaf 都必须使用同样的 planet 才能正常互相发现。

3. 官方控制端

https://my.zerotier.com/network
创建好虚拟网络,获取官方 planet 的局域网 NETWORK ID,类型为 Private(手动授权),Public(自动授权)。

网络信息

1.在 zerotier 后台创建好虚拟局域网 IP 段为:
10.10.10.0/24

2.举例家庭/公司局域网 IP 段为:
192.168.0.0/24
192.168.1.0/24

4. Zerotier 客户端(官方)

docker rm -f Zerotier
docker run -d \
--name Zerotier \
--restart=always \
--net=host \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN \
--device /dev/net/tun \
zerotier/zerotier:latest 1c33666660666666

# NETWORK ID 是:1c33666660666666

1.查看加入虚拟网是否成功,状态会显示代码 200

Debian:~# docker exec Zerotier zerotier-cli listnetworks
--------------------------------------------------------
200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
200 listnetworks 1c33666660666666  5e:fd:a7:36:xx:xx ACCESS_DENIED PRIVATE zt2lr3lsmn -

# docker 命令:加入/退出/列出网络
# docker exec Zerotier zerotier-cli join Network ID
# docker exec Zerotier zerotier-cli leave Network ID
# docker exec Zerotier zerotier-cli listnetworks

2.在后台授权客户端
进入后台页面,点击 NETWORK ID 栏,进入设置,勾选 Auth? 以下列表框同意授权,自动分配 IP 给客户端。

3.再次查看网络连接状态,会显示分配 IP 网段信息

docker exec Zerotier zerotier-cli listnetworks
----------------------------------------------
Debian:~# docker exec Zerotier zerotier-cli listnetworks
200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
200 listnetworks 1c33666660666666 NetWorks-1 5e:fd:a7:36:xx:xx OK PRIVATE zt2lr3lsmn fccc:47c6:93fa:d3e6:de1f::1/40,10.10.10.116/24

4.ifconfig 查看网卡信息
ztxxxxxxxx 开头的虚拟网卡和相关 IP 信息

5. 测试组网

目前只部署了一个客户端,还需要一个客户端组网,下载 Windows 客户端:
https://www.zerotier.com/download

打开程序,输入上边虚拟网的 NETWORK ID ,再到后台授权该客户端即可。

Linux 端:

Debian:~# ping 10.10.10.130
PING 10.10.10.130 (10.10.10.130) 56(84) bytes of data.
64 bytes from 10.10.10.130: icmp_seq=1 ttl=128 time=151 ms
64 bytes from 10.10.10.130: icmp_seq=2 ttl=128 time=91.9 ms
64 bytes from 10.10.10.130: icmp_seq=3 ttl=128 time=93.2 ms
64 bytes from 10.10.10.130: icmp_seq=4 ttl=128 time=84.1 ms
64 bytes from 10.10.10.130: icmp_seq=5 ttl=128 time=109 ms
64 bytes from 10.10.10.130: icmp_seq=6 ttl=128 time=68.1 ms
64 bytes from 10.10.10.130: icmp_seq=7 ttl=128 time=116 ms
64 bytes from 10.10.10.130: icmp_seq=8 ttl=128 time=57.1 ms

Windows 端:

C:\Users\Administrator>ping 10.10.10.116 -t

正在 Ping 10.10.10.116 具有 32 字节的数据:
来自 10.10.10.116 的回复: 字节=32 时间=382ms TTL=64
来自 10.10.10.116 的回复: 字节=32 时间=68ms TTL=64
来自 10.10.10.116 的回复: 字节=32 时间=88ms TTL=64
来自 10.10.10.116 的回复: 字节=32 时间=70ms TTL=64
来自 10.10.10.116 的回复: 字节=32 时间=68ms TTL=64
来自 10.10.10.116 的回复: 字节=32 时间=74ms TTL=64
测试情况:
1.可看出通过官方(国外服务器) P2P 打洞直连成功,内网服务可以使用虚拟网 IP 访问。
2.如果 PING 值很高说明 P2P 失败,可以断开再连,或不理它直到打洞成功为止。
3.目前只能用虚拟网分配 IP 访问,跨网段方法在下面。

6. 跨网段访问

打开 管理端后台 增加路由;Advanced --> Add Routes 手动下发 router 给所有客户端。

Destination        (Via)
192.168.1.0/24     10.10.10.116

# 说明:
# Destination,填写家庭/公司真实局域网 IP 段
# (via),填写 管理端后台 虚拟网分配的 IP,该设备必须在真实局域网内
测试情况:
192.168.x.x 无法访问,192.168.x.x:8888 可以访问。

可能的解决方式:
1.真实局域网机器的 Docker 作为网关跳板失败,待解决。

2.打开 IP 路由数据包转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

3.打洞隧道失败,断开虚拟网再次连接。

4.防火墙:

# 在 ssh 环境中用 zerotier-cli listnetworks 或者 ifconfig 查询 zt 开头网卡名称
iptables -I FORWARD -i ztxxxxxxxx -j ACCEPT
iptables -I FORWARD -o ztxxxxxxxx -j ACCEPT
iptables -t nat -I POSTROUTING -o ztxxxxxxxx -j MASQUERADE

# 防火墙规则持久化
iptables-save

5.对于 RDP 远程桌面,在对应 Windows 安装客户端,使用虚拟 IP 远程访问。

7. 端口信息

9993/tcp/udp,Zerotier 穿透要用到的端口
3000/4000,zero-ui 端口

8. tun 设备

Debian tun
执行:cat /dev/net/tun
返回:cat: /dev/net/tun: File descriptor in bad state
支持的,说明模块安装正确。

群辉 tun

# 写入内容/自启
cat <<EOF > /usr/local/etc/rc.d/tun.sh

!/bin/sh -e

insmod /lib/modules/tun.ko
EOF

# 使其可执行
chmod a+x /usr/local/etc/rc.d/tun.sh

9. 搭建 planet 私人控制端

https://www.mrdoc.fun/doc/443/
https://juejin.cn/post/7154383527109197837
http://124.222.129.205/?p=351

其他:
https://juejin.cn/post/7161224755519946759
https://www.modb.pro/db/410432

更新 2022-11-27
评论 ( 0 )
私信
pic
code
pre