ZeroTier方案内网穿透原理
ZeroTier One的原理跟hamachi基本一样,就是虚拟出一块网卡,连上一个虚拟网络,安装了ZeroTier One客户端的设备可以连入这个网络,经过授权连接成功之后彼此都在同一网段,可以像在局域网一样互相访问,例如访问共享文件夹,web server,ftp server,联机游戏(例如打星际),当然也就包括访问群晖。所以如果你的群晖和你的手机连上了这个网络,不论两台设备具体在哪里,都像同一局域网内,从而实现内网穿透,达到从外网访问内网群晖的目的。
1.访问https://www.zerotier.com/
注册或用gmail登录
2.订阅选项,默认免费(Free)即可。免费的最多支持100个客户端,应该够用了。`
3.接下来直接点击最上面菜单中的Network,然后点击Create,即可创建前述之虚拟网络——也就是一串id号
4.所谓ZeroTier网络/虚拟网络,就是后面你的群晖以及手机等设备要连入的虚拟网络。连到同一个网络的客户端互相可以直接访问。这一串数字id就是这个网络的本体,上面那个furious_rosenbaum是随机生成的网络名,用来描述网络,当你有多个网络的时候方便记忆和识别。
注:上图中右侧蓝色的数字即表示当前连入这个网络的客户端数量。新建网络没有客户端连接,所以是零。
点击My Networks,进入如下页面
网络id就是这个网络的唯一标识,后面客户端要加入网络时就是填入这个id号;
访问控制(Access Control)默认私有,也就是需要授权才能访问(后面客户端安装配置的部分会讲);
IP自动分配,也就是只要连入这个网络的客户端,自动获得此网段IP。
此页面也是管理和监控页面,也就是后面添加或删除客户端,控制那些客户端能加入此网络都可以在此处完成。任何可以联网的设备只要有用户名和密码即可登录ZeroTier One,然后进入此页面对网络进行管理,比如手机,平板,从任何位置都可以访问管理。
注:所谓“客户端”即安装了ZeroTier One客户端软件的设备。本文到目前为止还没有涉及到客户端安装,也就是说,创建自己的帐号/创建虚拟网络不依赖于具体客户端设备或软件安装,以及之后的权限管理也都不涉及特定客户端,任何一个可以联网的系统都可以操作。这个在你实际使用之后会发现非常有用且方便
将页面拉到下面,圈出的部分便是监控和管理的主要操作区域。当前没有客户端连接的时候如下图
详细解释如下,因为刚刚创建网络还没有客户端加入,所以显示“No devices have joined this network",当有客户端加入之后便会在此处看到状态,离线,在线,离线时间等等;后面Manually Add Member就是加入其他成员,也就是一开始注册账号时,你得到的那个内部ID可以用来加入其他人创建的网络,或者邀请其他人加入你的网络。其他的部分都可以忽略掉,不用看,没用,越看越晕。
注:ZeroTier的世界主要有两个概念,一个是用户一个是网络,都是一串数字表示。一个用户可以加入多个网络,多个用户可以加入一个网络。在本文应用实例中,是只有一个人一个网络,所有的设备都是我用自己账号登录ZeroTier后加入自己的网络而连接在一起的。
2.安装Windows客户端
为了演示方便我先在PC电脑上下载ZeroTier的windows客户端安装,然后加入上面创建的网络。
回到ZeroTier网站顶端,点击最上面菜单第一项Download,进入下载页面
安装好后,从菜单运行,不会出主程序窗口,而是在任务栏出现ZeroTier One的小图标,右键点击会出现弹出菜单,在此处点击Join Network…加入刚刚申请的网络
点击 Join Network…会弹出一个小窗,填入新申请这个网络id号,再点击Join即可
重点来了,此时回到页面 刷新一下(或者直接从客户端系统栏图标上右键点出菜单,点击"ZeroTier Central"进入此页面),将页面拉下来,此时就会看之前No Devices have joined this network的地方出现这个客户端,显示online
但是别急,此时客户端并未连上这个虚拟网络,需要进一步授权。在此管理页面勾选前面的复选框(auth?列),此时这个客户端就终于连上这个网络了。
可以看到,勾选之后,左侧虚线变成了绿色实线,表示客户端已经连上这个网络(1d7193******63d387)。另外客户端在此虚拟网络中的IP也已经得到,为10.147.18.99。中间short name和description的部分,我也填入了相应短名称和描述,这样方便在多个客户端连入后,明确知道各个客户端分别是什么。这个很有用,整个ZeroTier世界里面全是数字,就靠这个描述和名称来标识各个客户端了。
在网页端授权之后,用ipconfig查看一下,这个IP就是网页上那个IP。
方法:win+r,输入cmd,出现命令行终端,打“ipconfig"回车即可看到当前系统的网络配置情况。
- 在群晖上安装ZeroTier One客户端
登录后打命令uname -ar,就会出现cpu版本信息,大概长这样:
synology_bromolow_3615xs
这就很明显了,我这个安装在笔记本上的群晖6.1.7,是64位系统,bromolow的版本,下载zerotier-1.2.8r0-syn-bromolow-6.1.spk就可以了,这回终于没有404了,美滋滋啊。
下载页面:
https://download.zerotier.com/RELEASES/
在群晖端安装就相对简单了。登录DSM,打开套件中心,选择手动安装,找到刚刚下载的spk文件,点击下一步
运行后主界面基本没有内容, 唯一的操作就是在右下角[Network ID]填入网络id号,然后点击join。
加入后,刷新ZeroTier 点击网络id进入管理页面
和第一个windows客户端一样,可以看群晖的ZeroTier One客户端已经在线online,但未授权,左侧为虚线。点击复选框勾选授权,此时群晖连入虚拟网络
提示: “在线”(“online”)的意思就是客户端那一侧ZeroTier One软件已经启动正常运行,在ZeroTier网络上可以看到这个客户端;“授权"是指客户端能不能连入当前这个网络,默认是"未授权”(“Not Authorized”)状态,需要网络所有者(即创建相应网络的注册账号,此账号登录ZeroTier后才能访问此页面)授权——勾选左边的复选框
同Windows客户端一样,给群晖客户端填入短名称DSM home表示是家中的群晖主机,在描述中输入Synoloty DSM host,这个可以随便写,只要自己看了知道是那台机器就行。
授权之后群晖就应该已经介入此虚拟网,在PC端打开cmd,命令行ping一下看通了没有。如ZeroTier管理页面所示群晖的ZeroTier网IP是10.147.18.172
ping值很低,可见链路没有经过服务端,两台机器是直接交换数据的(基于ZeroTier那个虚拟网卡)
在此虚拟网测试下群晖,访问10.147.18.172:5000
手机端安装ZeroTier One客户端
启动ZeroTier One应用,点击主界面上方的加号,出现如下界面。输入网络id号,点击Add Network
点击网络id号右下的小开关,会弹出创建VPN连接请求,确认即可
机端的ZeroTier One 安装配置就完成了,接着在网页管理端授权这个客户端使之最终连入虚拟网络。
管理页面配置让手机连入虚拟网络
打开https://my.zerotier.com/network/1d71*****387 刷新,会看到新的手机客户端已经上线,但未被授权。
如法炮制,给手机客户端授权,并输入短名称和描述。勾选授权之后,刷新网页如下:
提示: 随着客户端增多,就能发现短名称和描述的作用。在这个页面通过名称和描述就能很清楚分辨各个客户端是什么。不然对着一串数字很容易搞不清楚谁是谁了。
此时手机、群晖、Windows电脑就像连入同一个路由器wifi下,各自的IP都都在网段10.147.18.*。
测试手机从外网连接家里的群晖
此时人和手机物理上仍然是在家里,但因为手机已经断开家里的宽带,使用数据上网,所以场景等同于手机现在是从外网对家里的群晖进行连接。可以看到手机端已经连上了VPN,打开群晖官家,添加现有设备,即家里的群晖。
输入正确地址端口用户密码,点登录后很快就连上了
切换到桌面模式可以看到更详细状态。DSM mobile中点击齿轮图标,选择桌面模式
群晖端在DSM里面起ZeroTier One可能起不来,或者加入网络加入不了,点击没反应。可能是跟我切换了网络有关。解决办法是通过putty连接到终端,然后再执行命令行命令离开原有网络加入新网络即可。加入成功后网页管理端就能看到新的客户端。授权时候群晖就连入你创建的ZeroTier的网络了
终端查看当前连接
zerotier-cli info
zerotier-cli leave xxxx #xxxx为network id
zerotier-cli join xxxx #xxxx为network id