使用Zerotier组建可以穿透内网的虚拟局域网

大伟哥 提交于 2019-10-26,周六, 10:38

为了更方便地使用电脑工作和生活,大伟哥一直不断地探索,希望能够实现一个方便使用、安全可靠而又成本低的数据共享与使用方案。这个方案应该具备的特性要包括以下几个方面:

  1. 重要文件备份:要在不在同一个局域网的不同电脑和设备上同时保存多份文件副本,防止单台电脑硬盘故障造成数据丢失。
  2. 多设备数据同步:不管哪台设备上的文件改动保存之后,都可以在很短的时间内同步到其他设备上,换台设备也能继续之前的工作进度。
  3. 各台设备都能随时访问内网服务器上的网站服务和业务系统
  4. 跨平台,需要支持Windows,Linux,Android, Mac等各种操作系统
  5. 数据共享的成本要尽可能低,数据同步能够直连(P2P)而不要通过服务器中转,从而加快传输速度而不占用中转服务器带宽。

要实现这个方案, 只有一个工具肯定是不够的,需要多种工具综合使用。今天大伟哥希望通过ZeroTier这个工具的使用,穿透内网实现各设备之间的互相访问。

ZeroTier简介

ZeroTier - Global Area Networking

ZeroTier is a smart programmable Ethernet switch for planet Earth. It allows all networked devices, VMs, containers, and applications to communicate as if they all reside in the same physical data center or cloud region.

ZeroTier把自己定义为一个实现全球局域网的工具,认为它是一个智能的全球智能可编程网络交换机,可以让所有联网的设备、虚拟机、容器和应用之间互相通讯,就像所有这些设备都处于同一个数据中心一样。理想状态下,经过服务器的握手之后,各个设备之间可以建立起P2P的链接,数据不通过服务器中转,就节省了我阿里云vps目前使用frp服务所产生的流量带宽,让vps专注于网站服务了。

按照ZeroTier的文档说明,大伟哥的操作记录如下。

注册ZeroTier并创建网络

使用ZeroTier需要先注册一个ZeroTier的帐号,注册网址是:https://my.zerotier.com/login

填写注册表单以后,需要点击邮件里的激活链接才能成功激活帐号。激活帐号后,默认是免费的订阅,可以让100台设备连接到网络中,这对个人或者小企业来说足够了。

我们需要打开Networks页面,点击Create a Network,来创建一个网络。你会得到一个16位的字符串,如“3efa5cb78a961967”,这是你的网络ID。这个网络ID号比较重要,后面配置的时候会用到。

ZeroTier创建网络

点击你的网络ID会进入网络的设置页面,在这个页面里,你可以修改以下配置:

Name:网络名称,比如Daweibro;

Description:网络的说明,例如“大伟哥的工作和生活虚拟局域网”;

Access Control:设置网络的接入控制。选择Private,就需要后台授权确认才能加入网络,如果选择Public,意味着所有设备都可以加入,这无疑是有风险的,所以建议选择Private;

Advanced:高级设置,这里你可以设置可用的虚拟网段之类的,如果不是很清楚各个参数的用途,保持默认就好了。

以上是注册和配置ZeroTier的简单说明,大伟哥这里不多介绍了,很简单,打开网页看一下就会明白。

安装配置ZeroTier客户端并加入网络

接下来,我们要在需要加入ZeroTier的设备上安装客户端了。ZeroTier的客户端软件名字叫ZeroTierOne,目前版本是1.4.6,有多个平台的版本。

安装Linux客户端并加入网络

不管是Debian系还是RPM系的发行版包括Debian,Ubuntu,CentOS,RHEL,Fedora还是其他的Linux发行版,都可以一行命令就安装好ZeroTier(如果你用的Linux发行版没有已经编译的安装包,你可以自己从源码编译):

curl -s https://install.zerotier.com | sudo bash

当你看到下面的一系列提示的时候,说明你在这台设备上已经成功安装ZeroTier客户端,并拥有了一个10位数的ZeroTier地址,叫做Node ID:03bdd73251。

*** Enabling and starting zerotier-one service...
Synchronizing state of zerotier-one.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable zerotier-one

*** Waiting for identity generation...

*** Success! You are ZeroTier address [ 03bdd73251 ].

接下来我们使用“zerotier-cli join Network ID”命令加入刚才在ZeroTier网站申请到的网络:

sudo zerotier-cli join 3efa5cb78a961967
200 join OK

返回代码“200 join OK”说明成功加入网络了。我们可以刷新ZeroTier网站的Networks页面,查看一下有没有变化:

One device has joined this network.

加入ZeroTier网络

看到自己的ID 03bdd73251已经连接到网络了,因为我们原来配置网络的时候,用的是Private模式,所以要手动选中左侧的Auth列小方框,允许这台设备加入。

安装Windows客户端并加入网络

ZeroTier支持Window 7、Windows Server 2012以及这两个版本以后的操作系统。客户端软件以ZeroTier One.msi安装文件包的方式提供。下载完成后双击安装,启动后会在右下角状态栏显示运行状态。

右键点击可以看到本机新分配的Node ID,还有“Join Network”、“Show Network”的选项。有图形界面,我们很容易就可以加入网络了。

这里大伟哥遇到一点问题,就是加入ZeroTier网络之后,ZeroTier的网站也看到新的Node ID了,也手动授权访问,拿到分配的虚拟IP了。但是两台电脑之间都是Ping不通的。

难道我大清国自有国情在此,号称内网穿透大师的ZeroTier竟然处理不了大清国的超级NAT网络?

反复试了几次之后,发现电脑上多出了一个小窗口,是有关新加入的网络链接的,之前因为开了好多窗口都没有注意到。选择网络类型之后,过了一会,发现能ping通了。现在Windows 7下的网络和共享中心是这样子的:

ZeroTier在Window上的网络连接

看来,刚才不能Ping通应该是还没有确认新的网络连接造成的。

以上配置和测试还是在同一个物理局域网下进行的,建立握手之后,两台机器之间使用ZeroTier分配的虚拟IP地址Ping对方,还算是比较快的:

--- ping statistics ---
109 packets transmitted, 109 received, 0% packet loss, time 108860ms
rtt min/avg/max/mdev = 0.544/19.367/879.298/88.170 ms

安装Android客户端并加入网络

接下来,把大伟哥的Andriod手机安装ZeroTier客户端并加入网络。正常情况下ZeroTier的Android客户端是要通过Google Play商店安装的,但是国内的Google Play应用不好安装,所以大伟哥只能曲线救国,使用了APK Downloader工具把apk软件包先下载下来再安装。目前版本号是1.4.4。

点后侧小加号并输入Network ID,把一个小滑动条拖到右边打开连接,这是会跳出一个新的网络连接请求,确定后会打开一个ZeroTier One的V-P-N链接。还是进入网站后台,把新加入的Node ID给个授权就可以了。

连接情况

目前为止,大伟哥做的测试都是在同一个物理局域网下,每台设备在加入网络后需要延迟一段时间才可以访问到,这个时间不是很确定,大概要十来分钟吧。建立P2P链接以后,访问速度和在局域网内差不多。后面再更新一下从外网连接进来的情况。

 

添加新评论

此字段内容将保密,不会被其他人看见。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。
验证码
发布评论前,请通过下面的验证,以免被当作垃圾评论机器人屏蔽。
15 + 0 =
计算出这道简单的算术题并键入答案。例如、1+3,就输入 4。