OpenWrt养老旁路由从零开始(基于OpenClash与Mihomo内核)

OpenWrt 养老旁路由从零开始 (基于 OpenClash 与 Mihomo 内核)

本文针对原本使用 PassWall 的旁路由方案进行彻底重构与升级。采用目前生态活跃度最高、规则分流更精细的 OpenClash(Meta/Mihomo 内核),并结合 MosDNS(智能分流与高速缓存) 与 AdGuardHome(全网去广告),构建一套兼顾低延迟、防 DNS 泄漏、断网容灾、全屋无感漫游的终极家庭养老网络系统。


一、准备工作与网络架构

1. 硬件与环境准备

  • 物理设备:软路由(x86 J1900/J4125/N100、N1 盒子、树莓派等独立硬件)或虚拟机/Docker 实例。
  • 上游网络:主路由(iKuai / 华硕 / 硬路由等)正常拨号上网,并负责局域网基础 DHCP。
  • 旁路由网络配置参考:
    • 主路由 IP:192.168.66.1
    • 旁路由 IP:192.168.66.250(子网掩码 255.255.255.0,网关指向主路由 192.168.66.1)

2. iKuai + OpenWrt 旁路由网络拓扑

1
2
3
4
5
6
7
8
9
10
11
[ 宽带光猫 ]
│ (PPPoE 拨号)
[ iKuai 主路由 (192.168.66.1) ] ────────────── 全屋千兆/万兆交换机
│ │
├── (旁路挂载 LAN) ├── 全屋 AP / PC / 电视盒子 / 手机
▼ │ (网关指向 192.168.66.250)
[ OpenWrt 旁路由 (192.168.66.250) ] │
├─ Dnsmasq (53 端口,接收终端 DNS 请求) │
├─ AdGuardHome (3000 面板 / 52 端口,全网广告拦截) │
├─ MosDNS (5335 端口,中国/海外域名智能分流+缓存) │
└─ OpenClash / Mihomo (7892/7895/TUN,策略组分流) ┘

3. 为什么将 PassWall 替换为 OpenClash?

  • 规则粒度更精细:OpenClash 支持丰富的 Rule-Set(如 Loyalsoldier 全套规则集合),能够实现精准的流媒体(Netflix/Disney+/YouTube)、AI(ChatGPT/Claude)、游戏低延迟通道细分。
  • 可视化控制面板更现代:支持 Yacd / Metacubexd 现代 Web 仪表盘,支持实时测速、各连接来源 IP 监控与策略组平滑切换。
  • 分流协议支持全面:深度拥抱 Meta (Mihomo) 内核,原生完美支持 Vless-Reality、Hysteria2、TUIC5 等高抗封锁协议。

二、涉及组件与项目下载

组件名称 项目地址 / 建议版本 主要职责
ImmortalWrt 固件 官方开源项目 基础操作系统,原生对国内网络和硬件有极佳优化
OpenClash vernesong/OpenClash 代理核心管理器,集成 Mihomo (Clash.Meta)
MosDNS sbwml/luci-app-mosdns 国内外域名判定、防 DNS 泄漏与超大内存缓存
AdGuardHome rufengsuixing/luci-app-adguardhome 拦截全网广告与恶意追踪、查询日志审计

三、OpenClash 与相关组件安装步骤

通过 SSH 连接到旁路由(推荐使用 MobaXterm 或终端命令行):

1. 安装 OpenClash 及依赖

1
2
3
4
5
6
7
8
9
# 更新软件包列表
opkg update

# 安装 OpenClash 必要核心依赖
opkg install coreutils-nohup bash iptables dnsmasq-full curl ca-certificates ipset ip-full iptables-mod-tproxy kmod-ipt-tproxy

# 下载并安装 luci-app-openclash
# 前往 OpenClash Releases 下载对应架构安装包(如 x86_64):
opkg install luci-app-openclash_*.ipk

2. 安装 MosDNS 与 AdGuardHome

1
2
3
4
5
6
# 安装 MosDNS 核心及 LuCI 界面
opkg install luci-app-mosdns_*.ipk
opkg install mosdns_*.ipk v2dat_*.ipk v2ray-geoip_*.ipk v2ray-geosite_*.ipk

# 安装 AdGuardHome
opkg install luci-app-adguardhome_*.ipk

四、全链路 DNS 与流量协同设计

为避免循环解析(DNS Loop)与 DNS 污染,我们制定了一套最稳定、最高效的四级 DNS 管道:

1
2
3
4
5
6
7
8
9
10
11
12
13
[ 客户端发出 DNS 查询 (UDP 53) ]
│
▼
[ OpenWrt Dnsmasq (端口 53) ]
│ (重定向/转发)
▼
[ AdGuardHome (端口 52) ] ── (拦截命中广告 -> 返回 0.0.0.0)
│ (放行正常请求)
▼
[ MosDNS (端口 5335) ] ──── 是否国内域名?
├── 是 (国内名单) ──► 递归查询国内公共 DNS (阿里 223.5.5.5 / 腾讯 119.29.29.29)
│
└── 否 (国外/GFW) ──► 转发至 OpenClash 本地 DNS 端口 (1053) 或由 Fake-IP 返回

1. MosDNS 详细配置

  1. 打开 服务 -> MosDNS 后台:
    • 监听端口:默认 5335;
    • 重定向:选择 无(避免直接顶替 53,交由上层调度);
    • 勾选:远程 DNS 首选 IPv4、自定义国内 DNS(填入 223.5.5.5、119.29.29.29);
    • 上游海外 DNS:设置为 OpenClash 的 DNS 监听地址 127.0.0.1:1053;
    • 保存并应用配置。

2. AdGuardHome 详细配置

  1. 打开 服务 -> AdGuardHome:
    • 管理面板监听端口:3000;
    • DNS 服务监听端口:52(绑定在所有接口或 127.0.0.1);
    • 重定向:选择 作为 dnsmasq 的上游服务器;
  2. 登录 Web 控制台 (http://192.168.66.250:3000):
    • 进入 设置 -> DNS 设置:
      • 上游 DNS 服务器:仅填写 127.0.0.1:5335(指向 MosDNS);
      • DNS 缓存配置:大小设为 0 或清空(因为 MosDNS 自带 50,000 条高性能内存缓存,避免双重缓存冗余);
      • 拦截模式:选择 默认 (未指定 IP / 0.0.0.0)。

3. OpenWrt 原生 Dnsmasq 配置

  • 进入 网络 -> DHCP/DNS:
    • DNS 转发:填写 127.0.0.1#52(将所有解析请求交给 AdGuardHome 过滤);
    • 高级设置:勾选 严格按顺序解析,关闭 从 resolv.conf 读取。

五、OpenClash 核心与规则配置

1. 内核切换与模式设定

  1. 进入 OpenWrt 后台 -> 服务 -> OpenClash。
  2. 点击 “插件设置” -> “版本更新”:
    • 将运行内核切换为 **Meta (Mihomo)**。
  3. 点击 “常规设置” -> “模式设置”:
    • 运行模式:推荐选择 Fake-IP (TUN 模式) 或 **Fake-IP (混合模式)**;
    • **TUN 模式堆栈 (Stack)**:
      • 软路由(x86_64、多核高负载)推荐优先选 **Mixed**(兼顾系统内核的高吞吐与用户态防污染);
      • 若在低功耗 ARM / Docker 环境运行或追求极致稳定,可选择 **gVisor**;
    • 本地 DNS 端口:设置为 1053(与 MosDNS 的海外上游端口严格对应)。

2. 导入全功能分流订阅与规则

针对全屋加速需求,推荐在 OpenClash 中应用整合好的规则配置:

  1. 点击顶部导航栏的 “配置管理”;
  2. 在【配置文件上传】处,上传经过 Loyalsoldier 规则强化的全功能 YAML 配置文件;
  3. 关键参数校验:
    • redir-port: 7892
    • tproxy-port: 7895
    • mixed-port: 7893
    • dns.listen: 0.0.0.0:1053
    • dns.enhanced-mode: fake-ip
  4. 上传后选中该配置,点击 “应用配置” 并启动 OpenClash。

3. 控制面板管理

启动成功后,点击 OpenClash 顶部的 “打开控制面板”(如 Metacubexd / Yacd):

  • **🌍选择代理节点**:支持自动测速优选(URL-Test),根据延迟自动选取最优线路;
  • **📢谷歌服务 / 🎬国际流媒体**:将 YouTube、Netflix 等重度流量分配至大带宽专线;
  • **🤖人工智能**:将 OpenAI、Claude 等高风控域名分流至干净原生住宅 IP 节点;
  • **🐟漏网之鱼**:配置兜底规则,防止未收录域名的 DNS 劫持。

六、全屋接入方式(客户端配置)

方案 A:全屋无感模式(主路由 DHCP 下发)

  1. 登录主路由器后台(如 192.168.66.1);
  2. 打开 DHCP 服务器设置,修改下发参数:
    • 默认网关:填入旁路由 IP 192.168.66.250;
    • 主 DNS:填入旁路由 IP 192.168.66.250;
    • 备用 DNS:留空或填写 223.5.5.5;
  3. 保存后全屋设备断开 Wi-Fi 重新连接,即可享受全自动分流与广告过滤。

方案 B:单设备静态模式(不改动主路由)

以 Windows 电脑为例:

  • IP 地址:192.168.66.88(同一网段空闲 IP)
  • 子网掩码:255.255.255.0
  • 默认网关:192.168.66.250
  • 首选 DNS:192.168.66.250

七、避坑与关键排障指南

  1. 旁路由网络回环与断网(MASQUERADE 动态伪装):

    • 实机已解决:现代 ImmortalWrt 23/24 固件底层已全面采用 nftables (Firewall4),无需且不推荐在自定义脚本中手写老旧的 iptables 命令。
    • 标准规范:在 OpenWrt 网络 -> 防火墙 -> 区域 中,编辑 lan 区域,确保勾选 【IP 动态伪装 (MASQUERADE)】 与 【MSS 钳制】,同时 OpenClash 开启“绕过网关兼容模式”,原生解决非对称路由丢包。
  2. IPv6 导致分流绕过或泄露:

    • 实机已解决:已在旁路由的 Dnsmasq 中通过 uci set dhcp.@dnsmasq[0].filter_aaaa='1' 开启了 AAAA 记录过滤,彻底阻断局域网终端获取 IPv6 地址直连逃逸。
    • 双重保障:若主路由(如 iKuai)开启了 IPv6,建议在主路由后台关闭 IPv6,或关闭 IPv6 RA 中的 DNS 下发,确保局域网 DNS 100% 收敛至旁路由。
  3. OpenClash 关机导致全屋断网?:

    • 实机已解决:系统后台已原生运行 openclash_watchdog.sh 进程守护看门狗,任何非预期的核心崩溃会在数秒内被自动拉起,彻底杜绝死锁断网。
    • 分流链路:国内域名由 Dnsmasq (53) -> AdGuardHome (52) -> MosDNS (5335) 直接走阿里/腾讯公共 DNS 进行解析与直连转发,只要旁路由硬件开机,即便代理核心短暂停机维护,全屋基础国内网络依然持续畅通。