家庭组网折腾记
写在最前面: 网上大部分的教程可能是过时的,headscale 内置了 DERP 服务,只需要开启即可,并且很多恩山的教程写的比较 freestyle。
软路由
联调的宽带,公网的 Ipv4
和 Ipv6
(PD /60),对于 Ipv6 的管控就是一个刚需,原生的小米路由器 AX6,没有办法管控 Ipv6
导致机器都裸奔在互联网上,因此对于家中的网络需要一个入口侧的灵活的管控能力,因此显然购置一个可以刷入 Openwrt
的比较合理。
对比一下可以选择 x86
和 ARM
,因为主路由本身的工作比较简单,只是 拨号
+ 管控
,因此还是基于有 NPU
的 ARM
设备,无论是功耗还是效能都会好很多。
因为只有 1000Mbps
的需求,因此也不想投入太多成本,参考 2024年中 0-300元的一些便宜的有点可玩性的路由器选择杂谈 最终选择了 AX5 JDC
型号。(实际上同时还购入了 AX6, 不过因为需要并不强烈,两者差异不大)
截止本文日(2024-12-20): AX5 JDC 的价格大致只需要 55 左右,AX 6 也只需要 85 - 90 之间。
刷机
解锁 SSH
第一步肯定是解锁 SSH 权限,对于这些早期版本的设备,其实不降级也可以,github 有个项目 xmir-patcher
测试 AX6 的最新版本也可以解锁 SSH
,因此不一定非要参考 恩山
上比较早期的文档 AX5 JDC刷OpenWRT及Uboot
使用脚本就比较简单
1 | $ ./run.sh |
第一步选择 1,然后输入对应的路由器 IP 即可(默认是 192.168.31.1)
第二步选择 2,等待片刻即可。
然后尝试登录下如果成功就好,不行就用以前的版本,先降级固件。
1 | $ ssh root@192.168.31.1 |
刷入临时系统
对于小米的路由器来说,默认的情况是双ROM,也就是一般来说,其中一个损坏了,不会影响另外一个使用。但是这样导致空间也只有一半能够使用,因此论坛上有大量的固件标明是 大分区
这种固件,在默认的 Rom 大小空间是无法安装的,因为空间不足,需要把默认的 ROM 做合并。
在刷入临时系统之前,我们先了解下,系统是怎么启动的。
在系统中执行
1 | $ lsblk |
我们会发现有大量的分区,可以简单的任务,系统是按照分区启动的,
CPU 通电之后,先从 /dev/mmcblk0
最开始的部分 读取分区表,然后跳转到 /dev/mmcblk0p13
的 Uboot
进行启动,uboot
会继续读取后面的固件。
因为我们想要刷入 不死Uboot
因此, Uboot
只会从双 Rom 的中的其中一个进入系统,因此需要将 Uboot
读取那个区域先刷入一个临时的系统。
一般来说,第一次默认进去的是 root_1,也就是第二个分区,可以通过下面的命令来判断
1 | nvram get flag_last_success |
返回数字 1 就是第二分区,若返回 0,就得按之前刷入op的方法向13分区刷入op然后设置下次启动13分区然后继续(别直接改下次启动13,怕13分区没系统或者op不合适直接转)(当然这时没改分区表,砖了用小米官方救砖)
用图来理解的话,就是这样的
因为我们会将 Rom 分区合并,因此就不存在后面的那个分区了,因此一开始刷入一个临时系统,可以保证后面的安全(实际上感觉没什么区分)
1 | # 配置升级成功标志 |
做完这些,重启之后就进入了 Openwrt
,这个时候还是双分区的结构
刷入 Uboot & 大分区
1 | # 将 uboot 刷入 13 分区 |
做完这些直接断电即可,这个时候已经成功的刷入 uboot
了
刷入系统
拔掉电源让机器断电,然后按住 reset 键插入电源通电,灯光闪5下(大概是5s,之后蓝灯常亮)后松开 reset 按键。
之后输入系统即可,我这里用的是 IPQ60XX-WIFI-NO 的固件,因为作为主路由,并不需要进行启动 WIFI 还可以节约一些内存。
组网
当我的 Openwrt
继续之后,配置好拨号,需要的就是进行配置了,先看看家庭的网络架构
因为本身有一个路由器 (AX6) 已经配置了大量的静态地址,都在不同的地方已经用上了,因此这里就不折腾这个路由器,仅仅修改这个路由器从 拨号
到 DHCP
其他的都需要想办法在入口的 AX5
兼容。
就有几个需求
- 作为二级路由的 AX6 能够分配到公网 Ipv6
- 从 AX5 可以访问倒 AX6
这里就需要进行一些配置
Ipv6 PD 配置
- 在
接口
»lan
的高级配置
配置IPv6 分配长度
修改为从WAN
获取的地址(默认的是 64,下级路由本身可以获取 v6,但是无法继续往下分配) - 在
接口
»lan
的DHCP服务器
的Ipv6 设置
配置PD 最小长度
修改为从WAN
获取的地址(这里不修改,下游路由器也无法获取)
静态路由配置
插上下级路由器(AX6) 等连接上之后,查看到分配的 IP,将其设置为静态的。然后修改 路由
页面,增加一条
接口 | 目标 | 网关 |
---|---|---|
lan | 目标网段 | 刚设置的静态 IP |
即可
额外的补充
因为整体上的安全都是通过 AX5
来负责的,这样的情况下,AX6
本身还是有一些安全规则, 导致此时还是无法访问,所以这里需要额外的关闭 AX6
的防火墙,参考 关闭小米路由器防火墙 WAN 放行端口
Ipv6 防火墙
在 网络
-> 防火墙
-> 通讯规则
里面加上 ipv6 开放的端口即可。因为 ipv6
本身是要对外暴露访问能力的,因此这里只是开放部分端口
虚拟组网
配置完上面的内容就来到最后一个部分,怎么把外部设备和内部设备组成一个虚拟机的网络了。
作者注:因为实际上有 ipv6 和 ipv4 地址,不是特别刚需,这部分单纯是爱好
虚拟组网有有两个软件看起来用的人比较多
- Zerotier
- Tailscale
这两个都可以自建中心控制节点,也就是完全自建,因为 Tailscale
默认情况是 100.64.x.x
的网段,和很多云厂商冲突, Zeortier
的默认节点大部分又被封了,整体上还是推荐自建。最终选择了 Zerotier
参考 docker-zerotier-planet 项目非常简单的就可以完成了。