首先 Zerotier 是什么呢? Zerotier 是一拨人为了解决网络复杂,以及因特网过于中心化而提出的解决方案。他们使用点对点 的网络,并且在上面附加一层 VXLAN-like 虚拟网络层 来提高局域网的可见性,安全性。
所以简单来说,Zerotier 通过创建一个虚拟网络,把你的设备添加到这个网络,那么在这个网络内,你的设备就像在同一个路由器内那样可以使用各种端口。
免费版 Zerotier 支持局域网内 100 个设备。Zerotier 支持 Windows、macOS、Linux 三大桌面平台,iOS、Android 两大移动平台,QNAP(威连通)、Synology(群晖)、Western Digital MyCloud NAS(西部数据)三个 NAS 平台,还支持 OpenWrt/LEDE 开源路由器项目。
官网地址:
使用
- 注册 ZeroTier
- 创建 Network 私有局域网,得到一个 16 位的 Network ID
- 在需要加入虚拟局域网的设备上安装各个平台客户端,设备会生成一个 10 位的 ZeroTier address
- 在设备上加入刚刚创建的 Network ID
zerotier-cli join <network id>
(或在网页上添加 ZeroTier address) - 在官网 network 页面上找到设备,在设备前勾选,信任设备,获得局域网 IP
Windows 系统用命令 IPconfig
,Linux/Unix 用命令 ifconfig
,然后会看到一个虚拟网卡,有一个 IP 地址。这个 IP 和在官网看到的 network 下的 IP 是一致的,只有同在该虚拟网络下的机器才能访问。
接下来,你可以设置远程桌面(端口号 3389),或者 FTP 服务(端口 21),或者搭建内网网站(端口 80),各种玩法都可以尝试咯。
图文教程可以参考这篇文章
对比
和 ngrok 和 frp 功能类似,但是 ZeroTier 明显入手简单。ZeroTier 只有客户端开源,服务端并没有开源。而 ngrok 和 frp 都是完全开源。但是 ngrok 和 frp 严重依赖于公网固定 IP 的 VPS,是一个中性化的内网穿透工具,一旦中心挂掉,那么所有的节点都无法工作。Zerotier 帮助用户实现了服务端,虽然安全性有待考验,但至少还是能用状态。
另外很多人提到的 N2N 开上去也不错,不过我还没怎么用过。等以后尝试过后再补上。
Centos7客户端安装
1、编辑添加yum源
1 |
vi /etc/yum.repos.d/zerotier.repo |
修改内容如下
1 2 3 4 5 |
[zerotier] name=ZeroTier, Inc. RPM Release Repository baseurl=http://download.zerotier.com/redhat/el/$releasever enabled=1 gpgcheck=0 |
2、安装zerotier
1 2 |
yum clean all yum install zerotier-one |
3、启动服务
1 |
zerotier-one -d |
4、查看服务状态
1 |
zerotier-cli status |
看到200 info 596811110b 1.2.12 ONLINE表示服务正常
可以使用netstat命令看到所启动的服务端口(这里192.168.1.162是centos本机的IP)
5、加入网络(后面是你自己的ID号)
1 |
zerotier-cli join Network ID a0cbf4b62ad6066c 这个ID是你账号的ID |
加入后会提示200 join OK
进入https://my.zerotier.com/network
刷新几次页面即可看到新加入的主机,然后在前面勾选即可,勾选后Version会变成版本号,并且会分配出一个IP地址
6、主机验证
回到centos7主机上通过ifconfig命令即可看到,此处又多了一个内网IP,此内网IP和zerotier一致,表示配置完成
附:加入、离开、列出网络状态
1 2 3 |
zerotier-cli join Network ID zerotier-cli leave Network ID zerotier-cli listnetworks |
建立中转服务器 moon
Zerotier 的官方服务器在国外,国内客户端使用时延迟较大,网络高峰期时甚至各个客户端节点之间访问不了。此时,“自定义根服务器”,又称 moon 中转服务器就显得非常重要,它的主要功能是通过自定义的服务器作为跳板加速内网机器之间的互相访问。
Zerotier 定义了几个专业名词:
PLANET
行星服务器,Zerotier 各地的根服务器,有日本、新加坡等地moon
卫星级服务器,用户自建的私有根服务器,起到中转加速的作用LEAF
相当于各个枝叶,就是每台连接到该网络的机器节点。
在使用 zerotier-cli listpeers
命令时能看到这几个名词。充当 moon 的机子最好有公网 IP,现在我们尝试用 qnap 搭建一个 moon 中转:
将 MOON 服务器加入 Zerotier 局域网
虽然搭建了 MOON 服务器,我们还是需要借助 zerotier network,也就是需要先通过 zerotier 官网创建一个 network,并且内网节点需要使用 join
命令加入该网络才能实现内网节点的互通,换句话说 MOON 节点只起到了加速的作用,虚拟网络的分配和管理还是需要 zerotier 服务端参与。
1 |
zerotier-cli join <network id> 示例:zerotier-cli join sdf4523424 |
将 MOON 服务器加入 Zerotier 局域网
虽然搭建了 MOON 服务器,我们还是需要借助 zerotier network,也就是需要先通过 zerotier 官网创建一个 network,并且内网节点需要使用 join
命令加入该网络才能实现内网节点的互通,换句话说 MOON 节点只起到了加速的作用,虚拟网络的分配和管理还是需要 zerotier 服务端参与
获取 moon.json 文件
zerotier 安装好之后会带有 zerotier-idtool
这个命令,之后的内容需要依赖该命令。假设现在有一台公网固定 IP 的 VPS,在上面安装完 Zerotier 之后。
1 2 |
cd /var/lib/zerotier-one zerotier-idtool initmoon identity.public > moon.json |
获得 moon.json 文件。查看文件内容,其中 id
为 VPS 的 Zerotier ID。 vi 编辑 moon.json,修改 “stableEndpoints” 为 VPS 的公网的 IP,以 IPv4 为例:
1 |
"stableEndpoints": [ "8.8.8.8/9993" ] |
8.8.8.8 为公网 IP,9993 为 Zerotier 默认端口。
另外,记录下 json 中的 id 值,是一个 10 位的字符串。
生成签名文件
用到上一步中的 moon.json
, 执行
1 |
zerotier-idtool genmoon moon.json |
执行之后生成 000000xxxx.moon
文件。
将 moon 节点加入网络
在 VPS 的 Zerotier 安装目录下(/var/lib/zerotier-one)建立文件夹 moons.d
,将生成的 .moon
文件拷贝进去。
重启 zerotier,重启电脑。至此,VPS 上(moon 服务器)配置完成。
重启 zerotier-one
1 |
sudo killall -9 zerotier-one |
其他客户端机器连接 moon 节点
其他虚拟局域网中的机器想要连接到 moon 节点的话有两种方法,第一种方法就是使用 zerotier-cli orbit
命令。连接 moon 节点方法一,使用之前步骤中 moon.json 文件中的 id 值 (10 位的字符串)
分别在客户端机器里执行:
1 |
zerotier-cli orbit <id> <id> 不要<> 示例 zerotier-cli orbit 16acd3d1b4 16acd3d1b4 |
完成
第二种方法是需要在 /var/lib/zerotier-one
目录下新建 moons.d
文件夹和 moon 节点一样,将 000000xxxx.moon
文件放到其中,并重启 zerotier。
测试
1 |
zerotier-cli listpeers |
如果有 moon 服务器 IP 地址的那一行后面有 moon 字样,证明 moon 节点已经被本机连接。
不同系统下的 ZeroTier 目录位置:
- Windows:
C:\ProgramData\ZeroTier\One
- Macintosh:
/Library/Application\ Support/ZeroTier/One)
- Linux:
/var/lib/zerotier-one
- FreeBSD/OpenBSD:
/var/db/zerotier-one