zerotier内网穿透功能简要介绍及简明设置方法

由于工作关系,经常需要访问不同地点计算机里的资料,原来的解决方案为云盘同步,但由于众多云盘歇菜,存活的又限速,还有隐私风险等因素,不得不放弃这种免费方案。于是还有一种自己搭建私有云的方案(在路由器、NAS、小主机等设备上通过开源软件搭建——不是本文讨论主题,略过),或者远程控制方案(teamviewer却总是提示商用,无法安心的使用不得不放弃;还有anydesk、logmein等等也提供免费远程控制),但由于需要通过其设在国外的服务器中转,速度是个无法忍受的问题。于是寻找替代解决方案,终于让我找到了一个可以充分发挥想象优势,享受无限折腾乐趣的内网穿透服务——ZeroTier,下面就简要介绍一下它的基本功能:

一、主要功能:将安装ZeroTier软件的所有设备统一到一个虚拟局域网,用虚拟局域网ip和内网ip均可以无缝访问虚拟局域网中的任一台设备,并且拥有如下优势:

①. 节点之间属于 P2P UDP 直连,无需服务器中转流量,互联速度仅仅取决于你的和其他节点的直连上传带宽(当然握手之初是需要经过中心服务器来当媒婆的,之后就是UDP直连了!);

②. 节点之间的流量是加密和压缩的,所以有带宽放大的功能;

③. 配置简单,只需要填入一个 Network ID ,然后管理员在 Zerotier 官网管理页面允许通过一次,以后就直接允许连上了。

④.连上后各个虚拟网卡相当于同一局域网内,无应用的限制了——至于有哪些应用场景就需要读者你自己脑洞大开了。

⑤.关键的一点,只要你想要的连接的节点在100以内,所有功能都是免费的!

二、简易设置:首先到官网ZeroTier.com去注册账号(https://my.zerotier.com/network),并新建你的Network ID(官网自动生成ID,你可以为它设置一个好记的名字并添加说明以便于记忆)。然后在你需要组建成局域网的设备上安装ZeroTier客户端(官网下载和安装指南地址),填入之前生成的Network ID,并到官网管理中心将设备对应的【Auth】选项进行勾选以将其并入该Network ID的局域网。

三、扩展应用:前述设置需要在每一个组网的设备上安装ZeroTier客户端并在官网管理中心添加许可,虽然已经够简单了,但万一某个设备的客户端被禁止了或更新系统后不能正常运行的话,就不能相互连通了。于是有一种想法,在需要组网的设备端上级路由器上安装ZeroTier客户端并在官网管理中心添加许可、设置路由表,这样安装了ZeroTier客户端的所有路由器下的所有设备都处在同一局域网下啰。
1、官网注册并新建Network ID,同前。
2、在路由器上安装并激活ZeroTier(以openwrt软路由为例,其它的可自行搜索):
(1) ssh进入路由器shell,运行opkg update && opkg install zerotier进行安装。(我用的是koolshare的openwrt固件,虽然已经在酷软中心集成了ZeroTier插件,但不推荐在酷软安装,有时会出一些莫名其妙的错误,还是如前述手动安装为好)
(2) ssh中运行zerotier-cli join ID(即你在官网建立的Network ID),或者直接修改/etc/config/zerotier配置文件(若ssh中运行zerotier-cli join ID出错也按此方法修改并保存此配置文件),将option enabled ‘0’的0改为1,list join ‘**********’改为你自己的Network ID。
(3) 重启路由器。
(4) 到官网管理中心勾选对应路由器的【Auth】项
(5) 添加路由表:

(6) 路由器防火墙设置,在【网络】→【防火墙】→【自定义规则】中添加如下规则,【重启防火墙】:
iptables -I FORWARD -i ztyqbub6jp -j ACCEPT
iptables -I FORWARD -o ztyqbub6jp -j ACCEPT
iptables -t nat -I POSTROUTING -o ztyqbub6jp -j MASQUERADE
其中的“ztyqbub6jp”在不同的路由器中不一样,你可以在路由器ssh环境中用zerotier-cli listnetworks查询。
(7)  如此设置后在192.168.11.1路由器下的设备可以以192.168.191.206或192.168.12.1访问另外一台路由器,同时可以192.168.12.X访问192.168.12.1路由器下的其它设备;反之亦然。
3、应用场景:
(1) 可以远程登录管理路由器了
(2) 可以将群晖nas与其它设备组成内网,文件同步再也不看quickconnect的龟速眼神了
(3) 两端的linux设备都可以远程ssh登录配置了
(4) 两端的windows设备可以用微软自带的远程桌面功能了(先在【计算机】→【属性】→【系统】→【远程设置】中允许远程桌面连接,再在控制端允许窗口输入MSTSC运行远程桌面连接,输入用户名、密码即可像本地计算机一样操控远程计算机了),其速度杠杠的(除了握手阶段需要zerotier中心服务器牵手之外,其余时间都是UDP直连,取决于两端的上传速度)
(5) 可以通过(安装了zerotier的)路由器在需要的时候远程唤醒计算机而不需要一直开着计算机了
(6)可以愉快的在没有公网ip的家里安装监控摄像头了?
(7)……有待读者发掘并分享
4、关于速度,前面已经说了,UDP直连,仅握手阶段需要中心服务器,同时官方还给出了让用户自行在有公网ip的机器上搭建moon卫星级服务器,供带组建内网的其它设备握手使用以提高握手速度和稳定性,感兴趣和有条件的朋友可以去探索和折腾了。

四、后记
1、注意客户端安装、配置zerotier和官网管理中心添加许可、添加路由表的顺序以及ip对应设置情况,万一哪一步操作错误导致设备不能上网的话,可以用zerotier-cli leave ID先让该不能上网的设备断开与zerotier服务器的连接,再重新join和在官网管理中心添加许可、添加路由表。
2、由于我的openwrt软路由之前安装了entware,导致opkg install zerotier是在entware源而非openwrt源,且安装路径也是外接磁盘而非路由器内储存,导致无法正常运行,于是我只好在/etc/rc.local配置文件中将自动加载entware的相关设置注释掉,并将/etc/profile中为entware添加的. /opt/etc/profile注释掉就可以正常安装和运行了。
3、关于群晖等NAS安装zerotier客户端:在官网下载(含安装指南地址)与你nas及其软件版本对应的客户端,然后在nas的套件中心中手动上传客户端进行安装。