起因
我不会说我是看到公司内网布局发现原来不通的网段也可以通过三级路由实现互通,才有了接下来这些事情…
把zerotier从每个设备上搬到路由器上,对比之前,有以下考虑:
1.一些设备本来就在局域网内可以互相访问,但是在之前,为了可以访问同一个远程机器却需要被迫加入了同一个虚拟局域网,互相访问如果使用zerotier的地址依然会建立隧道,这样很奇怪,而且出过bug!(是你——dnf打pk和舍友的延迟比和网友还高)
2.在之前,对于某些流量使用的场景,如果打开一个会扫描内网的程序(常见的是moonlight串流),不免要跟多个机器建立隧道连接,造成了不必要的浪费。(由于现在流量管够,这一点心理作用居多)
3.之前的方案,一个设备可能会拥有多个ip,这导致大部分应用(ssh、网页控制台、RDP等等)都要设置多个配置;现在的方案,大多数情况下只需要使用同一个ip即可。
4.对于某些轻量级的设备(比如智能家居),之前我肯定不会单独给他安装一个zerotier;而现在只要在openwrt的网络下,就可以在zerotier网络中被访问到,不会产生额外的隧道,也不需要设备本身进行加密(可以交给路由器去计算)。
操作步骤
此教程软路由系统为原版openwrt,zerotier为私有化部署,其他软路由系统、官方的zerotier也可以举一反三进行设置。
一、在openwrt上安装zerotier,修改私有化文件,并加入网络
完成这一步骤之后,openwrt上的zerotier就算安装完成了,如同其他平台的,但是之后不同的是还会有一些步骤,如果已经完成安装可以跳到二、三、
应该可以装docker版本,更简单,但是op上没有部署docker
我踩坑的地方是每次配置(包括加入网络等)之后都需要重新复制持久化储存(因为我需要拷贝两次配置文件,而官方的wiki是一次)。关于需要每次拷贝配置文件来实现持久化,这一点和在truenas core上本机安装zerotier有点像,参考一篇很经典的文章:
[ Run ZeroTier on TrueNAS ] https://alan.norbauer.com/articles/zerotier-on-truenas
同样的如果你在迁移之前其他设备上的zerotier,拥有原有的配置文件同时不希望被控制台识别为另一个设备,迁移配置文件同样可以直接复制对应的原来的文件。
1.包管理器安装zerotier:
2.config设置enable,并启动zerotier服务
3.拷贝到持久保存路径,并停止zerotier
4.拷贝自己的planet以及moons.d到持久保存路径
5.修改config,使其从持久目录加载配置文件
6.这时查看你的peers,应当只存在你自己的planet节点
7.加入你的网络
在网页端配置允许你的设备,分配ip,你应该可以通过以下命令查询到分配到的ip
同时openwrt下 网络 -> 接口 -> 设备 下出现zt开头的新设备
8.刷新持久化目录文件
修改配置(包括加入网络等)之后,如果不重新拷贝,新的更改会丢失,需要重新拷贝持久目录文件
二、开放9993端口
很容易忽略的一点!
zerotier是装在路由器上,路由器访问外网肯定是直接走路由器的wan。在其他机器上安装的zerotier,一般都会帮你设置好防火墙,而openwrt默认对wan开放的端口其实是不多的。问题是不开放wan口9993,在复杂网络环境下会自动切到 “转发” 模式,不查看节点或者测速,很容易忽视这个问题。
1.设置防火墙
进入页面 网络 -> 防火墙 -> 通讯规则,添加一条新的规则,名称随意,设置如下:
2.保存设置
你通过在移动数据查看结点的转发状态来对比设置此项前后的区别:
由于我的两个路由器都有公网ip,设置之后可以确保连接是通过 ip:9993 建立的
三、配置openwrt防火墙
完成步骤1之后,你应该拥有一个zt开头的新设备,在 网络 -> 接口 -> 设备 下可以查看
此时为openwrt本体安装完毕zerotier,路由器能够访问zerotier网络中的所有设备,而路由器下的设备无法访问zerotier网络中的设备,此步解决的便是这个问题。
1.创建新的防火墙区域
在 网络 -> 防火墙 -> 常规设置 下,为zerotier创建一个新的防火墙区域,此时 [ zerotier网络 ] 类似于 [ openwrt作为子路由时的主路由网络 ] ,由于都是内网,直接允许所有,如下:
*如果有多个分离的lan,可以灵活的配置区域来做到限制访问zerotier网络。
2. 创建接口
在 网络 -> 接口 -> 接口 下,添加一个新的接口,名称随意,设备选择新多出来的设备:
注意这里选不配置协议,zerotier由软件分配ip地址不知道为什么那么多人说填dhcp协议,给我排障带来了很多不确定因素。
然后防火墙设置下勾选刚刚设置的防火墙区域:
3.保存所有更改的设置。
此时该路由器下的内网设备就可以访问zerotier网络下的设备了。
四、配置路由(不同网段互通)
完成上述步骤后,路由器下的设备能够通过路由器访问zerotier网络中的设备,而反过来zerotier网络中的设备无法访问路由器下的设备,因为他们并不知道如何到达对应的地址,此步解决的便是这个问题。
由于这个情况类似于主路由设备访问子路由下设备的问题,可以查阅相关教程,或者配置过类似的内容应该可以直接跳过这部分内容。
1.登录zerotier后台,添加到openwrt的路由
我这里是私有化部署,使用ztncui,好在此控制台可以设置路由。
Target - 设置为openwrt在zerotier网络中的ip地址
GateWay - 设置为openwrt下对应lan的网段
意义:zerotier网络下设备在访问gateway网段下的地址时,路由使之去往target
以我的网络为例,zerotier网段192.168.9.x,增加如图两条路由(第一条为zerotier网络自带),192.168.9.x,192.168.1.x,192.168.2.x三个网段下设备均可互相访问
结语