前言
本文继承自前文:
如果你直对如何实现内网穿透感兴趣, 那么只看此文也可!
内网穿透工具
其实有很多啦, 开源的, 闭源的, 国内的, 国外的:
花生壳, wireguard, ddnsto, ngrok, frp 甚至是 ssh!
但是其实上述我一个也没用过, 也没听过, 是我加的一个微信群里有个人说的!
我只用过Zero-Tier, 初见即终身, 所为叹为观止, 所谓沧海巫山!
哈哈哈哈哈哈哈哈, 不吹了, 其优点极其强大:
- 简单!
你只需要执行一行命令即可!
- 免费!
内网穿透的前提是, 你有一台大家都能访问的服务器, Zero-Tier免费提供给你
- 高效!
基于对等网络实现设备互联; 可自定义根节点; 全球各大洲都部署服务器, 既是最远的连接也能保持100ms以内的延迟
- 跨平台!

是的, 他就是如此好用, 多希望是我们国产的服务啊!
Tier-Zero内网穿透的原理
如何连通
如果你有兴趣, 可以去阅读其协议设计的白皮书:
Protocol Design Whitepaper | ZeroTier Documentation
这里其实没有透漏很多细节, 但是用了颇多专业的网络词汇, 我也不是很懂!
我只能按我的理解, 去大体的描述一下是怎么个过程.
我们还是沿用上一篇文章中的拓扑结构:

如图所示, 用户可以在Zero-Tier的根服务中搭建一个自己的私有网段, 然后将自己需要互连的设备加入到这个网段!
每当我们的设备成功的加入了我们的私有网段, 就表示此设备构建了一条到达根节点的通路!
假设,以上三个设备均加入到了我们的私有网段, 现在Lab-Win11需要连接Bed-Win10:
- 一开始, Lab-Win11并没有达到Bed-Win10的连接, 因此会向上转发, 首先到达月亮根节点(如果有的话),如果月亮节点无法联通两个设备, 则继续向上传递, 直到到达地球根节点
- 根节点将如何到达A的通路告知B, 将如何到达A的通路告知B
- A, B将会根据根节点提供的信息, 来打通并构建对等网络, 这里非常关键的一点, Lab-Win11和Bed-Win10其实都在同一个校园网当中, 因此对等网络将会很快的建立, 并且路径非常短
- 当A与B再次相互访问时, 将会直接走之前构建的通路
所以Zero-Tier的存在一方面是为了帮助我们建立这个通路, 另一方面, 如果两个设备始终没有公用的通道, 那么将会借助根节点进行通讯!
我们可以在路由器Bedroom Router中看到, 用于建立对等网络的配置:

因此Lab-Win11和Bed-Win10其实并不会通过根节点, 所以延迟非常的低!
行星根节点与卫星根节点
行星根节点,即地球节点有且只有一个, 是Tier-Zero为我们搭建的全球互通的服务, 但是在国内访问其实是有较大延迟的, 因此我们可以自己搭建卫星节点, 即月亮节点. 设备将会首先通过卫星节点来构建通路, 如果成功的话, 就不会再经过行星节点!
一般建议搭建两个卫星节点, 一个用于内网的互连互通, 一个用于公网的互联互通. 即:
- 我们在华科校园网的内网中的一个服务器上搭建一个月亮节点, 那么我们校内的所有设备, 都可以仅仅利用这个节点进行穿透!
- 我们可以在阿里云\腾讯云中购买一个服务器, 用于做一个月亮节点, 从而实现低延迟的互连!
使用
步骤概要
明白了上面的内容, 我们就知道,我们需要的操作包括:
- 在Zero-Tier中创建一个网络
- 让我们的设备加入这个网络
- 搭建Moon节点(可选)
访问ZeroTier – Global Area Networking, 注册账号并登录

创建网络, 我们将获得一个Network ID

下载客户端

加入网络
Windows:


Linux
sudo zerotier-one join ##############
回到官网的界面, 授权设备的加入

只要选中auth下面的选框, 等待一会, 就可以看到自动为此设备分配了IP

此时我们在设备上可以看到这个IP:

至此, 所有工作完成!
搭建Moon节点
如何搭建其实并不复杂, 我不想写了,有点累, 希望大家自己探索吧!
这里附上一些可参考的资料:
Private Root Servers | ZeroTier Documentation
ZeroTier 搭建 moon 服务器 – Yogile – 博客园 (cnblogs.com)
后记
实际上Windows远程桌面,也是可以跨平台的, 可以用来控制Linux等, 但是其效果比不上Windows之间的相互控制.
此外, 我们也可以使用手机端的客户端进行远程控制, 当然这也需要手机端的Zero-Tier的支持:

详细的内容, 可以查看官方的手册: