ZeroTier使用教程
今天介绍一款不需要公网 IP 实现内网穿透的工具 ZeroTier
。ZeroTier
是一个专门用来建立点对点虚拟专用网(P2P VPN
)的工具,它提供在线管理界面和全平台的客户端,不需要复杂设置,只要安装客户端并加入到自己创建的网络即可。
- 官方网站地址:https://www.zerotier.com
- 项目地址:https://github.com/zerotier
ZeroTier 原理
ZeroTier
这一类 P2P VPN
是在互联网的基础上将自己的所有设备组成一个私有的网络,可以理解为互联网连接的局域网。最常见的场景就是在公司可以用手机直接访问家里的 NAS
,而且是点对点直连,数据传输并不经由第三方服务器中转。
Zerotier
在多设备之间建立了一个 Peer to Peer VPN(P2PVPN)
连接,如:在笔记本电脑、台式机、嵌入式设备、云资源和应用。这些设备只需要通过 ZeroTier One
( ZeroTier 的客户端) 在不同设备之间建立直接连接,即使它们位于 NAT
之后。连接到虚拟 LAN
的任何计算机和设备通常通过 NAT
或路由器设备与 Internet
连接,ZeroTier One
使用 STUN
和隧道来建立 NAT
后设备之间的 VPN
直连。
简单一点说,Zerotier
就是通过 P2P
等方式实现形如交换机或路由器上 LAN
设备的内网互联。
ZeroTier
官方搭建了一个行星根服务器叫做 地球 Earth
,这个行星根服务器是唯一且是免费的,它记录了所有的路径信息,一般情况下大家都直接用的这个。
行星根服务器 R 记录了所有的路径信息,设备 A 能通过 ZeroTier
唯一地址标识找到需要连接的设备 B。这个过程如下:
- A 想要将数据包发送到 B,但由于它没有直接路径,因此将其向上发送到 R。
- 如果 R 有直接链接到 B,它会转发数据包给 B。否则它会继续向上游发送数据包,直到达到行星根 (planet)。行星根知道所有节点,所以如果 B 在线,最终数据包将到达 B。
- R 还向 A 发送一个消息,包含有关它如何到达 B 的提示。同时,将消息发给 B,通知 B 它如何到达 A。
- A 和 B 获取它们的消息并尝试相互发送测试消息,可能会对 NAT 或状态防火墙进行穿透。如果这样可以建立直接链路,则不再需要中继。
- 如果无法建立直接路径,则通信可以继续中继 (速度慢)
除此之外还有 12 个遍布全球的根服务器,这些是收费的服务。由于 Earth 在国外,如果使用免费套餐,连接时的延迟可能会很高。不过 ZeroTier
能自己创建根服务器 月球 Moons
,这样我们就能在大局域网中得到更好的体验了。
注册与客户端安装
注册帐号
登录官网注册即可,填写你的邮箱和密码。
注册之后是这样的,保持默认就好。每个免费套餐可以享受 25
台设备的内网互联,一般够用了。
网络配置
注册好之后,我们来建立一个 Network 并分配内网网段。
创建一个新的网络之后,我们会得到一个 Network ID
。这是客户端连接到行星服务器的唯一识别码,需要牢记。
客户端配置
ZeroTier
支持 Windows
、macOS
、Linux
三大桌面平台,iOS
、Android
两大移动平台,QNAP(威连通)
、Synology(群晖)
、Western Digital MyCloud NAS(西部数据)
三个 NAS
平台,还支持 OpenWrt/LEDE
开源路由器项目。
下载地址:https://www.zerotier.com/download/
安装完客户端后,使用命令行进行操作的方法如下:
# 启动
zerotier-one -d
# 获取地址和服务状态
zerotier-cli status
# 加入、离开、列出网络
zerotier-cli join # Network ID
zerotier-cli leave # Network ID
zerotier-cli listnetworks
这时会根据 MAC
地址分配给设备一个唯一认证字符串 Node ID
,可用来在 Web
配置界面保留该设备不被删除以及帮助我们区分设备。
认证设备和组网
回到一开始注册的网页,会发现设备列表当中新增了两台设备,在前面的方框打钩即可。根据 Node ID
判断设备的类型,牢记设备被分配的 IP
。