使用ZeroTier组建异地虚拟局域网

Posted Naisu Xu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ZeroTier组建异地虚拟局域网相关的知识,希望对你有一定的参考价值。

特征简介


官方网站:https://www.zerotier.com/

ZeroTier可以让你把各种接入网络的终端设备加入到一个虚拟局域网(VLAN)中,这样这些设备间可以通过在这个虚拟局域网中的IP地址相互访问。

在网络情况较好的情况下ZeroTier建立的虚拟局域网中各个设备间将以P2P的形式通讯,网络不好的情况下将通过ZeroTier的服务器转发数据进行通讯。

ZeroTier基础使用是免费的,花钱主要可以增加网络中可连接设备数量,但免费版目前可使用50台设备(以前是100台),一般使用已经足够了(实在不行多注册几个账号)。

ZeroTier支持的设备非常多:Windows、MacOS 、iosandroid这些系统都有图形化的客户端可用;常见的Linux也有一行命令安装的脚本;常见的NAS系统Synology、QNAP、WD MyCloud都有安装说明;可以支持OpenWRT;可以通过Docker安装。如果上述方式都不行的话还有开放的源码。

ZeroTier一般使用不需要公网服务器,官方有提供公网服务。你也可以自己租公网服务器建立Moon节点,提升网络接入性能。

基础使用

ZeroTier的使用非常简单,只要下面几步即可:

  • 管理者注册并登录
  • 管理者创建网络
  • 下载与安装客户端软件
  • 客户端加入网络
  • 管理者授权客户端接入网络

上面的演示中可以看到在Linxu中的客户端都是使用命令来操作,这里对相关的几个操作命令进行记录:

  • 安装客户端
    curl -s https://install.zerotier.com | sudo bash
  • 加入网络
    sudo zerotier-cli join ################ 其中################为Network ID
  • 查看网络状态
    sudo zerotier-cli listnetworks
  • 离开网络
    sudo zerotier-cli leave ################ 其中################为需要离开的Network ID

基础使用中相关的问题可以参考下面链接:
https://zerotier.atlassian.net/wiki/spaces/SD/overview
特别是网络相关问题可以重点参考 Getting Started with ZeroTier > Router Configuration Tips 章节内容。

网络问题通常和很多环节有关,比如网络运营商,比如家里网络布置,比如要上网的设备本身问题等。

通常本地的宽带比4G、5G这些手机网络有更好的稳定性;家里路由器层级越少网络性能也会越好;设备本身注意防火墙、安全软件这些。

搭建moon节点

使用ZeroTier设备在加入网络与网络中其它设备通讯时需要先通过ZeroTier服务器建立连接,但如果设备访问ZeroTier服务器网络不佳的话建立连接就会很慢甚至失败。我们可以搭建自己的服务器(ZeroTier中这个被称为moon)来改善这个情况。

需要声明的一点是moon并非只能在公网的设备中建立,你可以将它部署在内网的设备上,但这样的话只有这个内网以及其下面子网中的设备可以享受这个加速效果。所以通常来说moon最好部署在公网服务器上。

服务器搭建moon节点

  • 租用云服务器
    基本上组个最低性能的就行,系统使用Ubuntu、Debian、CentOS这些都行
    云服务器记得在安全组里授权相关规则,默认情况下zerotier会用到9993端口号进行UDP通讯

    系统的防火墙可能也需要设置,比如ubuntu中使用 ufw allow 9993/udp 来开放端口
  • 安装客户端软件
    从这里开始的所有操作都用root账户进行,非root账户记得命令前加sudo
    curl -s https://install.zerotier.com | sudo bash 这里安装成功才能进行下面步骤
  • 生成moon.json文件模板
    cd /var/lib/zerotier-one/ 进入软件目录
    zerotier-idtool initmoon identity.public >>moon.json
  • 修改moon.json文件
    使用编辑器打开上面的moon.json文件(比如 nano moon.json)大概是下面这个样子的:
    {
     "id": "##########",
     "objtype": "world",
     "roots": [
      {
       "identity": "..."
       "stableEndpoints": []
      }
     ],
     "signingKey": "..."
     "signingKey_SECRET": "..."
     "updatesMustBeSignedBy": "..."
     "worldType": "moon"
    }
    
    记住最上面的id,这个后面会用到
    将其中的stableEndpoints修改为如下内容:
    "stableEndpoints": ["10.0.0.2/9993"]
    方括号中是你的真实IP地址和ZeroTier默认使用的UDP端口号,如果你有IPv6地址也可以使用下面方式:
    "stableEndpoints": ["10.0.0.2/9993","2001:abcd:abcd::1/9993"]
    修改完成后保存退出
  • 使用moon.json文件生成.moon文件
    zerotier-idtool genmoon moon.json
    使用上面命令后会生成一个类似 000000##########.moon 这样名称的文件
  • 使moon节点生效
    mkdir moons.d 创建文件夹
    mv 000000##########.moon moons.d/ 将.moon文件移动到moons.d文件夹中
    /etc/init.d/zerotier-one restart 重启服务,如果这样重启不行的话试试重启服务器

客户端使用moon节点

客户端使用moon节点很简单,只要知道前面moon.json文件中的id即可,然后使用下面指令加入moon节点:
zerotier-cli orbit ########## ########## ##########为前面的id,重复两遍,中间用空格隔开

添加成功后稍等一会儿后可以使用 zerotier-cli listpeers 查看节点状况,使用 zerotier-cli listmoons 查看moon信息

在linux中命令前面可能需要加sudo:

在window中需要使用管理员方式运行命令窗口再执行命令:

通讯测试

通讯测试看看就好,别当真。

这里测试都是用了阿里云上海5M服务器搭建moon节点的情况下进行的,测试地点都在上海,具体的测试见下面。

测试一:


同一个内网中测试其实没啥意思,无非就是组了虚拟局域网功能。上面文件传输的速度受限于树莓派上级路由器的速度。

测试二:


这个是比较常用的场景,比如公司和家里。上面测试中从桌面移动文件到share受限于WIN10电脑所在网络宽带的上行速度。这个速度一般用用也蛮不错了,毕竟不依赖公网服务器的带宽。

测试三:


手机的网是真的烂,感觉运营商拦截了很多东西,别看上面传文件能有几百K的速度,大部分走的都是moon节点服务器的带宽。试过用联通4G,也一样烂。

后记

ZeroTier整体使用还是很简单的,稍稍还有一些地方不怎么好用,比如私有网络中客户端第一次接入时需要管理员在网页认证,如果这时候网页上不去就没法了。再比如移动端目前没有方便的使用moon节点的方法。不过总体来说ZeroTier使用起来还是挺不错的,可多内容可以参考下面文档:
https://www.zerotier.com/manual/

以上是关于使用ZeroTier组建异地虚拟局域网的主要内容,如果未能解决你的问题,请参考以下文章

目前是不是一定需要公网IP才能组建异地局域网?

《畅玩NAS》第8章 ZeroTier组建局域网

怎样快速组建异地虚拟局域网

如何快速组建异地局域网

纯小白虚拟局域网组建方法分享

异地组建局域网