这是个好东西,打洞专用,使用UDP进行打洞,致力于开源SDN,SD-WAN解决方案,属于开源精品(仅仅是客户端开源,服务端不开源但是可以免费使用100个连接,所有这里用三方的开源组件搭建Moon端).跨平台多终端。将复杂的互联网用点对点的形式进行组建,并且在上面附加一层 VXLAN-like 虚拟网络层 来提高局域网的可见性,安全性。
在服务端方面,OPenwrt/LEDE下的zerotier是个非常不错的穿透软件,和frp各有千秋。
zerotier-one优势
1:控制端(ZeroTier 官网)功能足够强大,可以下发路由表、准入控制、IP分配、流量规则等,
2:可以建立中转服务器(Moon 服务器),从而实现更好的链接效果
3:接近于免费。个人用户最多可以接入 100 节点设备,
4:客户端开源。你完全可以自己编译
基本原理介绍
说白了就是 P2P(Peer to Peer),而且组织方式很像 DNS(关于 DNS 可以看这里)。
根服务器 R 记录了路径信息,设备 A 能通过ZeroTier唯一地址标识找到需要连接的设备 B
这个过程如下:
- A 想要将数据包发送到 B,但由于它没有直接路径,因此将其向上发送到 R。
- 如果 R 有直接链接到 B,它会转发数据包给 B。否则它会继续向上游发送数据包,直到达到行星根(planet)。行星根知道所有节点,所以如果 B 在线,最终数据包将到达 B。
- R 还向 A 发送一个名为会和的消息,包含有关它如何到达 B 的提示。同时,将会和发给 B,通知 B 它如何到达 A。
- A 和 B 获取它们的会合消息并尝试相互发送测试消息,可能会对 NAT 或状态防火墙进行穿透。如果这样可以建立直接链路,则不再需要中继。
- 如果无法建立直接路径,则通信可以继续中继(速度慢)
ZeroTier 官方搭建了一个行星根服务器叫做地球 Earth,行星根服务器唯一的且是免费的,它记录了所有的路径信息,一般情况下大家都直接用的这个。除此之外还有 12 个遍布全球的根服务器,这些是收费的服务。所以如果使用免费套餐,连接时的延迟可能会很高,另外由于 Earth 在国外,一些不确定因素可能会影响到使用。考虑到网络的不确定性,ZeroTier 能自己创建根服务器月球 Moons,这样就能在大局域网中得到更好的体验了。
安装
ZeroTier 是跨平台的,能安装在几乎任何平台
Windows、macOS、Linux、iOS、Android、QNAP、Synology、西数 MyCloud NAS,下载地址:https://www.zerotier.com/download.shtml
Ubuntu下安装
懒人一键安装,官方脚本
curl -s https://install.zerotier.com | sudo bash
之后加入网络
sudo zerotier-cli join <network_id>
路由器安装(openwrt)
路由器推荐安装 Entware 后使用 opkg install zerotier 命令安装
如果没有luci,直接修改一下
vi /etc/config/zerotier
找到以下两处进行修改:
config zerotier sample_config
option enabled 0 (这里把0替换成1,让选项生效)
list join ‘8056c2e21c000001’ (替换为自己的网络ID)
其他无需修改,退出VI,按esc,然后按:(冒号)回车,再按wq保存退出编辑界面。然后输入reboot,重启。
你也可以使用WINSCP等软件直接进行修改。
路由器防火墙配置(关键)
最初我是用的LEDE,需要增加以下设置:
在LEDE上点击网络->防火墙,在基本设置>区域设置里,把转发改为接受。区域下面的三行(出站,入站,转发)都选接受,其他选项保持不动。
在防火墙->自定义规则页面,增加下面三条记录:
iptables -I FORWARD -i ztc3qwyx5l -j ACCEPT
iptables -I FORWARD -o ztc3qwyx5l -j ACCEPT
iptables -t nat -I POSTROUTING -o ztc3qwyx5l -j MASQUERADE
ztc3qwyx5l是LEDE的ZeroTier虚拟接口的名称,在终端可以使用ifconfig命令查看,请自行替换。
设置完成后,点击重启防火墙。
打开zerotier的Bridge
要在zerotier的配置界面点开Allow Ethernet Bridging
配置MOON(进阶)
使用 zerotier-cli listpeers 命令时能看到这几个名词。充当 moon 的机子最好有公网 IP
PLANET :行星服务器, Zerotier 各地的根服务器,有日本、新加坡等地
Moon :卫星级服务器, 用户自建的私有根服务器,起到中转加速的作用
LEAF :相当于各个枝叶, 就是每台连接到该网络的机器节点
MOON又称为自定义根服务器,通过自定义的服务器作为跳板加速内网机器之间的互相访问。
在启用ZeroTier后,我发现ZeroTier安装目录/var/lib/zerotier-one(这个目录实际链接到/var/lib/zerotier-one_sample_config)是临时目录 ,在重启后就自动删除,必须修改配置文件,才能保留MOON的配置。
修改配置
修改 /etc/config/zerotier,加入下面一行选项:
option config_path ‘/etc/zerotier'(注意分隔符,如下图所示)
然后在根目录的/etc/目录下,新建zerotier目录用来存放moons的配置文件。
生成MOON文件
进入ZeroTier的安装目录:
cd /var/lib/zerotier-one_sample_config
运行下面两条命令:
zerotier-idtool generate identity.secret identity.public
zerotier-idtool initmoon identity.public >>moon.json
在当前目录生成moon.json文件。
修改MOONS文件
修改 moon.json文件中”stableEndpoints” 字段为LEDE路由的公网IP,9993为端口号。
“stableEndpoints”: [ “117.XX.XX.XX/9993” ]
生成签名文件
运行命令:
zerotier-idtool genmoon moon.json
在当前目录下生成签名文件00000005ff20a0f6.moon
将MOON节点加入网络
将LEDE本机设为MOON节点。
在/etc/zerotier目录建立moons.d子目录,将生成的00000005ff20a0f6.moon复制到该文件夹中,并重启设备。
Docker方式部署Moon节点(推荐)
(2021.10.2更新)
推荐docker:https://hub.docker.com/r/seedgou/zerotier-moon
docker run --name zerotier-moon -d --restart always -p 9993:9993/udp -v ~/somewhere:/var/lib/zerotier-one seedgou/zerotier-moon -4 1.2.3.4
替换掉其中的ip地址和挂载地址,Replace 1.2.3.4 with your moon's IPv4 address and replace ~/somewhere with where you would like to store your configuration.
#比如
docker run --name zerotier-moon -d --restart always -p 9993:9993/udp -v /home/zerotier-moon:/var/lib/zerotier-one seedgou/zerotier-moon -4 81.70.255.271
之后查看log可以看到id
docker logs zerotier-moon
之后就可以愉快地orbit节点了,orbit之后稍微等一会,就可以看到节点上线状态了。
其他设备加入MOON节点方法
方法一
找到ZeroTier安装目录,新建moons.d文件夹,将00000005ff20a0f6.moon复制到该文件夹中,重启设备。
不同系统的ZeroTier安装目录位置:
Windows: C:\ProgramData\ZeroTier\One
Macintosh: /Library/Application Support/ZeroTier/One (在 Terminal 中应为 /Library/Application\ Support/ZeroTier/One)
Linux: /var/lib/zerotier-one
FreeBSD/OpenBSD: /var/db/zerotier-one
方法二
在终端上执行命令:
zerotier-cli orbit 5ff20a0f6 5ff20a0f6
验证测试
查看是否在MOON下运行
zerotier-cli listpeers
如果某一行显示有MOON字样,就证明MOON已被本机标识了。
注意:本机不能看自己,所以只能上别的设备上看。
对比frp
和 ngrok 和 frp 功能类似,但是 ZeroTier 明显入手简单。ZeroTier 只有客户端开源,服务端并没有开源。而 ngrok 和 frp 都是完全开源。但是 ngrok 和 frp 严重依赖于公网固定 IP 的 VPS,是一个中性化的内网穿透工具,一旦中心挂掉,那么所有的节点都无法工作。Zerotier 帮助用户实现了服务端,虽然安全性有待考验,但至少还是能用状态。
但是,我还是习惯frp
部分内容转自网上很多大佬,不一一列举了
2 comments
zerotier感觉只能和n2n对比,和frp,ngrok不是一样的东西.
前两个是用来远程组建局域网,后两个用来把内网服务发布到公网.
用途有重叠,但是并不对等.
同样的想法