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,目前该字段已支持 规则集合而不止单域名写法

—— Issue #74 · CHIZI-0618/box4magisk (github.com)

笔者由于需要使用 fake-ip,因此采用 TUN 模式运行内核,启用 fake-ip,并通过在 Mihomo 配置文件中添加 include-package 条目来实现原生的包名白名单。

示例配置:

find-process-mode: always
...
tun:
  enable: true
  stack: system
  device: tun1
  dns-hijack:
    - "0.0.0.0:53"
    - "tcp://0.0.0.0:53"
  auto-detect-interface: true   # 自动识别出口网卡
  strict-route: true            # 严格路由模式
  gso: true                     # 启用通用分段卸载(仅Linux)
  auto-route: true              # 自动配置路由表
  # 安卓代理包名白名单
  include-package:
    - "com.microsoft.office.outlook"
    - "com.android.vending"
    - "com.openai.chatgpt"
    - "com.github.android"
    - ......

Mihomo Magisk 模块使用心得
https://blog.openyq.top/posts/23739/
作者
yqs112358
许可协议