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

Image 1

一台双网口的小主机,平时跑飞牛 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 指向旁路由

Image 2

🔴 第一条铁律: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 官方有在线构建器,可以把插件和初始化脚本直接打包进固件,开机即用,不用敲命令。

  1. 打开 https://firmware-selector.immortalwrt.org/
  2. 型号选 Generic x86/64,版本选最新稳定版(我用的是 25.12.2)
  3. 展开「自定义预安装软件包」,在原有内容末尾加一个空格后追加:
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 汇报虚拟机状态。

  1. 在「首次启动脚本 (uci-defaults)」里填入下面这段,自动设好静态 IP,并彻底关掉 DHCP 和 IPv6:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. 旁路由静态 IP,网关指向主路由(按需替换为你的地址)
uci set network.lan.proto='static'
uci set network.lan.ipaddr='192.168.X.20'
uci set network.lan.netmask='255.255.255.0'
uci set network.lan.gateway='192.168.X.1'
uci set network.lan.dns='192.168.X.1 223.5.5.5'

# 2. 关闭 DHCPv4、IPv6 及 ULA 前缀,防止和主路由抢地址
uci set dhcp.lan.ignore='1'
uci -q delete dhcp.lan.ra
uci -q delete dhcp.lan.dhcpv6
uci -q delete dhcp.lan.ndp
uci set network.lan.delegate='0'
uci -q delete network.globals.ula_prefix

# 3. 保存
uci commit network
uci commit dhcp
exit 0
  1. 点「请求构建」,等 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. 节点导入:先手动,后订阅

这是第二个大坑。

自建订阅地址在没代理的状态下往往直连不通,直接拉订阅会让后台进程卡死,一直提示「有[订阅]实例正在运行」。

正确姿势是「先破冰,再订阅」:

Image 3

  1. 手动导入单节点:从电脑客户端复制一条可用的 vless:// 链接 → 节点列表 → 通过链接添加 → 保存并应用;
  2. 打开主开关:基本设置里勾选主开关,代理节点选刚导入的节点。顶部 TCP / UDP / DNS 全绿、连接测试全部显示毫秒延迟,就通了;
  3. 再配订阅:
    • 订阅地址填 Base64 (V2RayN) 格式,别填 Clash YAML,否则报 lyaml parseClashNode;
    • 访问方式选 「通过代理」;
    • User-Agent 填 v2rayN。

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 剪贴板时不支持热快照,只能关机后做:

  1. 虚拟机关机,等状态变为「已关机」;
  2. 「快照管理 → 生成快照」,起个好认的名字,比如 golden-YYYYMMDD-passwall-ok;
  3. 重新开机。

之后不管怎么配崩了,关机点「恢复」,大约 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 改回主路由,再关虚拟机,避免全屋断网;
  • 配置乱了:关机 → 恢复快照 → 开机。

写在最后

整套方案的核心其实就三点:

  1. 双网口物理隔离——NAS 永远直连主路由,旁路由怎么折腾都不牵连 NAS;
  2. 在线定制固件——插件和初始化脚本打进固件,开机即用、零命令行;
  3. 冷快照兜底——配崩了 10 秒回滚,放心大胆地折腾。

如果你也有一台双网口的 NAS 或小主机,强烈建议试试这套架构。另外,我还准备了一套 Docker Macvlan + Mihomo 的轻量备选方案,有需要的朋友可以留言,我单独整理一篇。

留个问题给你:

你家的旁路由,有没有哪一次重启,顺手把整个家庭网络一起带走了?

欢迎在评论区聊聊你踩过的坑。


免责声明:本文仅作家庭网络技术交流,请遵守当地法律法规,合理合规使用网络。

若白知行 · Rubai AI