Homelab 网络系列:RouterOS 主网关和 WRT 旁路由为什么要分工
系列导航
- Homelab 网络系列:开篇 - 家庭网络为什么会变复杂
- Homelab 网络系列:RouterOS 主网关和 WRT 旁路由为什么要分工
- Homelab 网络系列:透明代理 VIP、VRRP 和 Fallback DNS
- Homelab 网络系列:NetBird ACL:Mobile Devices / MacBook 如何访问 Homelab / Hometown / Office 网络
- Homelab 网络系列:Backup Path:ZeroTier P2P 和 Sing-box Inbound 为什么还留着
- Homelab 网络系列:自动化和可恢复性:订阅生成、健康检查、配置同步、回滚
背景
上一篇说到,Homelab 网络最后变复杂,不是因为一开始想把事情做复杂,而是需求慢慢超过了普通家庭路由器能舒服承载的范围。
这一篇只讲其中一个拆分:为什么我最后让 RouterOS 做主网关,让 WRT 做旁路由,而不是把所有东西都塞到其中一边。
现在这套网络里,RouterOS 和 WRT 的分工大概是这样:
- RouterOS 负责主网关、DHCP、NAT、WAN/LAN 边界、公网入口 Hairpin、主要国内访问兜底
- WRT 负责海外访问分流、Sing-box、NetBird Peer、透明代理 VIP、部分跨站路由
- 普通设备默认只依赖 RouterOS
- 需要策略能力的设备,才通过 DHCP Option-set 走到 WRT 这层
这个拆分看起来多了一台设备和一堆联动,但核心目标其实很朴素:日常主要网络要稳,工作、管理和个人海外访问偏好可以作为额外层存在。
全塞到 WRT 的阶段
最早我用 OpenWrt / ImmortalWrt 承载过几乎所有东西。
它可以拨号,可以 NAT,可以跑 DNS,可以跑代理,也可以跑各种 Overlay Peer。对个人网络来说,这种方案的吸引力很强:
- 配置入口集中
- 软件生态足够丰富
- 调整代理、DNS、VPN 都很方便
- 机器少,拓扑也短
如果只是一个人用,或者只是做一个很轻量的家庭旁路由,这样完全可以。
但 Homelab 一旦承载了更多基础服务,它的问题就开始明显了。WRT 上的能力太“活”了:代理订阅会更新,Sing-box 会升级,NetBird 会变更 Peer 和 Route,DNS 策略也会经常跟着业务调。
这些东西本身都不是问题。真正的问题是,它们不应该和“全家正常上网”绑在同一个故障域里。
比如:
- 代理配置生成错了,不应该影响普通设备上网
- Overlay Route 调试错了,不应该影响默认出口
- DNS 策略变更,不应该把公网服务入口一起改坏
- WRT 升级或重启,不应该让主网关也跟着失效
所以全塞到 WRT 的方案,后面最大的问题不是性能,而是职责太混。
为什么需要 WRT 这层额外能力
另一个方向也很自然:既然 RouterOS 已经是主网关,那能不能把所有东西都放在 RouterOS 上?
RouterOS 做路由、NAT、防火墙、DHCP 都很强,而且稳定。主网关已经掌握了所有流量入口,在它上面做规则,路径最短,排查也直观。
但我现在并不希望 RouterOS 变成一个“全能应用网关”。它在这套网络里的角色,是稳定主网关和主要国内访问兜底,而不是直接承载所有海外分流、Overlay 管理和代理策略。
WRT 这层额外能力解决的是另一类问题:
- Sing-box Gateway 配置、订阅生成和规则集会频繁变化
- NetBird Peer 和站点路由属于 Admin Overlay,不应该污染普通默认出口
- VRRP 和健康检查是为了让海外分流失败时可以降级,而不是让主网关一起失败
- ZeroTier、Sing-box Inbound 这类 Backup Path 也更适合放在可替换的旁路层
- 日志、包管理、Nftables、脚本调试都更接近普通 Linux 习惯
这些能力更像应用层或系统层组件。它们需要包管理、文件模板、脚本、日志、版本升级和较快的回滚节奏。WRT 做这些事情明显更顺手。
更重要的是,WRT 这层的失败应该是有边界的。
最坏情况下,NetBird、ZeroTier、Sing-box、WRT 这层全部失效,受影响的应该是额外能力:
- Mobile Devices / MacBook 在外面的管理入口
- 跨站点 Overlay 访问
- 海外访问分流和个人偏好策略
- 依赖代理 VIP 的策略客户端
而不是所有普通设备的日常主要访问。
RouterOS 更适合做边界和控制面:
- 谁是默认网关
- 哪些客户端属于哪个 DHCP 策略组
- 公网入口的 DNAT / Hairpin 怎么走
- Fallback 时要不要让代理 VIP 回到普通 LAN/WAN 出口
- 哪些 RouterOS 脚本是稳定、可审计、可回滚的
换句话说,RouterOS 适合回答“基础网络还能不能正常工作”,WRT 适合承载“哪些设备需要额外策略能力”。这不是 RouterOS 做不了,而是我不希望快变化的海外分流和 Overlay 管理,变成主网关的核心风险。
当前分工
现在 Homelab 的分工是把基础网络和策略网络拆开。
普通设备走 RouterOS:
- DHCP 拿到普通默认网关
10.1.1.1 - DNS 使用普通 LAN 策略,Upstream 是
10.1.1.100上的 AdGuardHome - 出口 NAT 和防火墙都在 RouterOS 上完成
- 日常主要国内访问由 RouterOS 兜底
- WRT 故障不会直接影响这类设备
需要透明代理的设备走 WRT:
- DHCP Option-set 下发代理 VIP
10.1.1.253作为默认网关和 DNS - VIP 正常由 WRT
10.1.1.254持有 - WRT 后面是 Sing-box DNS / TUN / Route Policy,DNS Backend 是
10.1.1.254:53 - 只有被归入这个策略组的设备才进入这条路径
需要跨站访问的设备再多一层:
- 默认网关和 DNS 仍然走代理 VIP
- NetBird / Site Route 通过 DHCP Classless Route 下发
- 特定远端网段直接指向 WRT,而不是让 RouterOS 假装自己理解 Overlay 内部状态
这里的关键不是“所有设备都走代理”,而是不同设备进入不同策略组。RouterOS 负责分组和下发,WRT 负责执行变化更快的策略。
VIP 和 Fallback 是这条边界的接口
RouterOS 和 WRT 的交界点,是一个代理 VIP。
正常情况下,WRT 10.1.1.254 持有 10.1.1.253 这个 VIP。代理客户端看到的是一个稳定的网关和 DNS 地址,背后实际由 WRT 上的 Sing-box 接住;也就是客户端目标是 10.1.1.253,健康 Backend 是 10.1.1.254。
当 WRT 的基础健康检查失败时,VIP 可以回到 RouterOS 10.1.1.1。这个 Fallback 并不等价于完整的代理能力,它只是保留一个普通 LAN/WAN 出口,让客户端不至于因为 WRT 故障完全断网。DNS 这部分会被 RouterOS 的 Firewall Redirect 转到 10.1.1.100 上的 AdGuardHome,因此 Fallback 后仍然和普通客户端共用同一套 LAN DNS 语义和 Cache。
这里有一个取舍:Fallback 不是为了让所有能力无感恢复,而是为了让故障影响范围变小。
我更关心的是:
- Sing-box 挂了,代理客户端至少还能普通出网
- WRT 重启时,普通客户端不受影响
- NetBird / ZeroTier 出问题时,只影响管理和 Backup Path
- Fallback DNS 能回到本地解析器,但不承担公网服务入口改写
- VIP 的拥有权切换能通过健康检查验证,而不是靠人工记忆
后面会单独写 VIP、VRRP 和 Fallback DNS。这里先把它当成 RouterOS / WRT 分工之间的接口来看。
公网入口为什么仍然归 RouterOS
这个拆分里还有一个容易混的点:公网入口不在 WRT 的透明代理层里解决。
Homelab 有一些服务需要从外面访问,也需要在 LAN 内用同一套公网视角访问。这里我没有把它做成“内网 DNS 改写到内网地址”,而是让 RouterOS 继续负责公网入口的 DNAT 和 LAN Hairpin。
原因是 DNS 只认识名字,但入口问题不只看名字。
同一个域名可能有不同端口,不同端口可能落到不同后端,有的走 HTTP(S) 入口,有的不是 HTTP(S)。把这些都交给 DNS Rewrite,会把问题压扁成“名字到地址”的映射,后面很难维护。
RouterOS 在这里更合适:
- WAN 访问走公网入口 DNAT
- LAN 内访问同一公网入口时走 Hairpin
- 后端回复路径由 Hairpin SNAT 保证回到 RouterOS
- DNS 视角保持一致,不需要为了 LAN 访问维护另一份公网服务 Rewrite
所以 WRT 可以负责透明代理 DNS,但公网服务入口仍然应该留在 RouterOS 的边界 NAT 里。
被刻意留下来的复杂度
这个设计不是无成本的。
它留下了几类复杂度:
- DHCP Option-set 要维护普通、代理、跨站几类客户端
- VIP 健康检查要足够严格,但不能因为慢探测频繁误切
- NetBird Route 需要和 DHCP Classless Route 同步
- RouterOS 和 WRT 都要保留各自的回滚路径
- 文档里必须明确哪些能力属于主网关,哪些属于旁路
这些复杂度不适合隐藏。隐藏之后,下一次排障时还是会回来。
我更倾向于把它们变成明确的边界:
- RouterOS 是稳定边界
- WRT 是策略执行层
- PVE 是承载层
- DNS 不负责公网入口分流
- NetBird 是 Admin Overlay,不是普通客户端的默认出口
边界清楚之后,即使组件多,排障时也知道先问哪个问题。
最后的结论
RouterOS 和 WRT 分工的核心,不是“哪个系统更强”,而是把不同变化速度的东西放在不同位置。
RouterOS 负责慢变化的网络底座:主网关、NAT、DHCP、Hairpin、公网入口和可审计脚本。
WRT 负责快变化的策略能力:Sing-box、NetBird、透明代理、健康检查和备用路径。
这样做不会让 Homelab 网络变简单,但它能让故障域更清楚。主网关保持稳定,旁路能力可以升级、重启、替换;当旁路失败时,最多降级成普通网络,而不是把整个家庭网络一起带走。
后面继续拆透明代理 VIP、VRRP 和 Fallback DNS。那一层才是真正把“旁路可以失败,但不要把客户端完全断网”落到实现里的部分。