家庭网络架构 2.0
从 iKuai + ImmortalWrt 双路由迁移到单 ImmortalWrt,并重新整理 PVE、TrueNAS 和 Home Assistant OS。
家里的网络最早是 iKuai + ImmortalWrt 的组合。iKuai 负责拨号和主要的网络管理,ImmortalWrt 则作为旁路由使用。这套方案前后用了几年,能用,但也一直有一些不太舒服的地方。
今年我终于把它重新整理了一遍:去掉 iKuai,让 ImmortalWrt 独立接管拨号、DHCP、DNS、IPv6 和防火墙,同时在 PVE 中重新部署了 TrueNAS 和 Home Assistant OS。网络结构比以前简单了,后续维护和排查问题也更直接。
下面简单记录一下 2026 年 9 月这次迁移,以及现在家里的网络配置。
调整前的网络架构
底层是一台 N6005 小主机,配置为 4 核 CPU、16 GiB 内存和 1 TB SSD,另外还连接了几块用于存储的机械硬盘。主机安装 PVE,路由系统和其他服务都以虚拟机的形式运行。
当时几个主要服务的 IPv4 地址如下:
| 地址 | 用途 |
|---|---|
192.168.31.1 |
PVE |
192.168.31.2 |
iKuai |
192.168.31.3 |
ImmortalWrt |
192.168.31.4 |
群晖 |
192.168.31.5 |
Home Assistant |
iKuai 是主路由,负责 PPPoE 拨号、DHCP、端口映射、动态 DNS,以及当时需要的多线路和流量管理。ImmortalWrt 的网关指向 iKuai,作为旁路由提供额外的网络功能。
这套结构最大的问题是链路比较绕。同一个请求可能经过 iKuai 和 ImmortalWrt,也可能只经过其中一个。实际使用中,我遇到过部分流量没有走完整链路、DNS 行为与预期不一致等情况。问题出现以后,需要同时检查两个系统,定位起来很麻烦。
除此之外,小主机的 BIOS 电池早就没电了,我又一直懒得换。过去两年里每次断电,机器不但无法自动开机,还会丢失默认引导设置。这次迁移前我终于更换了电池,把这个拖了很久的问题一起解决了。
为什么放弃 iKuai
旧架构其实还能继续用,只是我已经不想再维护两套路由配置了。
iKuai 在使用过程中出现过不少问题,更新有时也比较奇怪。它本身不开源,后来又逐渐要求绑定官方平台才能使用一些基础功能,这让我越来越不愿意继续把整个家庭网络的入口交给它。
双路由也带来了不少麻烦。拨号、DNS、DHCP、防火墙和流量统计分散在两个系统里,改一边的配置时还要想一下另一边会不会受影响。换成单 ImmortalWrt 后,所有流量都走同一套规则,出问题也只需要检查一个系统,省心了很多。
底层虚拟化仍然选择 PVE。这样既可以把路由系统和其他服务隔离开,也方便做快照、备份和恢复。最终迁移发生在 2026 年 9 月 13 日至 14 日。
现在的整体架构
N6005 小主机带有 4 个 2.5 GbE 网口。PVE 保留第一个物理网口并将它加入 vmbr0,其余 3 个网口直接传给 ImmortalWrt。这里宿主机和虚拟机里的接口名称容易混淆,最终关系如下:
| ImmortalWrt 接口 | 连接方式 | 用途 |
|---|---|---|
eth0 |
VirtIO → PVE vmbr0 → 第一个物理网口 |
连接电脑,也是 PVE 进入局域网的通道 |
eth1 |
PCI 直通 | 备用 LAN 口,目前空闲 |
eth2 |
PCI 直通 | 连接锐捷 X60 Pro,工作在 AP 模式 |
eth3 |
PCI 直通 | 连接光猫并进行 PPPoE 拨号 |
eth0、eth1 和 eth2 被加入 br-lan,eth3 单独作为 WAN。外网流量从 eth3 进入 ImmortalWrt,经过路由和防火墙处理后,再由 br-lan 发往电脑、AP 和 PVE 中的其他虚拟机。
光猫
│
│ PPPoE
▼
ImmortalWrt eth3 (WAN)
│
├── br-lan ── eth2 ── 无线 AP
│ ├─ eth1 ── 备用 LAN
│ └─ eth0 (VirtIO)
│ │
│ vmbr0
│ ├─ PVE
│ ├─ TrueNAS
│ ├─ Home Assistant OS
│ └─ 物理网口 ── 电脑
│
└── WireGuard ── 远程管理设备
局域网继续使用 192.168.31.0/24,几个基础服务的地址调整为:
| IPv4 | ULA IPv6 | 用途 |
|---|---|---|
192.168.31.1 |
不配置 | PVE |
192.168.31.2 |
fdd4:afac:5c5b::2 |
ImmortalWrt |
192.168.31.3 |
fdd4:afac:5c5b::3 |
TrueNAS |
192.168.31.4 |
fdd4:afac:5c5b::4 |
Home Assistant OS |
192.168.31.10 |
按设备分配 | 无线 AP |
ULA 主要用来给局域网里的服务分配固定地址。运营商下发的 IPv6 前缀仍然通过 SLAAC 分配给终端,PVE 本身用不到公网 IPv6,我就没有给它配置。
PVE 和虚拟机
迁移时使用的是 PVE 9.2.18。3 台虚拟机都设置为随宿主机启动,并明确了启动顺序:先启动路由,确认网络可用后,再启动 TrueNAS 和 Home Assistant。
| VMID | 系统 | CPU | 内存 | 磁盘 | 启动顺序 |
|---|---|---|---|---|---|
| 101 | ImmortalWrt | 2 vCPU | 4 GiB | 8 GiB 系统盘 + 40 GiB 数据盘 | 1 |
| 102 | TrueNAS | 2 vCPU | 6 GiB | 32 GiB 系统盘 + 数据盘 | 2 |
| 103 | Home Assistant OS | 2 vCPU | 2 GiB | 32 GiB 系统盘 | 3 |
ImmortalWrt 的 CPU 调度权重稍高一些。平时 N6005 的负载很低,这个设置更多是为了避免宿主机繁忙时影响路由。旧 iKuai 虚拟机已经退出运行,但迁移前的虚拟机备份仍然保留,以便真的遇到问题时回退。
PVE 自己使用 192.168.31.2 作为默认网关和首选 DNS。硬件时钟也统一改成 UTC,并由 Chrony 同步,避免 BIOS 时间、系统时间和日志时间互相打架。
ImmortalWrt 配置
ImmortalWrt 现在是整套网络的唯一主路由。PPPoE 的 MTU 和 MRU 都设置为 1492,实测对应大小的数据包可以正常通过,再大一字节则会正确返回需要分片。
IPv4 继续使用 NAT,IPv6 则直接使用运营商下发的前缀,没有再套一层 NAT66。防火墙这边基本是默认拒绝从 WAN 主动访问 LAN,只放行已经建立的连接和我自己添加的规则。UPnP 和 NAT-PMP 也都关掉了,目前唯一主动开放的管理入口是后面会提到的 WireGuard。
DHCPv4 地址池为 192.168.31.10 至 192.168.31.254,PVE、路由器、TrueNAS 和 Home Assistant 则使用固定地址。IPv6 除了运营商下发的前缀外,还保留一段 ULA,避免公网前缀变化后管理地址也跟着变化。
DNS 也交给 ImmortalWrt 统一处理。上游配置了多个加密 DNS 服务,主线路不可用时会按顺序切换。我没有强制劫持客户端的 DNS,所以设备自己设置安全 DNS 或 VPN 也不会受到影响。
另外,我给局域网里的几个管理页面配了内网域名,大概是这样:
pve.home.example.com -> 192.168.31.1
router.home.example.com -> 192.168.31.2
nas.home.example.com -> 192.168.31.3
ha.home.example.com -> 192.168.31.4
PVE、ImmortalWrt 和 TrueNAS 的管理页面都通过 DNS-01 签发 HTTPS 证书。我也尝试过给 Home Assistant 配 HTTPS,但 HAOS 的证书同步比想象中麻烦,最后还是改回了 HTTP。反正它只在局域网和 WireGuard 里使用,暂时没有必要继续折腾。
流量统计使用 Bandix,数据保存在独立的 40 GiB 数据盘中。为了保证基于 conntrack 的设备统计完整,软件和硬件流量分载都保持关闭。N6005 处理当前的千兆宽带没有明显压力,所以我更愿意保留准确的统计,等以后真的遇到性能瓶颈再考虑开启分载。
日志同样写入数据盘,避免只保留很小的内存日志。路由器启用了 NTP 客户端,DNS、LuCI 和 SSH 也只监听局域网接口,不会直接暴露在 WAN 上。
TrueNAS 配置
以前的存储服务由群晖承担,这次改成了 TrueNAS。迁移初期我先用一块 100 GiB 虚拟磁盘建立临时测试池,确认网络、磁盘识别、配置备份和虚拟机恢复都没有问题后,再接入正式磁盘。
目前使用两块 16 TB 机械硬盘保存数据,重要内容在两块盘上各留一份。我没有把它们单纯合并成更大的容量,毕竟其中一块盘真的出问题时,至少另一块上还有一份能用的数据。
TrueNAS 的管理地址固定为 192.168.31.3,同时保留稳定的 ULA IPv6 地址。管理页面只允许从局域网或远程管理隧道访问,不直接开放到公网。除了虚拟机级别的备份,我也保留了 TrueNAS 自身的配置导出;这样即使系统盘损坏,也不需要从头回忆每一项设置。
不过现在还算不上完整的备份方案。如果是误删除、文件损坏,或者整台主机一起出问题,两块盘上的数据仍然可能同时受到影响。后面还得继续补自动快照和异地备份。
Home Assistant OS
Home Assistant OS 使用 VM 103,分配 2 vCPU、2 GiB 内存和 32 GiB 系统盘,地址固定为 192.168.31.4。它排在启动顺序的最后,在 ImmortalWrt 和 TrueNAS 之后启动。
HAOS 这部分反而没什么特别要写的。装好以后,把家里的设备逐个加进去就可以了。目前我只完成了基础部署和原生备份,之后再慢慢补设备和自动化。
从外面回家
家里的 IPv4 在运营商 CGNAT 后面,没办法直接做 IPv4 端口转发,所以我用 WireGuard 建了一条远程管理隧道,入口走 IPv6。
WireGuard 使用分流模式,只把 192.168.31.0/24 和对应的 ULA 网段送回家里。手机或电脑的普通互联网流量仍然使用当前网络,不会绕家里的路由器转发。隧道可以访问 PVE、ImmortalWrt、TrueNAS、Home Assistant 和 AP,但不能借道访问公网;路由器自身也只向隧道开放 DNS、SSH、管理页面和 Ping。
我已经用手机流量测试过这条隧道,从外面可以正常打开 PVE、ImmortalWrt、TrueNAS、Home Assistant 和 AP,手机自己的上网流量也不会绕回家里。现在需要临时处理家里的服务时,打开 WireGuard 就可以了。
迁移和备份
这次迁移没有直接删掉旧系统,而是按可回退的顺序进行:
- 先备份 iKuai、PVE 网络配置和原有虚拟机。
- 创建 ImmortalWrt 虚拟机,配置系统盘、数据盘、VirtIO 网卡和 3 个直通网口。
- 完成 PPPoE、IPv4、IPv6 前缀委派、DHCP 和 DNS,再验证电脑与 AP 都能正常上网。
- 确认单路由工作稳定后,将 PVE 的网关和 DNS 切换到 ImmortalWrt,并停止 iKuai。
- 部署 TrueNAS 和 Home Assistant OS,设置固定地址和虚拟机启动顺序。
- 导出各系统配置,对虚拟机备份做完整性校验,最后执行一次冷启动测试。
最后我又做了一次冷启动。3 台虚拟机都按照设置的顺序启动,PPPoE、IPv6、DNS、流量统计和远程管理也都能自己恢复,这次迁移就算完成了。
接下来还要做什么
现在这套架构已经可以稳定使用,但还有几件事没有完成:
- 给 PVE 和各虚拟机建立自动备份计划,而不是只依赖手动导出;
- 为 TrueNAS 增加更完整的快照、校验和异地备份策略;
- 继续配置 Home Assistant 的设备接入与自动化;
- 增加 UPS 或其他断电保护,减少机械硬盘和 SSD 的异常断电;
- 等有时间以后再配置 DN42。
整套东西折腾完以后,最明显的感受就是少一层确实轻松很多。以前遇到网络问题时,我要在 iKuai 和 ImmortalWrt 之间来回检查;现在拨号、DHCP、DNS、防火墙和流量统计全都在 ImmortalWrt 里,基本看一处就够了。
PVE 负责虚拟化,ImmortalWrt 负责网络,TrueNAS 负责存储,Home Assistant 负责家里的设备。功能没有比以前少,但每一部分在做什么都清楚了。对我来说,这就是这次家庭网络 2.0 最大的意义。