本页目录
家庭网络架构文档
一句话:电信 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 走有线回传,不占用无线带宽。
二、Mesh 网络
| 节点 | IP | 硬件 | 位置 | 覆盖难点 | 回传 |
|---|---|---|---|---|---|
| root | .1 | RP01 | 入户 | 客厅中心 | — |
| leaf | .62 | RC06 | 客厅 | 覆盖入户区 | 有线 |
| leaf | .67 | RP03 | 主卧 | 隔两道承重墙 | 有线 |
| leaf | .80 | RP03 | 书房 | 核心设备区 | 有线 |
| leaf | .227 | RP03 | 次卧 | 最远,单 AP 无信号 | 有线 |
SSID:308_6G_WIFI(5G,日常)+ 隐藏(2.4G,IoT 专用)。
三、关键主机
| 设备 | IP | 角色 | 连接 | 系统 |
|---|---|---|---|---|
| ONT | — (桥接,无 IP) | 光电转换 | 光纤入,以太网出 | 电信 GPON |
| 小米主路由 | .1 | PPPoE/NAT/DHCP/Mesh root | WAN 接光猫 | MiWiFi(RP01) |
| li-home-router | .7 | 旁路由:透明代理+DNS(AdGuard) | 有线单网口,挂书房 AP LAN | iStoreOS(N100) |
| li-home-0 | .8 | 桌面:开发+对外服务,静态 IP 网关→.1,不走代理 | WiFi(MT7927),连书房 AP | Gentoo |
| li-home-1 | .9 | 已退役旁路由,仅 SSH | WiFi | Win11 |
关键设计: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 链路
五、流量路径
正常模式
① 大陆 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 挂了)
六、分流策略与回国流量防护
曾发生 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,DIRECT → GEOIP,CN,DIRECT → MATCH,PROXY。fake-ip 漏网的 CN 域名进 mihomo 后,GEOIP,CN 解析真实 IP 拦截。
关键 sysctl
| 参数 | 值 | 原因 |
|---|---|---|
net.ipv4.conf.*.send_redirects | 0 | 否则 .7 发 ICMP 重定向,客户端绕过 .7 直连 .1 形成"双路径":同目标客户端直连 + mihomo 代拨同时存在,经主路由同一公网 IP NAT 后触发服务器 PAWS 丢弃时间戳较小的那条 → i/o timeout 风暴(闲鱼等 App 卡死真凶)。对所有单臂/发夹弯旁路由方案都适用,不只是本机 |
net.ipv4.conf.*.rp_filter | 0 | 允许非对称,配合发夹弯 |
出国线路
三台 VPS 分布在不同网络线路上,延迟和稳定性差异来自回国线路的 QoS 等级:
| 线路 | 全称 | 优先级 | 特点 | 适合 |
|---|---|---|---|---|
| CN2 GIA | China Telecom Next Gen Carrier | 最高 | 电信顶级线路,全程 CN2 骨干不经过 163 网,QoS 最低,晚高峰基本不掉速 | 对延迟/稳定性有要求的主力节点 |
| 9929 | China Unicom Premium | 中高 | 联通精品线路,类似 CN2 GIA 但走联通骨干,北方联通宽带用户最优 | 联通用户直连最优 |
| 4837 | China Unicom Standard | 普通 | 联通标准国际线路,晚高峰拥堵明显但价格便宜 | 备线/冷备/预算敏感 |
本机节点
| 节点 | 线路 | 协议 | 延迟 | 备注 |
|---|---|---|---|---|
| US3-Hy2(主选) | CN2 GIA | Hysteria2(UDP+Brutal) | 136ms | 主力,晚高峰稳;抗丢包 |
| US2-Hy2 | 9929 | Hysteria2 | 168ms | 联通线路,北方快 |
| US1-Hy2 | 4837 | Hysteria2 | 213ms | 廉价备线,晚高峰慢 |
| 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 握手丢包率差异很大。个人阶段性调研结果(价格随时间变动,仅作参考):
优质(主力推荐):
| 商家 | 线路 | 参考价格 | 特点 |
|---|---|---|---|
| DMIT | CN2 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 API | 127.0.0.1:9090 | 健康探测 |
| mihomo mixed | :7890(SOCKS5+HTTP) | 显式代理入口 |
| mihomo redir | :7891 | 透明代理 redirect 入站 |
| mihomo DNS | :1053(fake-ip) | AdGuard 上游 |
| Nikki dashboard | http://.7:9090/ui | Web 控制台 |
| AdGuard Home | docker host 网络,http://.7:8083 | DNS 广告过滤,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):
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 或标记 TUNmangle_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_masqinclude
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。
| 服务 | 用途 | 可用性 |
|---|---|---|
| DERP | Tailscale 中继 | 高 |
| rathole | 内网穿透(见 rathole-tunnel.md) | 高 |
| paste/mdserve | 笔记分享 | 中 |
| Prometheus | 监控采集 | 中 |
| sunshine | 游戏串流 | 低 |
| 本地 LLM | AI 推理(见 local-llm.md) | 低 |
十、守护进程
| 守护 | 位置 | 场景 |
|---|---|---|
| nikki-failopen | N100(procd) | mihomo/AdGuard 进程异常 |
| 通电自启 | N100(BIOS) | 停电恢复 |
| wifi-watchdog | li-home-0(systemd timer) | WiFi 驱动/射频异常 |
| sync-mihomo-to-router | li-home-0(systemd timer,03:45) | 真源→旁路由配置漂移 |
| sync-subscribe | li-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-21 | N100 旁路由上线,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;节点洞察 |
相关文档
- rathole-tunnel.md — 隧道到家方案
- network-recovery.md — 故障恢复手册
- monitoring.md — 监控架构