旁路由直跑 mihomo 内核:OpenWrt 部署路线概览
梳理主路由与旁路由的分工,讲清内核二进制放置、配置文件路径、透明代理与网关指向,帮新手判断适合哪条部署路线。
先选路线:手动代理验证,再接管网关
OpenWrt 上直接运行 mihomo,指的是由系统启动内核进程,读取 YAML 配置,再按需要接入路由和防火墙。mihomo 是通常所说的 Clash Meta 内核;它不是 LuCI 插件,也不会因为复制进路由器就自动接管全家的流量。图形界面、订阅更新、透明代理规则和开机启动,需要分别安排。
新手建议按三个阶段推进:先让内核通过配置检查,再让一台电脑使用旁路由的显式代理,最后才调整这台电脑的默认网关与 DNS。这样每一步都有明确的验证点,出错时也能快速退回上一层。
| 路线 | 终端怎么接入 | 需要处理的内容 |
|---|---|---|
| 显式代理 | 手动填写旁路由 IP 和 7890 端口 | 内核、配置、局域网访问权限 |
| TUN 接管 | 终端网关指向旁路由 | TUN 设备、路由、DNS、防火墙与 IPv6 |
| 防火墙透明代理 | 终端网关指向旁路由 | REDIRECT 或 TPROXY、策略路由、回环排除 |
如果只想让浏览器使用代理,第一条路线就能满足需求。如果希望电视、游戏设备或不支持手动代理的应用统一接入,才需要研究后两条。已有 OpenWrt 管理插件的设备,应先确认它是否已经启动 mihomo,避免两个管理入口同时控制端口和路由。
主路由与旁路由:先画清流量方向
本文用一个具体的 IPv4 局域网示例说明分工。主路由负责拨号、上网出口和 DHCP;旁路由固定地址,只让指定测试设备先经过它。以下地址用于演示,实际设置前应检查现有网段与地址占用。
- 主路由:
192.168.10.1/24,连接互联网。 - OpenWrt 旁路由:
192.168.10.2/24,上游网关为192.168.10.1。 - 测试电脑:
192.168.10.100/24,开始时仍以主路由为网关。 - DHCP 地址池示例:
192.168.10.100–192.168.10.200,旁路由地址不放入动态池。
旁路由地址固定,DHCP 先保持单一来源
在标准 LuCI 界面中,从「网络」→「接口」→「LAN」→「编辑」检查静态 IPv4 地址和上游网关;不同主题的文字可能略有区别。旁路由 LAN 接口的「DHCP 服务器」中通常应勾选「忽略此接口」,避免与主路由同时分配地址。修改管理地址前,保留有线连接并记下新地址。
同一网段的单臂旁路由,收发流量都可能经过同一个 LAN 接口。它与具有独立 LAN、WAN 的双网口路由器不同,回程路径也可能不对称。是否需要源地址转换、如何处理 ICMP 重定向,要结合现有防火墙和透明代理方案确定,不能把其他设备的几条防火墙命令直接粘贴过来。
旁路由自己的上游网关始终指向主路由,不要指向自己。正式切换前,主路由 DHCP 设置保持不变,只调整一台测试终端。
内核与目录:架构、权限、配置路径先对齐
先通过 SSH 检查硬件与固件。uname -m 查看内核架构,ubus call system board 查看板型和系统信息,df -h 检查存储。选择 mihomo 发布文件时还要核对 CPU 指令集要求;同为 x86_64 的设备,也不代表能运行所有带更高指令集要求的构建。
uname -m
ubus call system board
df -h
free -m
ls -l /dev/net/tun
没有 /dev/net/tun 时,显式代理仍可先测试;启用 TUN 前再处理相应内核模块。OpenWrt 的内核模块必须匹配固件内核版本,不要跨版本强行安装。包管理器可能是 opkg 或 apk,应以当前固件为准。
建议固定三个位置
/usr/bin/mihomo:解压后的内核可执行文件,不是压缩包。/etc/mihomo/config.yaml:实际启用的配置文件。/etc/mihomo/:工作目录,用于配置引用的规则、数据库与运行数据。
将匹配架构的内核上传到指定路径后,设置执行权限并查看版本。配置可能含订阅地址、节点密码或令牌,应限制读取权限,不要直接贴到公开讨论区。
mkdir -p /etc/mihomo
chmod 755 /usr/bin/mihomo
/usr/bin/mihomo -v
chmod 600 /etc/mihomo/config.yaml
/usr/bin/mihomo -t -d /etc/mihomo -f /etc/mihomo/config.yaml
最后一行用于检查配置。若提示字段错误,先按日志修复 YAML 缩进或不兼容参数;若提示缺少规则文件或地理数据库,则检查对应路径和下载连通性。配置检查通过只能说明配置可被加载,不代表节点连接、DNS 和透明代理已经正常。
先开 7890:验证显式代理与订阅内容
下面是一份用于验证监听和直连出口的最小配置。它没有代理节点,所有连接均按 DIRECT 处理,因此不能用来判断订阅节点是否可用。先用它隔离部署问题,再换成已确认支持 mihomo 的完整订阅配置。
mixed-port: 7890
allow-lan: true
bind-address: "192.168.10.2"
mode: rule
log-level: info
ipv6: false
rules:
- MATCH,DIRECT
mixed-port 在同一个端口接受 HTTP 与 SOCKS5 代理连接;allow-lan 允许其他设备访问。监听地址必须是旁路由实际拥有的地址。确认防火墙仅向可信 LAN 开放 TCP 7890,不要在主路由上为它建立互联网端口转发。
/usr/bin/mihomo -d /etc/mihomo -f /etc/mihomo/config.yaml
前台运行便于观察错误。保持这个 SSH 会话,在测试电脑执行下列请求;如果没有 curl,可在系统或浏览器的代理设置中填写 HTTP 代理地址 192.168.10.2、端口 7890。
curl -I --proxy http://192.168.10.2:7890 https://example.com
看到目标站点的 HTTP 响应头,说明电脑能够连接旁路由代理,内核也能向外建立连接。随后导入真实配置,检查代理组引用的名称与规则目标是否一致,再验证目标连接实际选择了哪个策略。仅下载到一个包含订阅链接的文本文件,并不等于得到可直接运行的 YAML 配置。
管理 API 与代理端口不是同一个入口。本阶段不需要开放 external-controller。以后接入面板时,应设置 secret,并限制管理端口的可访问范围。
透明代理:网关、TUN 与 DNS 要一起检查
显式代理成功后,先取消测试电脑的手动代理,再把它的默认网关改为 192.168.10.2。此时只是让数据包经过旁路由;如果没有 TUN 路由或防火墙转发规则,流量不会自动进入 mihomo。不能用“网关已经改了”作为透明代理成功的证据。
TUN 路线的边界
mihomo 的 tun.enable 用于启用虚拟网络设备,auto-route 用于自动配置相关路由,auto-detect-interface 用于自动识别出口。它们并不替代 OpenWrt 所有防火墙设置。尤其在 LAN 同口进出的旁路由环境中,还要核对转发许可、内核流量路径、排除目标和回程。
另一条路线是使用 redir-port 或 tproxy-port 配合防火墙。REDIRECT 常用于 TCP 重定向,TPROXY 可用于 TCP、UDP,但需要配套策略路由。现代 OpenWrt 常见 firewall4 与 nftables,旧教程可能基于 firewall3 与 iptables;两类规则不能不加区分地混用。两条路线也不应同时抢占同一批连接。
DNS 监听与 DHCP 下发要对应
常见做法是保留 dnsmasq 在 LAN 的 53 端口提供 DNS 服务,让 mihomo DNS 监听本机 127.0.0.1:1053,再把 dnsmasq 的上游转发到这个地址。1053 是内部转发端口,不是让手机直接填写的 DNS 地址;普通终端的 DNS 设置一般不支持指定自定义端口。
- 终端 DNS 指向旁路由时,要确认旁路由的 53 端口确实能回答请求。
- dnsmasq 转给 mihomo 后,mihomo 的上游不能再指回同一条 dnsmasq 链路,否则会形成解析循环。
- 启用 fake-ip 时,DNS 回答与后续连接应经过同一套接管路径,避免只获得虚拟地址却没有进入内核。
- 浏览器安全 DNS、应用内 DoH 和硬编码 DNS 可能绕过系统解析设置,需要分别检查。
IPv6 也要单独处理。主路由通过 RA 下发的 IPv6 默认路由,不会因手动修改 IPv4 网关而消失。配置里的 ipv6: false 不能关闭整个局域网的 IPv6。测试阶段可临时在测试终端关闭 IPv6以缩小范围;正式部署则应明确 IPv6 的路由、DNS 与接管策略。
开机运行:用 procd 管进程,不靠后台命令
前台验证完成后,用 Ctrl+C 停止测试进程,再设置系统服务。OpenWrt 使用 procd 管理服务;单纯在 SSH 中追加 & 不能替代开机启动和进程守护。下面的最小服务仅负责启动内核,不负责生成防火墙规则,也不负责订阅定时更新。
将以下内容保存为 /etc/init.d/mihomo。如果设备已有同名服务或由插件管理的内核,应先确认归属,不要覆盖。
#!/bin/sh /etc/rc.common
START=99
STOP=10
USE_PROCD=1
start_service() {
procd_open_instance
procd_set_param command /usr/bin/mihomo \
-d /etc/mihomo \
-f /etc/mihomo/config.yaml
procd_set_param respawn
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param file /etc/mihomo/config.yaml
procd_close_instance
}
chmod 755 /etc/init.d/mihomo
/etc/init.d/mihomo enable
/etc/init.d/mihomo start
logread -e mihomo
订阅更新前保留上一份可用配置。先把新内容保存为临时文件,执行 mihomo -t 检查,再替换正式配置并重启服务。配置语法正确但节点不可用时,仍需回退;不要让自动更新任务反复覆盖人工修好的版本。规则集更新、数据库下载和缓存还会占用闪存,应定期查看剩余空间。
验收与回退:先测一台,再扩大范围
完成部署后,按下面顺序检查,不要只看面板里的连接状态。每通过一项再继续下一项,能把“网络断了”缩小成可定位的具体环节。
- 本机出口:旁路由能访问主路由,并能解析域名、建立 HTTPS 连接。
- 代理入口:测试电脑通过
192.168.10.2:7890发起请求时,日志中出现对应连接。 - DNS 应答:运行
nslookup example.com 192.168.10.2,确认响应服务器与预期一致。 - 透明接管:取消显式代理后,访问目标站点,确认 mihomo 仍记录到连接,并匹配预期规则。
- 局域网排除:检查主路由管理页、打印机、NAS 与本地服务,不应被错误送往远端代理。
- 重启恢复:重启旁路由后复测,确认服务、DNS 和转发路径均恢复,不依赖上一次手动执行的命令。
若出现整机断网,先把测试电脑的网关与 DNS 恢复为原主路由设置,并取消手动代理。随后停止 mihomo;如果手工添加过 nftables、策略路由或 DNS 转发,还必须单独撤销这些改动。停止内核不等于自动清除外部接管规则。
只有单台设备持续稳定后,才考虑在 DHCP 中下发旁路由网关与 DNS。DHCP 网关通常对应选项 3,DNS 对应选项 6;下发后终端可能要续租才会生效。旁路由成为全网必经点后,关机或升级也会影响终端,应保留主路由管理方式和明确的恢复步骤。
这条部署路线的关键不是一次填完所有参数,而是分别确认内核、显式代理、DNS 和转发。需要先熟悉规则与订阅,可从订阅导入教程开始;核对配置字段时,再查阅配置大全,不要同时修改多个层面的设置。