关于
御流(ClearDeck)是一款 Android 上的本地网络防火墙。它用 Android 自带的 VPN 接口在本机查看每个应用的连接:命中规则的连接当场被拒绝,其余流量直连出去。没有任何流量经过我们的服务器 —— 因为我们根本没有服务器可以让它经过。
- v0.1.0
- GPL-3.0
- Android 10 – 17
它建立在什么之上
御流不掩饰自己的来处。它的 Android 前端衍生自 ClashMetaForAndroid,内部的网络内核衍生自 mihomo 内核。两者都以 GPL-3.0 发布,御流整体也以 GPL-3.0 发布。
这既是许可义务,也是对「为什么它能用这么少的 CPU 做这么多事」的诚实回答 —— 隧道与规则匹配里最难的部分不是从零写出来的,功劳属于上游。
内置的广告与跟踪规则数据来自 anti-AD,以 MIT 许可发布。
规则名单由以下上游来源编译而来
| 来源 | 覆盖 |
|---|---|
| EasyList | 广告 |
| EasyList Ad Servers | 广告 |
| 217heidai/adblockfilters | 广告 |
| AWAvenue Ads Rule | 广告、跟踪 |
| EasyPrivacy | 跟踪 |
| AdGuard Tracking Protection | 跟踪 |
| Hagezi Threat Intelligence Feeds (TIF, mini) | 恶意网址 |
值得一说的工程细节
有几个决定从外面看不见,却决定了应用的行为。
界面崩溃不会断掉 VPN
界面跑在应用进程里,内核跑在独立的 :tun 进程。界面崩了,隧道照常运行 —— 防护不会因为某个页面抛了异常而中断。
IPv4 与 IPv6 都抓
两个协议族都走隧道。只抓其中一个,IPv6 网络就会绕开所有规则,一条都命中不了。
控制通道只留在回环
本地控制通道只监听 127.0.0.1,端口随机,而且每次加载配置都会重新生成一个随机密钥。
核心逻辑能在桌面 JVM 上测
工程拆成 9 个 Gradle 模块。其中纯 Kotlin 的部分 —— core-rules 与 core-analytics —— 不依赖 Android,逻辑可以直接在普通 JVM 单元测试里跑(写作时有 19 个测试文件)。
它不会抓自己
御流把自己放进隧道不抓取的名单里:在部分设备上,让隧道抓到自己中继的 socket 会直接把网络断掉。
上线时通知你
第一个版本正在收尾。留下邮箱,准备好时我们通知你一次 —— 只发这一封。
预约通道即将开放。
仅用于上线通知,不发推广邮件,也不会分享给第三方。