OpenWrt MihomoTProxy 教程:从安装到透明代理排错
简答:搜索“mihomotproxy 教程”时,先不要直接复制安装命令:MihomoTProxy 是 OpenWrt-mihomo README 使用的项目名称,OpenWrt-mihomo 页面显示其 fork 自 OpenWrt-nikki,而 Nikki 仍是独立项目。最稳妥的顺序是先检查 OpenWrt、内核、CPU 架构和 firewall4,再按对应仓库安装;首次启动先验证普通代理,确认核心正常后再启用 TPROXY、TUN、DNS 劫持和局域网透明代理。
定义:MihomoTProxy 是在 OpenWrt 上利用 Mihomo 核心与 firewall4/nftables 接管路由器或局域网流量的一类透明代理方案,具体包名、菜单和兼容条件取决于实际使用的项目仓库。
先分清项目关系:MihomoTProxy、OpenWrt-mihomo 与 Nikki
这些名称经常同时出现在搜索结果中,但不能直接当成同一个安装包。OpenWrt-mihomo 仓库的页面标题使用了“MihomoTProxy”,并显示该仓库 fork 自 OpenWrt-nikki。因此,MihomoTProxy 更适合被理解为该类方案或仓库使用的项目名称;OpenWrt-mihomo 是一个具体仓库;Nikki 则仍有独立仓库、Wiki 和发布包。
| 名称 | 可核对的信息 | 安装时怎么处理 |
|---|---|---|
| MihomoTProxy | OpenWrt-mihomo README 使用的项目标题,定位是 Mihomo on OpenWrt 的透明代理。 | 不能仅凭名称确定安装包,先看实际仓库和页面菜单。 |
| OpenWrt-mihomo | 独立的 OpenWrt 透明代理仓库,页面列出 mihomo 系列包。 | 按该仓库当前 README、Feed 或 Release 安装。 |
| Nikki | 与 OpenWrt-mihomo 有 fork 关系,但仍是独立项目并单独发布软件包。 | 使用 nikki 系列包时,不要混装 mihomo 系列包。 |
本文是第三方使用指南,不代表上述开源项目官方。项目版本、Feed 地址、软件包名称和界面字段可能变化,安装前应重新打开对应仓库的 README 或 Release 页面核对。
安装前检查:版本、内核、架构和 firewall4
不要一上来执行安装脚本。先通过 SSH 登录 OpenWrt,备份现有配置,并记录下面的检查结果:
cat /etc/openwrt_releaseuname -runame -mubus call system boardcommand -v fw4fw4 -V
cat /etc/openwrt_release用于确认发行版本,uname -r用于记录 Linux 内核版本,uname -m用于查看运行时架构,ubus call system board用于补充查看设备型号和系统信息。架构不能只依赖 ubus 输出,还要与软件包仓库的架构目录核对。
如果系统使用 opkg,再执行:
opkg print-architectureopkg list-installed | grep -E 'firewall4|kmod-nft-tproxy|kmod-tun|ip-full'
如果系统使用 apk,则执行:
apk --print-archapk list --installed | grep -E 'firewall4|nft-tproxy|tun|ip-full'
OpenWrt 官方文档说明,OpenWrt 22.03 起默认从旧的 fw3/iptables 防火墙后端切换到 fw4/nftables;fw4 print可以输出 fw4 生成并交给 nftables 的规则配置,适合排查透明代理规则是否生成。可参考 OpenWrt Netfilter 管理文档 和 OpenWrt nftables 文档。
OpenWrt-mihomo 仓库 README 明确写有 firewall4 和 OpenWrt 22.03 或更高版本的要求;Nikki 的 Release 页面则按 OpenWrt 版本和 CPU 架构提供不同构建包。不要把一个项目的版本结论直接套到另一个项目上,尤其不要只因设备能运行 OpenWrt 就认为一定有匹配软件包。
继续安装前,至少确认:已备份 /etc/config;设备仍有本地管理入口;架构能在对应 Feed 或 Release 中找到;存储空间足够;并准备好关闭插件或恢复防火墙配置的回滚方式。
安装方式:先选项目,再核对实际包名
OpenWrt-mihomo README 当前列出的安装包包括 mihomo、luci-app-mihomo 和中文语言包;这只能说明该仓库页面列出了这些包,不能证明它们适用于所有 OpenWrt 版本和架构。Nikki 项目则使用 nikki 系列包。具体包名应以当前仓库的 Feed 或 Release 为准,相关信息可在 OpenWrt-mihomo README 和 OpenWrt-nikki Releases 中核对。
- 使用 Feed:先确认 Feed 分支与 OpenWrt 版本、架构匹配,再在 LuCI 的“系统—软件包”更新列表,搜索实际存在的包名。
- 使用 Release:下载与
uname -m、OpenWrt 版本匹配的构建包,逐项检查依赖和校验信息。 - 使用 SSH:如果系统是 opkg,可先执行
opkg update,再用opkg list | grep -E 'mihomo|nikki|luci-app-mihomo|luci-app-nikki'确认仓库是否真的提供对应包。 - 不要混装:如果列表中只有 nikki 系列包,就不要把 mihomo 系列包名硬改后安装;如果包不存在,应回到版本、架构、Feed 和分支检查。
安装完成后,可以用以下命令观察实际安装结果:
command -v mihomocommand -v nikkils /etc/init.d/ | grep -E 'mihomo|nikki'
不同项目的启动脚本名称可能不同,因此没有输出时不要立即判断安装失败,应打开对应仓库说明确认实际文件名。
首次配置:订阅导入后先检查,再启动透明代理
第一次部署只走最短路径,不要同时修改订阅、DNS、IPv6、TUN 和访问控制。推荐顺序是:导入配置文件—检查格式—启动核心—验证普通代理—最后开启透明代理。
- 进入插件的 LuCI 页面,找到“配置文件”“订阅”或类似入口。
- 添加已经确认来源的订阅地址。订阅链接通常包含个人凭证,不要粘贴到公开帖子或日志中。
- 下载或更新订阅后,确认页面显示本地配置文件已经生成。
- 选择该配置作为当前配置,先执行配置检查或 YAML 校验。
- 只启动核心或路由器自身代理,暂时不要开启局域网全量接管。
- 确认日志没有配置解析、端口占用、DNS 监听或权限错误后,再进入 TPROXY 或 TUN 配置。
Nikki Wiki 的配置说明涉及订阅下载、配置文件校验以及 proxies 或 proxy-providers 等字段。不同分支的页面名称可能不同,所以应以实际面板和对应 Wiki 为准。订阅导入成功,不等于节点可用,也不等于透明代理规则已经生效。
DNS 监听地址、代理端口、TUN 设备名和控制器端口都可能因项目版本、配置文件和面板设置不同而变化。本文不把某个固定端口或固定 DNS 地址当成通用默认值,实际值应从插件页面、配置文件和监听状态中读取。
TPROXY 和 TUN 怎么选:先验证基础代理,再扩大接管范围
| 模式 | 适合先做什么 | 主要检查点 |
|---|---|---|
| 普通代理 | 验证订阅、核心、节点和基础连通性。 | 代理端口、日志、路由器自身请求。 |
| TPROXY | 主路由或旁路由接管局域网 TCP/UDP 流量。 | firewall4、nftables 规则、内核模块、访问控制和网关。 |
| TUN | 配置明确需要虚拟网卡和自动路由的场景。 | TUN 设备、自动路由、DNS 劫持、IPv6 和回滚方式。 |
TPROXY 和 TUN 不是越多越好。首次部署建议先使用普通代理完成基础验证,再选择一种透明接管模式。TPROXY 更依赖 OpenWrt 的 firewall4/nftables 与内核模块协同;TUN 则需要创建虚拟网卡并处理路由、DNS 和接口选择。Mihomo 官方 TUN 文档列出了 enable、auto-route、auto-detect-interface、dns-hijack 等字段,但字段是否由插件自动生成,要看实际 Mihomo 版本和面板,详情可查 Mihomo TUN 配置文档。
如果你只是想确认订阅和节点是否正常,不要先启用 TUN。若需要主路由接管局域网,先确认测试设备的默认网关确实指向 OpenWrt;若是旁路由,需额外核对主路由下发的网关、DNS、访问控制和防火墙放行。IPv6 应单独验证,不能用 IPv4 能打开网页推断 IPv6 也已正确代理。
启动后的验证顺序:不要把“进程运行”当成“透明代理生效”
- 服务状态:在 LuCI 中查看插件是否运行;SSH 下使用实际存在的脚本,例如
/etc/init.d/nikki status或/etc/init.d/mihomo status。 - 日志:先看第一条配置解析、权限、端口占用、TUN 创建或 DNS 监听错误。
- 防火墙规则:执行
fw4 print,观察是否生成了与当前模式相关的规则。该命令的用途可参考 OpenWrt 官方 Netfilter 文档。 - 监听端口:执行
ss -lntup或设备支持的等效命令,确认实际监听地址和端口,不要假定固定端口。 - 先测路由器:确认路由器自身代理可用,再测试一台局域网设备。
- 再测局域网:确认测试设备的默认网关、DNS 和访问控制符合插件配置。
- 分开测协议:网页打开只能说明部分 TCP 路径可用;DNS 查询成功也不能证明透明代理完整生效;UDP 需要单独测试。
如果启用透明代理后断网,先关闭局域网代理、DNS 劫持或 TUN/TPROXY 开关,恢复到普通代理或停用插件,再一次只改一个变量。不要同时替换订阅、DNS 和防火墙规则,否则很难定位真正原因。
按症状排查:未运行、局域网不通、DNS 异常和重启失效
插件显示未运行
先重新核对项目名称、OpenWrt 版本、uname -r、uname -m、包管理器架构和 firewall4。再查看日志第一条错误。如果是配置解析失败,先换成能够通过校验的本地配置,不要先修改透明代理规则。
路由器能用,局域网设备不能用
这通常表示核心或路由器自身代理已启动,但局域网接管链路没有打通。检查局域网代理开关、入站接口、测试设备默认网关、DNS、访问控制和 fw4 print 输出。旁路由场景还要检查主路由是否真的把测试设备的网关或 DNS 指向旁路由。
网页能打开,但 DNS 结果异常
检查客户端是否仍把 DNS 请求发往原有上游,插件是否启用了 DNS 劫持,以及 IPv4 和 IPv6 是否只配置了一半。修改后先清理测试设备 DNS 缓存,再分别测试 IPv4、IPv6 和局域网设备。单个 DNS 查询结果不能证明不存在其他解析路径。
TCP 正常但 UDP 不通
确认当前配置是否启用了 UDP、所选模式是否支持 UDP,以及内核模块和防火墙规则是否齐全。TPROXY 与 TUN 的 TCP/UDP 选项不一定相同,不要用网页打开结果替代 UDP 验证。
重启后配置失效
检查插件是否设置为开机启动、配置文件是否保存到本地、订阅是否依赖启动时重新下载,以及网络服务是否已经先于插件完成初始化。可以先使用已缓存且通过校验的本地配置,确认问题来自启动顺序还是订阅更新。
开启 IPv6 后部分设备异常
先暂时关闭 IPv6 代理或 DNS 劫持,确认 IPv4 路径恢复,再单独启用 IPv6。IPv6 需要同时核对上游网络、地址、路由、DNS 和透明代理规则,不能只看 IPv4 结果。
可保存的最小排查清单
- 项目:确认使用的是 OpenWrt-mihomo 还是 Nikki,不混装包名。
- 版本:记录
cat /etc/openwrt_release和uname -r输出。 - 架构:记录
uname -m,并使用opkg print-architecture或apk --print-arch核对软件包架构。 - 防火墙:确认
fw4存在,必要时执行fw4 print检查生成规则。 - 配置:先导入并校验订阅,再启动核心。
- 模式:先普通代理,再选择 TPROXY 或 TUN,最后处理 IPv6、DNS 和访问控制。
- 验证:依次检查服务、日志、监听端口、路由器、局域网设备、DNS 和 UDP。
- 回滚:每次只改一个开关,断网时先关闭透明代理或恢复备份。
如果你无法确认当前插件来自哪个仓库,先不要继续复制命令。打开插件页面、软件包列表或已安装文件名,判断是 mihomo 系列还是 nikki 系列,再回到对应 README 或 Release 页面。
常见问题
MihomoTProxy 是不是 Nikki 的旧名字?
不能直接这样认定。可以核实的是,OpenWrt-mihomo 页面显示 fork 自 OpenWrt-nikki,并使用 MihomoTProxy 作为项目标题;Nikki 仍有独立仓库和 Release。因此应按实际仓库核对包名、版本和菜单,不要仅凭名称安装。
OpenWrt 22.03 能不能直接安装 Nikki?
不能仅凭 OpenWrt 版本作出结论。OpenWrt-mihomo README 明确写有 firewall4 和 OpenWrt 22.03 或更高版本;Nikki 则按自己的 Release 和架构提供构建包。应检查 Nikki 当前 Release 是否有与你的 OpenWrt 版本和 CPU 架构匹配的包。
为什么 ubus call system board 不能单独确认 CPU 架构?
该命令主要用于查看设备型号和系统信息,不能替代软件包架构核对。建议同时执行 <code>uname -m</code>,并根据系统执行 <code>opkg print-architecture</code> 或 <code>apk --print-arch</code>,再与 Feed 或 Release 的架构目录比较。
TPROXY 和 TUN 需要同时开启吗?
通常不需要。先选择一种模式完成基础验证,再根据日志和项目文档决定是否切换。两种模式同时修改路由、DNS 或防火墙,会增加断网和定位问题的变量。
订阅导入成功但服务启动失败怎么办?
先检查配置文件是否通过 YAML 或插件校验,再查看日志中的第一条解析错误、端口占用、权限或 DNS 监听错误。可以先使用已缓存且通过校验的本地配置验证核心,再单独排查订阅更新。
如何确认透明代理真的生效?
依次检查服务状态、日志、<code>fw4 print</code>、监听端口和测试设备的网关/DNS,然后分别验证 DNS、TCP 和 UDP。单个网页能打开,只能说明某条 TCP 路径可用,不能证明所有局域网流量都已接管。
相关阅读
参考资料
- OpenWrt-mihomo GitHub 仓库与 README
- OpenWrt-nikki GitHub 仓库
- OpenWrt-nikki Releases
- OpenWrt 官方 Netfilter 管理文档(openwrt.org)
- OpenWrt 官方 nftables 文档(openwrt.org)
- Mihomo 官方 TUN 配置文档