旁路由一重启,NAS 就失联?我用双网口把它们彻底隔开了

一台双网口的小主机,平时跑飞牛 fnOS 做家庭 NAS,现在让它顺手兼职旁路由。目标只有一个:旁路由怎么折腾、怎么重启,NAS 本身都绝不断网。
这篇文章完整记录整套方案:从双网口规划、在线定制 ImmortalWrt 固件,到 PassWall 配置、避坑铁律和冷快照回滚。文中所有 IP 地址、网卡名、存储路径、节点名称均为示例值,请按你自己的网络环境替换。
写在前面
折腾过旁路由的朋友,大概都踩过这几个坑:
- 旁路由一重启,NAS 跟着失联,远程访问、影视刮削全部罢工;
- 旁路由开了 DHCP,和主路由抢着发地址,全屋断网;
- 订阅拉不下来、规则一更新就坏、DNS 莫名其妙返回
No answer……
最近我把家里的旁路由彻底重做了一遍,跑在飞牛 fnOS 自带的 KVM 虚拟机里,主路由的拨号架构一点没动。
跑了一段时间,稳定得出乎意料。这篇把完整过程和踩过的坑一次性写清楚。
一、整体思路:双网口物理隔离
我的 NAS 是一台双千兆网口的小主机(六核 CPU / 16GB 内存),跑这点东西算力严重过剩。
关键设计就一句话:两个网口各干各的。
- 网口 1:专供 NAS 宿主机自己用,默认网关直连主路由;
- 网口 2:开启 OVS 虚拟交换机,专门给旁路由虚拟机桥接。
这样旁路由无论是重启、关机还是被我配崩,NAS 的存储、远程访问都走网口 1,完全不受影响。
IP 规划(示例):
| 节点 | 接口 | IPv4 | 网关 | 说明 |
|---|---|---|---|---|
| 主路由 | LAN | 192.168.X.1 |
运营商 | 拨号、Wi-Fi、DHCP |
| NAS 主网口 | 网口 1 | 192.168.X.10 |
192.168.X.1 |
勾选「设为默认网关」 |
| NAS 桥接口 | 网口 2 (OVS) | 192.168.X.11 |
192.168.X.1 |
不勾选默认网关 |
| 旁路由 VM | VirtIO → 网口 2 | 192.168.X.20 |
192.168.X.1 |
关 DHCP、关 IPv6,跑 PassWall |
| 家庭终端 | Wi-Fi / 有线 | 192.168.X.x |
192.168.X.20 |
网关和 DNS 指向旁路由 |

🔴 第一条铁律:NAS 宿主机的网关永远指向主路由,绝不能指向旁路由。否则旁路由一关,NAS 当场失联。
二、为什么选「虚拟机 + ImmortalWrt」?
虚拟机 vs Docker
很多人会问:Docker 跑个 Mihomo 不是更轻吗?在 16GB 内存的机器上,我的结论是虚拟机更香:
| 维度 | KVM 虚拟机(采用) | Docker Macvlan |
|---|---|---|
| 隔离性 | 独立内核,随便折腾不影响宿主机 | 共享内核,配错易污染宿主机路由/DNS |
| CPU 损耗 | VirtIO + AES-NI,跑满千兆约 3%~5% | 接近 0 |
| 内存 | 固定 2GB | 几十到一百 MB |
| 运维 | 完整 LuCI 网页界面 | 手写 YAML |
| 容灾 | 快照一键回滚 | 手动备份目录 |
多花 2GB 内存,换来硬隔离 + 图形界面 + 快照回滚,非常划算。
为什么是 ImmortalWrt
- 比官方 OpenWrt:软件源直接带 PassWall、HomeProxy、OpenClash,还支持在线定制固件;
- 比 iStoreOS:宿主机已经是 NAS 系统了,不需要 iStoreOS 里那些轻 NAS 组件。ImmortalWrt 开机内存才 100MB 出头,足够纯净。
三、第一步:在线定制专属固件
ImmortalWrt 官方有在线构建器,可以把插件和初始化脚本直接打包进固件,开机即用,不用敲命令。
- 打开
https://firmware-selector.immortalwrt.org/ - 型号选
Generic x86/64,版本选最新稳定版(我用的是25.12.2) - 展开「自定义预安装软件包」,在原有内容末尾加一个空格后追加:
1 | luci-i18n-base-zh-cn luci-i18n-firewall-zh-cn luci-app-passwall luci-i18n-passwall-zh-cn luci-app-homeproxy luci-i18n-homeproxy-zh-cn luci-app-openclash qemu-ga curl |
三个代理插件只启用 PassWall,另外两个当备胎。千万别同时开多个代理插件。
qemu-ga用来向 NAS 汇报虚拟机状态。
- 在「首次启动脚本 (uci-defaults)」里填入下面这段,自动设好静态 IP,并彻底关掉 DHCP 和 IPv6:
1 | # 1. 旁路由静态 IP,网关指向主路由(按需替换为你的地址) |
- 点「请求构建」,等 30~60 秒,下载
COMBINED-EFI (EXT4)镜像,解压出.img文件(约 333MB),上传到 NAS 任意目录。
四、第二步:配置双网口 + 创建虚拟机
1. 双网口固化
进入 fnOS「系统设置 → 网络设置」:
网口 1(NAS 主出口)
- 编辑 → 手动设置:
192.168.X.10/255.255.255.0/ 网关192.168.X.1 - ✅ 务必勾选「设为默认网关」
网口 2(虚拟机专用)
- 先点「启用 OVS」,再编辑 → 手动设置:
192.168.X.11,网关同上 - ❌ 切勿勾选「设为默认网关」
2. 新建虚拟机
| 配置项 | 取值 |
|---|---|
| 系统镜像 | 刚上传的 ...-combined-efi.img |
| 主板类型 / 固件 | Q35 / UEFI |
| CPU / 内存 | 2 核 / 2GB |
| 开机自启 | 是 |
| 磁盘接口 | VirtIO Block ⚠️ |
| 网口 | 网口 2(OVS) |
| 网卡模式 | VirtIO |
⚠️ 最大的坑在这里:磁盘接口一定选
VirtIO Block!ImmortalWrt 默认内核没带VirtIO SCSI驱动,选错了会直接找不到启动盘。
启动虚拟机,等 20~30 秒让首次启动脚本跑完。
五、第三步:PassWall 核心配置
1. 登录并检查 IPv6 残留
- 浏览器打开
http://192.168.X.20,用户root,密码留空,登录后第一件事改密码; - 「网络 → 接口」检查 lan 口,如果还挂着
fded:...开头的 IPv6,去「全局网络选项」清空 IPv6 ULA 前缀; - 可选:如果部分网页偶尔卡死,在防火墙 lan 区域勾选 IP 动态伪装,规避非对称路由回包被丢的问题。
2. 节点导入:先手动,后订阅
这是第二个大坑。
自建订阅地址在没代理的状态下往往直连不通,直接拉订阅会让后台进程卡死,一直提示「有[订阅]实例正在运行」。
正确姿势是「先破冰,再订阅」:

- 手动导入单节点:从电脑客户端复制一条可用的
vless://链接 → 节点列表 → 通过链接添加 → 保存并应用; - 打开主开关:基本设置里勾选主开关,代理节点选刚导入的节点。顶部 TCP / UDP / DNS 全绿、连接测试全部显示毫秒延迟,就通了;
- 再配订阅:
- 订阅地址填 Base64 (V2RayN) 格式,别填 Clash YAML,否则报
lyaml parseClashNode; - 访问方式选 「通过代理」;
- User-Agent 填
v2rayN。
- 订阅地址填 Base64 (V2RayN) 格式,别填 Clash YAML,否则报
3. 两个小优化
- 缩短开机延时:高级设置里「开机时延时启动」从默认 60 秒改成 5~10 秒;
- 视频转圈:网页能开但视频一直加载,勾选「屏蔽 QUIC」,强制走 TCP。
六、长期稳定的 3 条避坑铁律
这几条都是我真金白银踩出来的。
❶ 别点「规则管理 → 手动更新」
PassWall 出厂自带的规则文件是好的。网页端手动更新默认直连 CDN 下载,很容易超时,结果把好好的规则覆盖成空文件,ChinaDNS-NG 直接罢工,所有域名返回 No answer。
❷ 主代理用「单节点」,别开「Xray 分流总节点」
实测当前版本中,分流总节点生成的 DNS 入站只监听了 TCP、没监听 UDP,导致 ChinaDNS-NG 上游报 Connection refused。直接选单节点 + 默认 ChinaDNS-NG,国内外分流照样正常,稳定零故障。
❸ 自定义域名走「规则列表」
个别域名要强制代理或直连,去「规则列表」的代理列表 / 直连列表里一行一个填就行。
七、一定要做:冷快照备份
飞牛虚拟机在 UEFI 固件或开启 VNC 剪贴板时不支持热快照,只能关机后做:
- 虚拟机关机,等状态变为「已关机」;
- 「快照管理 → 生成快照」,起个好认的名字,比如
golden-YYYYMMDD-passwall-ok; - 重新开机。
之后不管怎么配崩了,关机点「恢复」,大约 10 秒回到正常状态。
💡 建议:每次换插件、改 DNS 模式、升级固件之前,先打一个快照。
八、家里的设备怎么接入?
三种方式,按需选:
方式一:指定设备手动接入(最稳)
适合家里有老人、智能家居、国内电视盒子的情况。主路由不动,只把需要的设备改成静态 IP,网关和 DNS 都填 192.168.X.20。
方式二:主路由 DHCP 全局下发(全屋无感)
在主路由 DHCP 设置里,把默认网关和首选 DNS 都改成 192.168.X.20,设备重连 Wi-Fi 即生效,连 VR、电视这种没法手动改网关的设备也能用。
注意:部分运营商定制路由不允许改 DHCP 下发的网关,只能用方式一。
方式三:按 MAC 精准下发(进阶)
主路由支持 dnsmasq 高级配置的话(梅林、爱快、OpenWrt 等),可以只给指定 MAC 下发旁路由网关,其他设备照旧,兼顾自动和可靠。
九、验收清单 & 故障速查
上线前逐项打勾:
| 项目 | 合格标准 |
|---|---|
| 分流验证 | ip111.cn 国内测试点显示本地 IP,海外测试点显示节点 IP |
| 国内网速 | speedtest.cn 能跑满宽带 |
| PassWall 状态 | TCP / UDP / DNS 全部「运行中」 |
| NAS 独立性 | 关掉旁路由虚拟机,NAS 远程访问、刮削、更新全部正常 |
| 开机恢复 | 重启 NAS,虚拟机自启,几秒后代理恢复 |
常见问题对照表:
| 现象 | 原因 | 解决 |
|---|---|---|
| 虚拟机找不到启动盘 | 磁盘选了 VirtIO SCSI | 改 VirtIO Block |
| 旁路由后台打不开 | 网卡挂错网口 / 脚本没生效 | 确认挂网口 2;VNC 里执行 uci show network.lan |
| 订阅一直「正在运行」 | 未通代理时直连拉订阅 | 先手动导入单节点,订阅走代理 |
订阅报 lyaml 错误 |
填了 Clash 链接 | 改 Base64 格式 |
DNS 返回 No answer |
规则被手动更新弄坏 | 恢复快照 |
ChinaDNS-NG Connection refused |
开了分流总节点 | 改回单节点 |
| IPv6 绕过代理 | 仍在下发 IPv6 | 清空 ULA 前缀,必要时关主路由 IPv6 |
| YouTube 转圈 | QUIC 不稳 | 屏蔽 QUIC |
应急预案:
- 节点变慢:PassWall 基本设置里换一个节点,保存即可;
- 临时全屋直连:取消 PassWall 主开关;
- 长期关闭旁路由:先把主路由 DHCP 的网关和 DNS 改回主路由,再关虚拟机,避免全屋断网;
- 配置乱了:关机 → 恢复快照 → 开机。
写在最后
整套方案的核心其实就三点:
- 双网口物理隔离——NAS 永远直连主路由,旁路由怎么折腾都不牵连 NAS;
- 在线定制固件——插件和初始化脚本打进固件,开机即用、零命令行;
- 冷快照兜底——配崩了 10 秒回滚,放心大胆地折腾。
如果你也有一台双网口的 NAS 或小主机,强烈建议试试这套架构。另外,我还准备了一套 Docker Macvlan + Mihomo 的轻量备选方案,有需要的朋友可以留言,我单独整理一篇。
留个问题给你:
你家的旁路由,有没有哪一次重启,顺手把整个家庭网络一起带走了?
欢迎在评论区聊聊你踩过的坑。
免责声明:本文仅作家庭网络技术交流,请遵守当地法律法规,合理合规使用网络。
若白知行 · Rubai AI