前言
在外面的时候可能会需要连接家里放的树莓派、智能路由器(Openwrt)、NAS 等设备,但是家里的网络一般没有公网 IP 不能直接连接,这时候就需要使用各种内网穿透的方法连接家中的设备。
简介
常见的内网穿透方法有 OpenVPN、 FRP、Ngrok 等,这些方案一般需要一个有公网 IP 的 VPS 做反向代理进行内网穿透连接,连接的速度取决于做中转代理的 VPS 的最大带宽。一般而言代价比较昂贵。今天介绍一款不需要公网 IP 就可以实现内网穿透d,而且最好的情况下连接的速度可以达到当前带宽的最大速度 —— ZeroTier。
ZeroTier is a smart Ethernet switch for planet Earth.
基本原理介绍
ZeroTier 利用 P2P(Peer to Peer) 的方式进行连接。
根服务器 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/
这里主要介绍一下常见几个平台安装方案:
MacOS
- 直接下载安装包进行安装:ZeroTier One.pkg
- 使用
brew cask
进行安装
1 | brew cask install zerotier-one |
启动和停止
- 启动:
1
sudo launchctl load /Library/LaunchDaemons/com.zerotier.one.plist
- 停止
1
sudo launchctl unload /Library/LaunchDaemons/com.zerotier.one.plist
Linux
运行下列命令进行安装:1
curl -s https://install.zerotier.com | sudo bash
启动和停止
- 启动
1
sudo zerotier-one -d
- 停止
1
ps -ef | grep "zerotier-one -d" | grep -v grep | awk '{print $2}' | xargs kill -9
安卓
下载安装包进行安装:Get in Google Play Store
Ps: 不能访问的同学请自行百度搜索相关安装包下载安装
ZeroTier 使用教程
一般情况下我们可以先使用 ZeroTier 提供的免费服务,不需要自己创建 Moons 服务器。
注册账号
进入官网进行注册: https://my.zerotier.com/
登录后显示如下界面,直接使用默认的免费方案能够连接 100 个设备。
创建网络
创建网络后使用默认配置即可,切记不要将自己的网络设置里的 Access Control
设为公开网络(PUBLIC)!!!
客户端命令行操作网络
1 | # 加入网络 |
其中 Network ID
为刚刚创建网络时生成的值,请根据自己的网络添加。
MacOS 可以直接打开软件加入网络:
网站后台认证
加入网络后需要在网站后台认证后方可使用
测试
选择两台安装好的机器进行测试,互相 Ping 一下分配的 IP 看是否可以连通。有时候会处理连接不通大量丢包的现象,请耐心等待一会儿。