Loading... 这是个好东西,打洞专用,使用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命令查看,请自行替换。 ![Xshell_ITCZRmwBhP.png][1] 设置完成后,点击重启防火墙。 # 打开zerotier的Bridge 要在zerotier的配置界面点开Allow Ethernet Bridging ![image.png](https://imgki.com/usr/uploads/2022/02/2974649870.png) # 配置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 ```bash 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. ```bash #比如 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` ![image.png](https://imgki.com/usr/uploads/2021/10/20950745.png) 之后就可以愉快地orbit节点了,orbit之后稍微等一会,就可以看到节点上线状态了。 ![image.png](https://imgki.com/usr/uploads/2021/10/512347358.png) ## 其他设备加入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 ![Termius_06P9fFt8jF.png][2] 如果某一行显示有MOON字样,就证明MOON已被本机标识了。 注意:本机不能看自己,所以只能上别的设备上看。 # 对比frp 和 ngrok 和 frp 功能类似,但是 ZeroTier 明显入手简单。ZeroTier 只有客户端开源,服务端并没有开源。而 ngrok 和 frp 都是完全开源。但是 ngrok 和 frp 严重依赖于公网固定 IP 的 VPS,是一个中性化的内网穿透工具,一旦中心挂掉,那么所有的节点都无法工作。Zerotier 帮助用户实现了服务端,虽然安全性有待考验,但至少还是能用状态。 但是,我还是习惯frp 部分内容转自网上很多大佬,不一一列举了 [1]: https://imgki.com/usr/uploads/2019/09/825401924.png [2]: https://imgki.com/usr/uploads/2019/10/975629183.png Last modification:February 8, 2022 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏
2 comments
zerotier感觉只能和n2n对比,和frp,ngrok不是一样的东西.
前两个是用来远程组建局域网,后两个用来把内网服务发布到公网.
用途有重叠,但是并不对等.
同样的想法