Mihomo Magisk 模块使用心得
1. 现有代理方案对比
目前,实现 Magisk 模块运行原生 Clash 内核的项目主要有两个:Box4Magisk 和 Box for Root,两者各有优劣。前者作者是 singbox 的协作者,技术能力强;后者在前者项目的基础上进一步完善,添加了订阅等功能,目录结构更加清晰。总的来说两者差不多。
两个模块都支持多种模式的透明代理,包括 TProxy、Redirect、TUN 以及一些混合模式如 TProxy+TUN 等(用于分开处理 TCP/UDP)
- TProxy 是最佳选择,拥有 Linux 内核支持,性能优异,协议支持全面,可以考虑优先使用
- Redirect 是以类似 NAT 的方式转发数据包,且不支持 UDP,个人不倾向于使用
- TUN 则是 mihomo 内核原生支持的机制,和 TProxy 类似,不过其工作在第三层。在配置文件中开启 gso 后性能应该与 TProxy 差异不大。
两个模块都支持应用的黑 / 白名单机制,可以在模块设置中填写黑 / 白名单包名。
Box 模块相比官方的 CMFA 客户端有一定的优势。安卓 VPN 服务耗电相较于直接跑 mihomo 内核要高,性能方面直接跑 mihomo 内核相对要优于客户端。客户端的优势是切换节点和看日志相对方便,但是 CMFA 存在 BUG,在网络变化(比如 wifi 切流量)时不能及时响应,经常出现节点失效的情况,此时需要手动更换节点才能继续使用梯子,长此以来实在是不胜其烦。切换到 Box 后很少再出现类似的问题。
2. 模块配置经验
模块的黑 / 白名单机制只能配合梯子的 redir-host
模式使用,在 fake-ip
下不支持。原因如下:
安卓应用的 DNS 最终由 netd 负责,tproxy 模式的黑白名单由 iptables uid 扩展匹配进行
黑名单应用的 DNS 仍会被 box 核心劫持返回 fakeip,所以黑名单无法上网,使用 singbox 的 dns rule 控制黑名单应用域名返回非 fakeip dns 可以缓解上述问题,mihomo 可以考虑使用 fake-ip-filter,目前该字段已支持 规则集合而不止单域名写法
笔者由于需要使用 fake-ip
,因此采用 TUN 模式运行内核,启用 fake-ip
,并通过在 Mihomo 配置文件中添加 include-package
条目来实现原生的包名白名单。
示例配置: