本页目录

家庭网络架构文档

一句话⁠:电信 GPON 桥接 → 小米主路由 PPPoE 拨号 → 全屋有线 Mesh(4 AP)→ N100 单网口旁路由(mihomo + AdGuard + CN-IP 硬旁路)→ li-home-0 直连主路由 + rathole 对外暴露。全屋默认走代理,核心桌面走直连。

拓扑版本 v2.1,本文作为全屋网络的运维真源。

一、物理拓扑

光猫只做光电转换(桥接,不拨号不路由不 NAT),公网 IP 直落主路由 PPPoE 接口,无双重 NAT。全屋约 120m² 四室,单 AP 无法覆盖所有房间(尤其主卧和次卧隔两道承重墙),4 AP 有线 Mesh 覆盖死角 + 统一 SSID 无缝漫游。全部 AP 走有线回传,不占用无线带宽。

家庭网络物理拓扑(v2.1) · 120m² 四室 · 4 AP 有线 Mesh 覆盖 Internet GPON · 电信 ONT 光猫 · 桥接 主路由 .1 (RP01) PPPoE 拨号 · NAT · DHCP · Mesh root 全有线回传 客厅 .62 RC06 · 入户区 主卧 .67 RP03 · 隔两墙 书房 .80 RP03 · N100 挂这里 次卧 .227 RP03 · 最远端 N100 .7 (旁路由) 单网口 · 挂书房 AP LAN li-home-0 .8 (WiFi)

二、Mesh 网络

节点IP硬件位置覆盖难点回传
root.1RP01入户客厅中心
leaf.62RC06客厅覆盖入户区有线
leaf.67RP03主卧隔两道承重墙有线
leaf.80RP03书房核心设备区有线
leaf.227RP03次卧最远,单 AP 无信号有线

SSID:308_6G_WIFI(5G,日常)+ 隐藏(2.4G,IoT 专用)。

三、关键主机

设备IP角色连接系统
ONT— (桥接,无 IP)光电转换光纤入,以太网出电信 GPON
小米主路由.1PPPoE/NAT/DHCP/Mesh rootWAN 接光猫MiWiFi(RP01)
li-home-router.7旁路由:透明代理+DNS(AdGuard)有线单网口,挂书房 AP LANiStoreOS(N100)
li-home-0.8桌面:开发+对外服务,⁠静态 IP 网关→.1,不走代理WiFi(MT7927),连书房 APGentoo
li-home-1.9已退役旁路由,仅 SSHWiFiWin11

关键设计:li-home-0(.8)静态配置网关指向主路由(.1),旁路由透明代理不覆盖它——这台机器自己跑 TUN 模式 mihomo 自代理,DNS 是真实 IP 架构,和全屋其它设备走的是两条不同的代理路径。

四、DHCP 与 DNS

  • 网关⁠:DHCP 默认下发 .7(N100),全屋流量经旁路由代理。例外:li-home-0(.8)静态配置网关→.1。
  • DNS:主 .7(N100 AdGuard),备用公网 DNS 兜底。
  • 租约⁠:1–2 小时,缩短可在主路由故障时加速 DHCP 恢复。
  • 地址池⁠:192.168.31.5–250。

正常 DNS 链路

DNS 链路:客户端 → AdGuard → mihomo fake-ip 分流 → 上游 客户端 AdGuard :53 广告过滤 + 缓存 · Docker mihomo :1053 fake-ip 分流 国内: UDP 223.5.5.5 国外: DoH 1.1.1.1 fake-ip 模式下,AdGuard 收上游响应全是 198.18.x 段,mihomo 内部映射还原真实 IP。 ⚠ AdGuard 不要开 DNSSEC —— fake-ip 破坏 DNSSEC 信任链,会判定所有域名被劫持并全部拒绝。 ✅ 下游客户端全部指向 AdGuard,无 DNS 泄漏。

五、流量路径

正常模式

流量路径:旁路由代理 + 回国直连双路径 客户端 N100 (.7) · nftables prerouting 发夹弯:MASQUERADE 改源→.7 ① 大陆 IP 防火墙 return 不进 mihomo,直连回国 ② 其余流量 mihomo 分流 国内直连 / 国外走代理 主路由 .1 PPPoE → 公网 li-home-0(.8) 网关→.1,直连主路由,不经旁路由 ① 大陆 IP 靠 china_ip 集合(~3.7k chnroute)在防火墙 prerouting 就 return,物理上不进 mihomo,回国流量硬防护。

① 大陆 IP 在防火墙层 return,物理上不进 mihomo——回国流量硬防护。单网口发夹弯(同 br-lan 进出)转发回 .1,⁠必须 MASQUERADE 改源成 .7,否则回程不对称直接断网。 ② fake-ip 漏命中 geosite 的 CN 域名⁠(拿 198.18.x)仍进 mihomo,靠规则尾 GEOIP,CN,DIRECT(解析真实 IP)二次兜底。 li-home-0 单独走 TUN 自代理,DNS 返真实 IP,无 fake-ip 歧义,回国本就稳。

Fail-Open 模式(mihomo/AdGuard 挂了)

Fail-Open:旁路由故障时全直连,保证不断网 客户端 N100 (.7) · 仍是网关 nft redirect 已移除 · MASQ 注入 主路由 .1 PPPoE · DNS 接管 公网 触发条件:mihomo 或 AdGuard 进程异常 → nikki-failopen(procd)自愈 行为:nftables redirect 整表删除 → 全流量直通主路由 → DNS :53 重定向到主路由 无代理 · 无广告过滤 · 全直连 —— 降级保底,不断网

六、分流策略与回国流量防护

曾发生 CN 域名漏命中 geosite → MATCH,PROXY → 美国节点回连国内服务器 → GFW 识别"回国流量"封 VPS IP。现采用双层防护⁠:

第一层(硬,防火墙):bypass_china_mainland_ip=1(v4)填充 nft china_ip 集合(~3.7k chnroute)。大陆 IP 在 prerouting 就 return,物理上到不了 mihomo,与域名是否命中 geosite 无关。

  • 单网口发夹弯需 table inet bypass_masq 把转发流量 MASQUERADE 改源成 .7。
  • v6 暂不开防火墙旁路(避免 v6 发夹弯翻车),v6 CN 走 mihomo GEOIP,CN 兜底。

第二层(兜底,mihomo 规则):规则尾 GEOSITE,cn,DIRECTGEOIP,CN,DIRECTMATCH,PROXY。fake-ip 漏网的 CN 域名进 mihomo 后,GEOIP,CN 解析真实 IP 拦截。

关键 sysctl

参数原因
net.ipv4.conf.*.send_redirects0否则 .7 发 ICMP 重定向,客户端绕过 .7 直连 .1 形成"双路径":同目标客户端直连 + mihomo 代拨同时存在,经主路由同一公网 IP NAT 后触发服务器 PAWS 丢弃时间戳较小的那条 → i/o timeout 风暴(闲鱼等 App 卡死真凶)。⁠对所有单臂/发夹弯旁路由方案都适用⁠,不只是本机
net.ipv4.conf.*.rp_filter0允许非对称,配合发夹弯

出国线路

三台 VPS 分布在不同网络线路上,延迟和稳定性差异来自回国线路的 QoS 等级:

线路全称优先级特点适合
CN2 GIAChina Telecom Next Gen Carrier最高电信顶级线路,全程 CN2 骨干不经过 163 网,QoS 最低,晚高峰基本不掉速对延迟/稳定性有要求的主力节点
9929China Unicom Premium中高联通精品线路,类似 CN2 GIA 但走联通骨干,北方联通宽带用户最优联通用户直连最优
4837China Unicom Standard普通联通标准国际线路,晚高峰拥堵明显但价格便宜备线/冷备/预算敏感

本机节点

节点线路协议延迟备注
US3-Hy2(主选)CN2 GIAHysteria2(UDP+Brutal)136ms主力,晚高峰稳;抗丢包
US2-Hy29929Hysteria2168ms联通线路,北方快
US1-Hy24837Hysteria2213ms廉价备线,晚高峰慢
US*/REALITY同上VLESS+REALITY(TCP)420–569ms过 GFW 被 QoS/丢包拖垮,仅极端备份

Hy2 是 UDP+Brutal 抗丢包,REALITY 是 TCP——过 GFW 时 TCP 被 QoS 丢包后重传放大延迟,UDP 直接绕开。所以三个 REALITY 节点延迟是 Hy2 的 3 倍,基本是摆设。 PROXY 为手动 Selector 钉死 US3-Hy2,不用 Auto——宁愿主选挂了手动换,也不让 mihomo 自动切到慢节点(切过去用户体感就是"网炸了但没全炸"——更难排查)。

VPS 服务商参考

线路重要,但 VPS 服务商也重要——同样的 CN2 GIA,不同商家的超售比、线路质量、到大陆的 TCP 握手丢包率差异很大。个人阶段性调研结果(价格随时间变动,仅作参考):

优质(主力推荐):

商家线路参考价格特点
DMITCN2 GIA~$12–15/月(1C1G)CN2 GIA 老牌,线路极稳,到大陆几乎 0 丢包;贵但值
搬瓦工/老挖机⁠(BandwagonHost)CN2 GIA~$50–100/年(CN2 GIA 套餐)老牌,CN2 GIA 套餐性价比高,DIA 线路;经常缺货需蹲
Sharon(莎伦)CN2 GIA/9929~$8–12/月小众但线路扎实,9929 套餐性价比突出

性价比(可用):

商家线路参考价格特点
丽萨主机4837/CN2 混~$5–8/月线路一般(4837 居多),晚高峰会慢,对延迟不敏感的备线够用
RackNerd普通国际~$15–30/年超便宜但回国线路差,仅适合冷备/非实时用途

廉价(备线/实验):

商家线路参考价格特点
野草云4837~$3–5/月便宜,晚高峰拥堵严重,只适合做最后一道 fallback
CloudCone普通国际~$20–30/年超低年付,OOKLA 测速好看但回国 TCP 不行,仅冷备

选型原则⁠:主力节点别省钱——CN2 GIA 用 DMIT 或搬瓦工,稳就是快;备线用 9929(联通好)或 4837(便宜),REALITY 冷备挂最便宜的那台。本机 US3 在 DMIT CN2 GIA,US2 在 9929,US1 在 4837 廉价机。

提速项

  • tcp-concurrent: true:并发拨号多解析 IP 取最快。
  • QUIC reject 规则故意保留:AND,(DST-PORT,443),(NETWORK,UDP),(NOT,GEOSITE,cn),REJECT 强制外网 HTTP/3→h2,治"QUIC-over-Hy2 空闲后复用挂死",放开会复发。

IPv6 为什么不开硬旁路⁠:v4 硬旁路的关键是发夹弯 MASQUERADE(改源成 .7 保证回程对称),这个操作依赖 N100 有固定的内网 v4 地址。但 v6 地址是 SLAAC 动态分配的,没有稳定的内网地址做 SNAT 锚点——发夹弯的回程对称在 v6 上无法可靠实现,强行开只会随机断流。所以 v6 CN 当前只靠 mihomo 规则层 GEOIP,CN 兜底,不走防火墙 prerouting 硬旁路。 监控⁠:N100、li-home-0、主路由的关键组件接入 Prometheus + Grafana,见 monitoring.md。节点可用性监控靠 Prometheus Blackbox Exporter 探活,但切换仍手动(不用 Auto 是有意选择——宁愿主选挂了手动换,也不自动切到慢节点)。

七、N100 关键组件

组件地址/路径说明
mihomo 内核/usr/bin/mihomo,procd via /etc/init.d/nikki透明代理+TUN
mihomo API127.0.0.1:9090健康探测
mihomo mixed:7890(SOCKS5+HTTP)显式代理入口
mihomo redir:7891透明代理 redirect 入站
mihomo DNS:1053(fake-ip)AdGuard 上游
Nikki dashboardhttp://.7:9090/uiWeb 控制台
AdGuard Homedocker host 网络,http://.7:8083DNS 广告过滤,upstream→:1053
failopen daemon/usr/local/sbin/nikki-failopen.sh,procd健康检查+自动 fail-open
CN 旁路 SNAT/etc/nikki/scripts/bypass-masq.{nft,sh} + firewall include发夹弯 masquerade,持久化

N100 迁移动机与硬件选型:原先旁路由跑在桌面机 WiFi 上,WiFi 抖动全屋断网;换 N100(低功耗 x86,iStoreOS,单千兆口)挂书房 AP LAN 口做有线旁路由,从此与 WiFi 解耦。

八、nftables 结构

处理顺序⁠(prerouting → forward → postrouting):

nftables 处理顺序:prerouting → forward → postrouting 入站包 fw4 forward(policy drop) nikki dstnat / mangle_prerouting 透明代理入口 · 按目的地分流 大陆 IP / 私网 → return,不进代理(直连) 其余流量 → DNAT :7891 或标记 TUN bypass_masq postrouting 发夹弯 SNAT 锚点 CN 直连流量 → MASQUERADE(src→.7,回程对称) fw4 srcnat_lan(docker MASQUERADE) 出站 大陆 IP 在 prerouting 就 return,物理上不进 mihomo,与域名是否命中 geosite 无关。 bypass_masq 独立成表,nikki 重启/fail-open 不影响回程对称的 SNAT 锚点。

table inet fw4(OpenWrt 防火墙)

  • forward:policy drop;放行 TUN 流量 + LAN→WAN 转发
  • srcnat_lan:docker MASQUERADE

table inet nikki(透明代理规则)

  • china_ip 集合:~3.7k chnroute CIDR(由 bypass_china_mainland_ip=1 填充)
  • dstnat / mangle_prerouting_lan:大陆 IP / 私网 / 198.18 命中 → return 旁路;其余 DNAT TCP→:7891 或标记 TUN
  • mangle_output:本机出站 → TUN
  • fail-open 时整表删除

table inet bypass_masq(CN-IP 旁路的发夹弯 SNAT)

  • postrouting(nat hook,priority srcnat+5):iifname br-lan oifname br-lan ip daddr != {私网+198.18+组播} masquerade
  • 只命中被 china_ip 旁路、需转发回 .1 的公网 CN 直连流量,改源成 .7 保证回程对称
  • 独立于 table nikki,nikki 重启不影响⁠;持久化靠 firewall.bypass_masq include

table inet failopen(故障注入,恢复时删除)

  • srcnat:MASQUERADE 192.168.31.0/24 → 非本地
  • dns:DNAT :53 → .1:53

九、对外服务(li-home-0)

这些服务全部依赖 li-home-0 的 WiFi。wifi-watchdog(systemd timer 30s)自动恢复射频/驱动异常——短暂抖动可自愈。长期高可用服务应迁到有线的 N100。

服务用途可用性
DERPTailscale 中继
rathole内网穿透(见 rathole-tunnel.md)
paste/mdserve笔记分享
Prometheus监控采集
sunshine游戏串流
本地 LLMAI 推理(见 local-llm.md)

十、守护进程

守护位置场景
nikki-failopenN100(procd)mihomo/AdGuard 进程异常
通电自启N100(BIOS)停电恢复
wifi-watchdogli-home-0(systemd timer)WiFi 驱动/射频异常
sync-mihomo-to-routerli-home-0(systemd timer,03:45)真源→旁路由配置漂移
sync-subscribeli-home-0(systemd timer,03:30)真源→公网订阅配置漂移

配置派生流水线

家里三处需要 mihomo 配置:本机(TUN 自代理)、N100(全屋透明代理)、公网订阅(手机漫游导入)。三份的节点列表、代理分组、分流规则必须一致⁠,但 DNS、TUN、入站方式各不相同。如果各自独立维护必然漂移。

方案⁠:单一真源(/opt/mihomo/mihomo_config/config.yaml,唯一手动编辑的文件,含 proxies/groups/rules 三段)+ 两条 timer 驱动的派生脚本。

#1 本机⁠:直接使用真源。TUN device Meta + 本地 AdGuard + fake-ip + controller。

#2 N100 旁路由⁠(sync-mihomo-to-router.sh,timer 03:45):

  • 从真源只抽 proxies/proxy-groups/rules 三段 → /etc/nikki/profiles/home.yaml
  • 本机 mihomo -t 校验真源 → scp 到 N100 → nikki -t 校验 → 旧档备份(带时间戳)→ 校验失败自动回滚 → reload Nikki
  • DNS/TUN/sniffer 由 N100 本地 UCI mixin 注入,不进 profile——这些是目标端特有,不应从真源覆盖

#3 公网订阅⁠(sync-subscribe.sh,timer 03:30):

  • 输出 clash.yaml(Clash 导入)+ sub.txt(v2rayN base64 分享链接)
  • 脱本机化消毒:剔除 external-controller+secret(泄漏即被控)、tun 整段(手机不需要)、nameserver:127.0.0.1(漫游设备到不了)、PROCESS-NAME 规则(手机永不匹配)
  • DNS 替换为 fake-ip + 公网 DoH,国外域名走出口解析防泄漏
  • 入口:https://subscribe.liz6.com(Caddy file_server,路径 token 鉴权)

两条 timer 错开 15 分钟避免同时写 N100。改完真源想立即生效手动跑对应脚本即可,脚本幂等。

十一、已知风险

风险影响缓解
li-home-0 WiFi 单点rathole/DERP 等高可用服务全挂长期迁到有线 N100;wifi-watchdog 30s 自愈为短期止血
N100 单网口发夹弯单臂拓扑回程不对称必断MASQUERADE + bypass_masq nft 表保障回程对称
mihomo/AdGuard 进程挂全屋断网(DHCP 网关仍指向 .7)nikki-failopen(procd)进程级自愈
主路由硬件/固件故障全屋断网(PPPoE+NAT+DHCP 全挂)暂无热备;原计划 N100 做主路由未落地
光猫桥接ONT 只做光电转换,不拨号不路由不 NAT,公网 IP 直落主路由基本不是故障源,无双重 NAT

详细评估和恢复流程见 network-recovery.md

变更记录

日期变更
2026-06-21N100 旁路由上线,li-home-0 旁路由退役;DHCP 网关/DNS 从 .8 切到 .7;N100 fail-open + li-home-0 wifi-watchdog 部署
2026-06-24公网订阅修复:原样照搬本机 config 导致泄漏本机 DNS+管理口 secret+tun,sync-subscribe.sh 加脱本机化消毒;旁路由 profile 重跑刷新;新增 sync-mihomo-to-router.timer
2026-06-27关 ICMP send_redirects:治闲鱼等 App 卡死(双路径 PAWS 丢包风暴根因);CN-IP 防火墙旁路上线(bypass_china_mainland_ip=1 + table inet bypass_masq);tcp-concurrent + CN DNS 改明文 UDP 223.5.5.5;节点洞察

相关文档