无公网IP又想访问家里的设备?用ZeroTier One组建个人超级内网


图片

前言

有时候需要在外边访问家里的设备,而众所周知由于IPv4地址的枯竭,随着可用的公网 IPv4 地址越来越少,现在的运营商基本不给家用宽带分配公网 IP 了。如果你想通过外网访问到内网的资源,目前只能采用内网穿透的软件来实现。说到穿透的时候,大家都会提到 DDNS(动态域名解析),或者使用反向代理的方式如 FRP、Ngrok。。这样你就不得不租用一个拥有公网 IP 的服务器才能实现上述需求,显然增加了不少使用成本。

首先说说 DDNS,这种方式使用起来很方便,只要设置好相应的服务提供商的 API,就能做到每次 IP 变化后自动解析,这样不管家里 IP 怎么变,用域名都能访问回家。这里最大的硬伤就是公网IP,有些朋友的带宽就是个大局域网,路由器只能获取到上一级内网的 IP,这时就 GG 了。

然后是 FRP、Ngrok 这样的反向代理程序,通过服务器转发数据来达到外网访问的目的,这样就需要自己有个 VPS,或者使用他人搭建的服务,据我所知的免费服务都是限速的,要是自己搭建的话,体验就要看服务器的网络质量了。

现在我们就来看看,不需要公网 IP,不依赖服务端网络性能的 ZeroTier OneZeroTier One是一个专门用来建立点对点虚拟专用网(P2P VPN)的工具,它提供在线管理界面和全平台的客户端,不需要复杂设置,只要安装客户端并加入到自己创建的网络即可。

ZeroTier One 原理

ZeroTier 官网上说

ZeroTier is a smart Ethernet switch for planet Earth.

!!! 适用于地球的智能网络交换机 …

它是一个分布式网络虚拟机管理程序,建立在加密安全的全球对等网络之上。它提供与企业 SDN 交换机同等的高级网络虚拟化和管理功能,而且可以跨本地和广域网并连接几乎任何类型的应用程序或设备。

好吧😥,有点牛逼

而说到主要功能,就是可以把多个不同网络的设备连接在一起,用来就像在一个局域网下

例如,我在路由器上装了 ZeroTier One,路由器挂了一个硬盘,而现在我在外边想要访问这个硬盘,那么只需要运行电脑上的 ZeroTier One,就能通过 Samba、FTP 等方式访问硬盘,而且看起来就像我就在家里一样。

Zerotier One 这一类 P2P VPN 是在互联网的基础上将自己的所有设备组成一个私有的网络,可以理解为互联网连接的局域网。最常见的场景就是在公司可以用手机直接访问家里的 NAS,而且是点对点直连,数据传输并不经由第三方服务器中转。

Zerotier One 在多设备之间建立了一个 Peer to Peer VPN(P2PVPN) 连接,如:在笔记本电脑、台式机、嵌入式设备、云资源和应用。这些设备只需要通过 ZeroTier One ( ZeroTier 的客户端) 在不同设备之间建立直接连接,即使它们位于 NAT 之后。连接到虚拟 LAN 的任何计算机和设备通常通过 NAT 或路由器设备与 Internet 连接,ZeroTier One 使用 STUN 和隧道来建立 NAT 后设备之间的 VPN 直连。

简单一点说,Zerotier One 就是通过 P2P 等方式实现形如交换机或路由器上 LAN 设备的内网互联。

图片

ZeroTier One的优势

相比其他流行方案,ZeroTier One有这么几个优势:

  • 免费版支持客户端多。连入同一个网络的客户端不超过100个就都免费
  • 速度快,p2p模式。客户端联通之后流量基本不经过服务端/superNode而是点对点传输,传输速度取决于你设备所在宽带上行带宽以及手机端4g上网的速度
  • 管理配置简单。不要被全英文的界面吓到,明白原理之后安装配置极其简单

最重要的是支持多种平台。支持win、mac、安卓、苹果,以及多种发型版Linux,比如群晖系统(这也是选择ZeroTier One的重要原因),如下图,可以下载spk文件直接在群晖中部署(这里有一个大坑,后面会说到

ZeroTier使用教程

  ZeroTier One是跨平台的,能安装在几乎任何平台

Windows、macOS、Linux、iOS、Android、QNAP、Synology、西数 MyCloud NAS,下载地址:https://www.zerotier.com/download.shtml

路由器推荐安装 Entware 后使用 opkg install zerotier 命令安装

  注册

地址:https://my.zerotier.com/

进入页面后,首先得注册一个账号吧,点Register

图片

输入你的基本信息,邮件地址,密码,注册完成。

或者可以直接使用Google,GitHub,Microsoft账号一键登录

图片

注册之后是这样的,保持默认就好,免费套餐能连接 50 个设备,以前是100个,不过50个设备个人使用足够用了

图片

创建网络

接下来直接点击最上面菜单中的Network,然后点击Create,即可创建前述之虚拟网络——也就是一串id号

图片

所谓ZeroTier网络/虚拟网络,就是后面你的群晖以及手机等设备要连入的虚拟网络。连到同一个网络的客户端互相可以直接访问。这一串数字id就是这个网络的本体,上面那个furious_rosenbaum是随机生成的网络名,用来描述网络,当你有多个网络的时候方便记忆和识别。

注:上图中右侧绿色和蓝色的数字分别表示当前连入这个网络的客户端数量和总共创建了多少个设备。新建网络没有客户端连接,所以是零。

创建一个新的网络之后,我们得到一个 Network ID,这个在后面的设备连接时需要用到,点击刚刚创建的网络我们可以设置更多选项

图片

理论上这里也是不用修改任何地方,几处重点信息也圈出来了:

  • 网络id就是这个网络的唯一标识,后面客户端要加入网络时就是填入这个id号;
  • 访问控制(Access Control)默认私有,也就是需要授权才能访问(后面客户端安装配置的部分会讲);图片

下面IPv4 的设置就是分配设备内网 IP 网段,其他的设置可以在 Setting help 里看到说明,不了解的不建议乱设置,如果不小心把自己的网络暴露在外部,会相当危险

   此页面也是管理和监控页面,也就是后面添加或删除客户端,控制那些客户端能加入此网络都可以在此处完成。任何可以联网的设备只要有用户名和密码即可登录ZeroTier One,然后进入此页面对网络进行管理,比如手机,平板,从任何位置都可以访问管理。

注:所谓“客户端”即安装了ZeroTier One客户端软件的设备。本文到目前为止还没有涉及到客户端安装,也就是说,创建自己的帐号/创建虚拟网络不依赖于具体客户端设备或软件安装,以及之后的权限管理也都不涉及特定客户端,任何一个可以联网的系统都可以操作。这个在你实际使用之后会发现非常有用且方便

将页面拉到下面,圈出的部分便是监控和管理的主要操作区域。当前没有客户端连接的时候如下图

图片

安装Windows客户端

为了演示方便我先在PC电脑上下载ZeroTier的windows客户端安装,然后加入上面创建的网络。

回到ZeroTier网站顶端,点击最上面菜单第一项Download,进入下载页面,各种系统的版本都可以下载。

图片

这里以Windows版为例,下载后一路默认设定安装即可。

图片

安装软件的过程可以看做往系统插了一张新网卡,并把网卡连了一根网线,此网线通往ZeroTier的专有网络,逻辑上独立于你当前局域网之外。如果弹出如下窗口,点击是。

图片

安装结束后可能会出现的提示,表示新建立了一个以太网口

然后查看系统设备会看到新出现的虚拟网卡ZeroTier One Virtual Port

图片

安装好后,从菜单运行,不会出主程序窗口,而是在任务栏出现ZeroTier One的小图标,右键点击会出现弹出菜单,在此处点击Join Network...加入刚刚申请的网络

图片

注:因为我这台Windows主机已经安装过ZeroTier One,所以已已经有节点信息,和曾经加入的网络(id号),为了安全起见就涂抹掉了(我尝试过卸载重装还是会有这些信息,暂时不管了),但不影响你加入新的网络。在此例中就是新申请的网络 35c192******8fd5

点击 Join Network...会弹出一个小窗,填入新申请这个网络id号,再点击Join即可

图片

重点来了,此时回到页面 刷新一下(或者直接从客户端系统栏图标上右键点出菜单,点击"ZeroTier Central"进入此页面),将页面拉下来,此时就会看之前No Devices have joined this network的地方出现这个客户端

后台设置默认是需要 Auth 才能连接的,在客户端申请加入网络后,需要在后台允许一下

图片

在网页端授权之后,用ipconfig查看一下,这个IP就是网页上那个IP。

方法:win+r,输入cmd,出现命令行终端,打“ipconfig"回车即可看到当前系统的网络配置情况。

图片

手机端安装ZeroTier One客户端

推荐用苹果,安卓系统正常安装流程需要访问google play。为了测试两个系统都安装,现在用安卓系统演示。

在手机上安装ZeroTier One安卓客户端,装好之后大概这个样子

图片

我是科学上网用google play安装的

用google play装,启动之前先把手机wifi关掉,使用数据上网

图片

启动ZeroTier One应用,点击主界面上方的加号,出现如下界面。输入网络id号,点击Add Network

图片

运行ZeroTier One App

回到主界面会看到新添加的网络。上面那个网络是我之前创建的,也是我实际在用的,暂时可以忽略掉。

我以之前申请的用来做演示的网络,现在加入的是这个网络。

图片

点击开关打开网络

点击网络id号右下的小开关,会弹出创建VPN连接请求,确认即可

图片

刷新,会看到新的手机客户端已经上线,但未被授权。授权后,安卓手机就会自动上线,并获取IP地址

图片

此时手机、Windows电脑就像连入同一个路由器wifi下,各自的IP都都在网段

测试手机从外网连接家里的设备

此时人和手机物理上仍然是在家里,但因为手机已经断开家里的宽带,使用数据上网,所以场景等同于手机现在是从外网对家里的设备进行连接。可以看到手机端已经连上了VPN。

图片

使用远程桌面访问另一台服务器也没问题。

图片

结语

目前 IPv6 还没得到普及,虽然我这里已经能有 IPv6 地址并且能 IPv6 站点了,奈何不是固定 IP,也不知道哪时才能人手一个固定 IP。就目前情况来看,使用 ZeroTier 来做内网穿透还是不错的,使用门槛较低,可用性也还行,值得一试。

ZeroTier的改进是管理虚拟网络是独立于客户端的,可以完全通过网页完成。安装好之后,所有客户端都加入同一个网络id,则如同连入同一个路由器,处于同一个局域网。那么互相访问就跟在局域网一样,在外连接群晖或者其他设备就跟在家连接一样了,只需要通过ZeroTier网络里的IP连接即可。