banner
约 2,100 字
7 分钟

浮动网关,一个插件解决旁路由方案最大痛点

摘要

旁路由方案一直有痛点:DHCP 放主路由要手动改设备网关,放旁路由则一旦宕机就拖垮整网。浮动网关插件可让主路由与旁路由自动互切网关,对手机等设备无感知——旁路由正常时流量走旁路由(如魔法上网),旁路由故障时自动回退主路由不影响国内上网。文章以华硕梅林主路由 + iStoreOS 旁路由为例说明插件设置,并指出 IPv6 可在商店一键开启。

前言

我的软路由平时主要干两件事:一是当"魔法上网"的网关(懂的人都懂,下文用哈利·波特代指),二是跑 DDNS 动态域名。但旁路由方案一直让我很纠结,卡在两个老难题上:

  1. 如果 DHCP 放在主路由上,那么每个想走旁路由的设备都得手动改网关,手机换个网络还要重新设,烦;

  2. 如果 DHCP 放在旁路由上,一旦旁路由出问题(重启、崩了),整个局域网都会跟着断网,稳定性堪忧。

这么一比,还不如直接让硬路由当主路由,网速还更快;可硬路由只当纯 AP 又有点浪费它的算力。这也是为什么江湖上一直有人说旁路由是"邪修"——除非你只有单网口这种特殊情况,否则一般不会优先选旁路由。

为什么"改网关"这么烦:根子在 DHCP

原文把痛点亮出来了,但没解释为什么。搞懂这一层,你会发现浮动网关的设计几乎是"必然如此"。

关键在于:DHCP 分给设备的从来不是一个 IP,而是一整套网络参数。至少包含:

DHCP 下发的项

作用

对应选项号

IP 地址

设备自己的地址

option 50 / 51

默认网关

出局域网的"出口"

option 3

DNS 服务器

域名解析用谁

option 6

看第二行——网关是 DHCP 一起发下去的。所以:

  • 如果 DHCP 在主路由,它下发的网关就是主路由。你想让某台设备走旁路由,就得手动去那台设备上把网关改成旁路由的 IP(或者设静态路由)。这就是"改网关烦"的根因——它不是配置难,而是必须逐台设备操作,而且改完手机一换 Wi-Fi 就失效。

  • 如果 DHCP 挪到旁路由,那网关统一指向旁路由,不用逐台改了。但代价立刻浮现:旁路由成了整个局域网的唯一出口,它一挂,所有人的默认路由都指向一个死掉的地址——于是全屋断网。

两个方案的痛点其实来自同一个事实:网关只有一个,而它必须同时满足"能灵活指定"和"不能是单点"。 这看起来是矛盾的——直到你引入第三个地址。

浮动网关:本质是一个"会漂移的虚拟 IP"

浮动网关(Floating Gateway) 的解法很妙:不把网关设为任何一台真实设备,而设为一个"虚拟 IP"(VIP)——这个 IP 在某一时刻归属于主路由或旁路由中的一台,谁健康就归谁。

纯文本
┌──────────────── 局域网 ────────────────┐
        │                                        │
   主路由 192.168.2.1                      旁路由 192.168.2.2
   (华硕/梅林)                            (istoreos)
        │                                        │
        └────── 争夺 VIP: 192.168.2.3 ───────────┘
                        ↑
                 终端设备的网关就是它

工作流程:

  • 旁路由正常 → VIP 由旁路由持有,所有设备的流量都经它出去,享受"哈利·波特";

  • 旁路由挂了 → 心跳探测失败,VIP 漂移回主路由,设备继续正常上网,只是退回直连(没有魔法)。

对手机、电脑这些终端来说,网关地址从头到尾没变过(永远是 192.168.2.3),所以完全无感。这就是它比"手动改网关"高明的地方:把变化藏在了看不见的一层。

想通这个机制,原文里几条看着"没道理"的要求就全都有了解释:

① 为什么必须给浮动网关单独预留一个 IP(例子里是 192.168.2.3)? 因为那是 VIP,是终端设备实际使用的网关地址。如果它和主路由(.1)或旁路由(.2)的地址撞了,就变成"两个设备声称拥有同一个 IP"——局域网里会出现 ARP 冲突,时通时断,极难排查。所以这三个地址必须互不重叠。

② 为什么两台路由都要装同一个插件? 因为 VIP 需要两端都参与:一端持有它、另一端守着并探测。这跟企业网络里的 VRRP / keepalived 主备机制是同一套思路——只是被做成了家用插件,配置从命令行变成了填表单。

③ 为什么切换会有几秒到几十秒的感知? 因为 VIP 漂移后,局域网里其它设备缓存的 ARP 记录还指向旧设备。设备要等 ARP 缓存过期、重新询问"谁是 .3"才能找到新的持有者。这就解释了原文排错里那条"切换后手机连不上,重启一下手机 Wi-Fi 即可"——重启 Wi-Fi 就是强制清掉 ARP 缓存。

插件设置

要启用浮动网关,需要先满足几个前提并做好规划:

前提条件

  1. 主路由和旁路由都要能装"浮动网关"插件。虚拟机、分身、套娃这些软路由玩法都行,但硬路由好像只有华硕支持(华硕刷梅林后可用),其他品牌硬路由目前基本装不了。

  2. 如果你的硬路由不支持,也可以把主路由换成一台能刷软路由系统的设备(x86 软路由、N1 这类)来跑主路由角色。

为什么硬路由支持这么少? 因为这类插件要动的是网络层最底层的东西——虚拟 IP 的持有、心跳探测、ARP 应答。厂商固件通常把这些机制锁在闭源模块里,不开放给第三方插件。华硕系(梅林固件)生态开放度高,所以能玩;其余品牌基本无解。

我的实际网络规划

以我家的拓扑为例,大家可以参考这个 IP 分配思路:

  • 主路由:华硕刷梅林,网关 192.168.2.1

  • 旁路由:istoreos,网关 192.168.2.2、DNS 192.168.2.1

  • 浮动网关:192.168.2.3

关键在于:给浮动网关单独预留一个 IP(这里是 192.168.2.3),不要跟主路由、旁路由的网关冲突,这样切换时才不会乱套。

另外注意旁路由的 DNS 指向主路由(192.168.2.1)——这是个有意的设计:让 DNS 解析不依赖旁路由自身状态。这样旁路由挂掉时,即便你还在用它的 DNS 缓存,解析链路也是通的。

blog image

设置时,在两台路由上都装好"浮动网关"插件,把上面这套 IP 规划填进去,插件会自动探测对端存活情况来决定当前网关指向谁。

blog image

其他设置

把浮动网关跑通后,还有两个能进一步优化体验的设置:

  1. 补开 IPv6:istoreos 默认没开 IPv6,你可以在它的应用商店里装一个系统便利工具,用它一键开启 IPv6,避免部分需要 IPv6 的场景(比如某些 App 的加速、测速)不可用。

  2. 指定设备网关:如果你的主路由是软路由或比较新的华硕路由,可以给指定设备单独指定网关。这样某些需要稳定走旁路由的设备(比如下载机、游戏机)可以固定指向旁路由,配合浮动网关一起用,既灵活又稳妥。

⚠️ 一个必须知道的局限:IPv6 场景下它可能不起作用

这是原文没提、但在 IPv6 普及的今天很容易踩到的坑。

绝大多数浮动网关实现只管 IPv4 的默认网关,管不到 IPv6。

原因在于两者的"网关是怎么来的"完全不同:

  • IPv4:网关靠 DHCP 下发(option 3),是"服务器告诉你"。所以把 DHCP 里的网关设成 VIP,就完成了控制。

  • IPv6:终端拿默认路由靠 RA(路由器通告) 里的 M/O 标志位——是路由器"主动广播"出来的。而这些插件的 VIP 机制通常只作用于 IPv4 那一套,IPv6 的默认路由依旧指向真实设备的链路本地地址。

后果就是:IPv6 流量不走浮动网关,旁路由一挂,IPv6 直接就断了。表现出来可能是"网页能打开但很慢"——因为浏览器在 IPv6 失败后要等超时,才回落到 IPv4 重试。

怎么处理?

  • 如果你的网络重度依赖 IPv6(比如某些服务的直连、部分 App 的加速),别指望浮动网关兜底,得单独规划;

  • 只是在用 IPv6 的"能用就行",那可以接受这个局限——毕竟主路由还在,IPv6 断了也不影响大局。

想彻底搞明白 IPv6 这套地址与路由机制的,可以顺带看一下我写过的 OpenWrt 拨号与 IPv6 配置那篇,里面把三类地址、前缀委派和 RA 标志位都讲清了,理解了那些,上面这段就通了。

常见问题与排错

1. 装了浮动网关但始终不切换

  • 检查两台路由的浮动网关 IP 是否按规划填对、有没有和其他设备 IP 冲突;

  • 确认插件在两台路由上都处于启用状态,而不是只在一台装。

2. 旁路由挂了,全网掉线

  • 多半是浮动网关没真正接管。回到插件设置页,确认浮动网关的探测 / 心跳间隔设置合理,并检查日志里的切换记录。

  • 顺手核对一件事:终端的网关是不是真的指向 VIP?如果某台设备是手动设了静态 IP(网关直接填了旁路由 192.168.2.2),那它根本不看 DHCP,自然也不会跟着 VIP 漂移——这是"部分设备失联"这类现象最常见的原因。

3. 切换后手机连不上"哈利·波特"

  • 可能是切换瞬间 DNS 缓存未刷新,重启一下手机 Wi-Fi 即可(本质是清 ARP / 重新走一遍 DHCP);

  • 确认旁路由上"哈利·波特"本身是正常的。

个人结论

如果你手头正好有一台硬路由(华硕)+ 一台软路由(x86 / N1 / istoreos),又嫌传统旁路由不够稳,浮动网关是解决"旁路由怕宕机"这个痛点的最佳解。它把旁路由的"不确定性"变成了"可控的容错",坏了自动退回主路由,体验上几乎无感。

理解它的钥匙就一句话:它给局域网装了一个"会漂移的虚拟网关"。想通这点,IP 规划、插件双端安装、切换延迟这三件事就都不再是"玄学"。

唯一门槛是对硬路由型号有要求(华硕系支持较好),其他用户建议用两台软路由来搭。另外如果你的网络重度依赖 IPv6,记得它管不到那一层,需要单独规划。整体思路清晰、部署成本低,值得一试。

END