放弃moon节点,直接搭建Zerotier根服务器
外网访问家庭局域网方案
随着NAS、软路由的普及,越来越多的人产生了外网访问家庭网络的需求。当前访问家庭网络的方案主要分为三类:
1.公网ip
这一类当然是最方便的,也是花费较少的方案。可以通过ip地址直接访问家庭网络,即使是变动的公网ip,也只需购买域名配置DDNS即可。但随着政策的加严,获取ipv4公网ip的渠道越来越少,之前寄托了很多希望的ipv6现在看来也存在诸多问题。
2.隧道穿透
这一类是通过一台具有公网ip的机器(通常是一台云服务器)作为中转,在这台机器与家庭局域网内的机器建立隧道,借由公网下的服务器作为跳板访问家庭网络。这一类服务有自建的,如Frp、NPS等,也有商家提供服务的,如SakuraFrp、DDNSTO等。
3.虚拟局域网
这一类更适合私人或小团体使用,其原理是建立一个虚拟的广域网,并为加入这个虚拟网络的设备分配一个虚拟的ip,并在这个广域网内通过虚拟ip互访。最知名的代表就是Zerotier,也是我今天所要介绍的
Zerotier的优缺点
通俗来讲就是 Peer to Peer (P2P) ,ZeroTier 根服务器记录请求路径来做类似于DNS的解析。主要功能,就是可以把多个不同网络的设备连接在一起,用来就像在一个局域网下 。
Zerotier的优点在于其部署十分简便,只需在zerotier官网注册登陆并创建网络,在自己的设备安装客户端加入网络后,zerotier就会自动分配虚拟ip,无需了解ip、端口等配置。
但很可惜,zerotier的根服务器都在国外,我们到zerotier服务器需要经过层层的NAT中转,这导致我们通过zerotier网络互访时不仅存在较大的延迟,而且在网络高峰段非常容易断连。
在之前,对于这种情况,我们的解决方案是在国内的服务器上搭建一个zerotier的moon中转节点,作为zerotier根服务器的代理加速,但加速效果有好有坏(有的人说速度很快,但我的中转就很慢),而且这种方式的一个问题就是,安卓端的手机无法加入moon节点。这个问题很快就被解决了,kaaass大佬做了一个ZerotierFix的app,相比于官方增加了可以加入moon节点的功能。
Zerotier-planet
虽然大佬的app解决了安卓客户端不能加入moon节点的问题,但moon节点的搭建以及客户端的配置仍然不是一个比较简单的过程,又要配置服务器端又要配置客户端,zerotier便捷性的优点就体现不出来了。
前段时间,小众软件推荐的一分钟自建 zerotier-planet 行星服务器吸引了我,简单浏览了一下,发现过程是真的很简单。jonnyan404大佬的这个项目是基于另一个项目ztncui优化而来,简单而言就是用docker部署一个独立的zerotier虚拟网络。部署这个项目的全部准备只有在你的公网服务器上安装好docker和docker-compose。
jonnyan404大佬已经写好了zerotier-planet的docker配置脚本,我们只需登陆服务器执行以下几个命令
1. 从gitee仓库下载docker配置文件
git clone https://gitee.com/Jonnyan404/zerotier-planet
2. 进入下载的项目文件夹
cd zerotier-planet
3. docker安装zerotier-planet,如果服务器是Ubuntu系统,记得命令前加上 sudo
docker-compose up -d
4. 然后就可以访问 http://ip:4000 访问web界面了(记得防火墙开放4000端口)
默认用户名:admin 默认密码:mrdoc.fun
建议登陆后立即创建新用户,并切换到新用户登陆,删除默认的admin账户,以保证安全
接下来的操作与官方版的zerotier没有太大区别了,这里新建一个虚拟网络test,ID是
119c41e47a8a0433。
Private: 设置对设备的访问控制权,默认勾选上
Easy setup: 设置虚拟广域网段,可以自己设置
Routes: 设置路由,一般就只有一个默认的路由(也就是刚刚设置的网段),稍后介绍它的扩展用法
Assignment Pools: ip地址分配,你可以指定该网段下虚拟ip可供分配的范围
接下来,只要在自己的设备上安装zerotier的客户端,然后通过ID加入网络,就可以在该页面刷新出设备列表了,为新设备勾选Authorized即可分配虚拟的ip地址了。
基于zerotier网络可以实现许多功能,例如windows端的远程桌面连接,ssh连接linux服务器,访问个人服务器上的博客
应用扩展-允许openwrt客户端自动NAT
尽管zerotier已经支持相当多的平台了,但仍有一些设备不受支持,比如我升级到DSM 7.0的小猫盘。为了让这些无法安装zerotier客户端的设备也加入到这个虚拟网络中,我们需要一个支持zerotier的openwrt路由器。以我的R2S为例
zerotier设置
1. 首先将R2S也加入虚拟网络,在openwrt后台管理中填入虚拟网络ID,并允许客户端NAT。
2. 设置虚拟网络路由
我的R2S分到的虚拟ip为10.81.33.114,在Routes我们再新建一个路由
我这里已经设置过了,Target应根据路由器的网段来决定,比如我的R2S局域网访问地址为192.168.2.1,则Target则应填192.168.2.0/24,Gateway则填R2S分配到的虚拟ip,这里是10.81.33.114。
openwrt设置
除了zerotier上的设置,还要对openwrt进行设置,使得流量可以通过虚拟广域网传播
我们在openwrt 网络>接口 里新增一个zerotier接口,系统会为其分配一个zt开头的物理接口,我的是zt6xtbbu66。对该接口进行设置,传输协议选择静态地址,ipv4地址填分配的虚拟ip,ipv4子网掩码是默认的225.225.225.0,在防火墙设置中创建/分配防火墙区域选择lan
接着在 网络>防火墙 里自定义防火墙规则,增加以下规则
iptables -I FORWARD -i zt6xtbbu66 -j ACCEPT
iptables -I FORWARD -o zt6xtbbu66 -j ACCEPT
iptables -t nat -I POSTROUTING -o zt6xtbbu66 -j MASQUERADE
记得将zt6xtbbu66换成你自己对应的物理接口,重启防火墙
测试
这个时候,R2S下的设备应当已经加入zerotier广域网了,以我的小猫盘为例,在局域网下它的访问地址为192.168.2.147:5000,在安卓手机上通过ZerotierOne连接zerotier广域网,并断开WiFi,在浏览器中访问192.168.2.147:5000
访问成功,表明小猫盘已经通过R2S接入到局域网了
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
Gavin_C
校验提示文案
wayes
校验提示文案
ecomics
校验提示文案
积雪之峰
校验提示文案
Dio4Dust
校验提示文案
最爱早睡的人
校验提示文案
值友4348360222
校验提示文案
telanx
校验提示文案
Kleisth
校验提示文案
非著名坐家
校验提示文案
tanpengsccd
校验提示文案
龙骑兵玉
校验提示文案
便宜不常有
校验提示文案
值友6172068970
校验提示文案
苏力粟
校验提示文案
孙阚
校验提示文案
牧野边
校验提示文案
huzheyi
校验提示文案
24k双花红棍
校验提示文案
请叫我狼先生
校验提示文案
上帝真主老天爷
校验提示文案
xienet
校验提示文案
值友8091783212
校验提示文案
值友7830119732
校验提示文案
值友7830119732
校验提示文案
huzheyi
校验提示文案
yellowhill
校验提示文案
Yeah先生
校验提示文案
chancat
校验提示文案
Marshmallow2016
校验提示文案
符文石
校验提示文案
Lz666131
校验提示文案
tanpengsccd
校验提示文案
Kleisth
校验提示文案
仒天雪地
校验提示文案
树袋熊睡醒了
校验提示文案
值友4348360222
校验提示文案
牧野边
校验提示文案
孙阚
校验提示文案
icespace
校验提示文案