搜索 K
Appearance
如果你只想看一句话答案:
真正决定你「能不能用、好不好用」的,从来不是客户端本身,而是 内核版本 × 分流引擎 × TUN 实现 × DNS 泄漏控制 × 你的订阅质量 这五个变量的乘积。客户端只是这五者的外壳。下面把每一层拆开讲。
在 Android 上,想把一个应用的流量「无感地」导进代理隧道,官方只给了一条路:android.net.VpnService。它的本质是创建一个 tun 虚拟网卡,系统把符合条件的流量写进去,应用从 fd 里读出来再转发。这意味着三件事:
四款客户端的内核路线完全不同:
| 客户端 | 内核 | 内核语言 | 关键协议支持 |
|---|---|---|---|
| v2rayNG | Xray-core | Go | VMess / VLESS / Trojan / Shadowsocks / Reality / XTLS-Vision |
| CMFA | mihomo(Clash.Meta 衍生) | Go | 上述全部 + Hysteria2 / TUIC / WireGuard |
| SFA | sing-box | Go | 上述全部 + Hysteria2 / TUIC + 完整 ShadowTLS |
| Surfboard | 自研闭源 | 原生 | SS / VMess / Trojan / Hysteria2(较新版本) |
注意:Reality 与 XTLS-Vision 是 2026 年抵抗主动探测的核心手段。如果你的客户端内核不支持 uTLS 指纹伪装(
chrome/firefox/safari指纹),那么在你换用 Reality 节点时,等于白买。v2rayNG 在 Xray-core 1.8.x 之后对 Reality 支持完善,这一点没有争议。
很多人以为 BBR 是服务端的事,其实客户端到服务端之间的 TCP 拥塞控制只由服务端决定——你在手机上装什么客户端都改不了服务端的 net.ipv4.tcp_congestion_control。所以:
要验证服务端是否真的开了 BBRv3,用不依赖客户端的方式测:
# 在服务端执行
sysctl net.ipv4.tcp_congestion_control
# 返回 bbr 才说明生效;返回 cubic 就是没开
sysctl net.core.default_qdisc
# 应为 fq 或 fq_codel跨境链路本身(IEPL 专线、IPLC 专线、BGP 中转、CN2 GIA)属于机场侧的基础设施,客户端无法改善物理延迟。客户端能改善的只有三件事:分流准确度(少走冤枉路)、协议栈效率(少一次握手)、DNS 路径(少一次解析)。把这三件事做到极致,端到端体验差距可以拉开 30% 以上——这才是做客户端选型的意义。
以下为 2026 年 AirPick 实验室在骁龙 8 Gen 3 / Android 15 环境下的实测与文档核对结果:
| 维度 | v2rayNG | CMFA | SFA | Surfboard |
|---|---|---|---|---|
| 内核 | Xray-core | mihomo | sing-box | 自研闭源 |
| 订阅格式 | v2ray 分享链接 / 订阅 base64 | Clash YAML | sing-box JSON / 订阅 | Surge 风格配置 / 订阅 |
| 分流规则引擎 | 简单域名/IP 规则 | 完整 rule-set + GEOSITE | rule-set + 逻辑规则(and/or) | 完整策略组 |
| TUN 模式 | 需手动开启「VPN」并配置路由 | 完善,支持 tun.stack 选择 | 完善,支持 auto-route | 完善 |
| DNS 处理 | 基础,易泄漏 | fake-ip / redir-host 齐全 | 完整 DNS 模块 + DNS 泄漏防护 | 良好 |
| IPv6 接管 | 需手动勾选 | 支持 | 支持 | 支持 |
| 内存占用(空载) | 约 45–70 MB | 约 120–180 MB | 约 90–140 MB | 约 80–120 MB |
| 冷启动到连通 | 约 1.5–2.5 s | 约 2.5–4 s | 约 2–3 s | 约 1.5–2.5 s |
| 价格 | 免费开源 | 免费开源 | 免费开源 | 约 30 元买断 |
| 上手难度 | ★☆☆☆☆ | ★★★★☆ | ★★★☆☆ | ★★★☆☆ |
| 调试信息丰富度 | 中 | 高(日志分级 + 连接面板) | 低(日志偏简) | 中高 |
读表要点:CMFA 的内存占用大约是 v2rayNG 的 2.5 倍,在中低端机型(如 4GB RAM 的千元机)上差异非常明显,长时间后台驻留容易被系统回收。如果你的备用机是入门安卓,v2rayNG 或 SFA 的存活率会高不少。
它好用的地方:极轻、极稳、订阅解析容错率高。绝大多数机场给的是一串 vmess:// / vless:// 分享链接或一个 base64 订阅,v2rayNG 基本都能一口吞下,不需要你手动改配置文件。对「我只有一个节点,能用就行」的用户,它的心智负担是最低的。
它 2026 年的短板:
process-name 规则了。适合谁:订阅结构简单、机型较老、只求能连上的用户。不适合谁:需要精细分流、需要多机场负载均衡的用户。
CMFA 是 mihomo 的 Android 前端,基本上把桌面 Clash.Meta 的能力原样搬过来了:rule-providers 远程规则集、proxy-groups(url-test / fallback / load-balance / relay)、sniffer 域名嗅探、tun.stack 可选 system/gvisor/mixed。
杀手级特性:sniffer + fake-ip 组合。这两个开启后,即便上游节点只有 IP、没有域名信息,客户端也能从 TLS SNI 或 HTTP Host 里嗅探出真实域名并重新走一遍规则匹配。这是 2026 年做「精准分流」的标配能力。
代价:
profile 里的 tun、dns、sniffer 三块最容易配错。tun.stack 选了 gvisor,部分老机型会出现吞吐下降 15%–25%;建议默认用 system。SFA 的配置文件是 sing-box 原生 JSON,支持逻辑组合规则(例如「且属于某包名 且 命中某规则集」),规则表达力比 Clash 的 AND/OR/NOT 更进一步。
优势:
dns.rules、strategy(prefer_ipv4 / ipv4_only)、DNS over TLS/HTTPS/QUIC,可以把 DNS 泄漏这个问题从根上摁死。劣势:日志与连接面板信息偏少,排障时不如 CMFA 直观;订阅大多需要第三方做格式转换,不是所有机场都直接给 sing-box 订阅。
Surfboard 是闭源商业软件,一次性买断约 30 元。它的 UI 交互(策略组切换、实时流量、规则命中查看)是四款里最顺畅的,尤其是策略组的下拉切换手感,CMFA 至今没追上。
它的限制也很实在:
适合谁:愿意花钱换省心、只用一两个稳定机场、对 UI 敏感的用户。
| 你的画像 | 推荐 | 理由 |
|---|---|---|
| 学生党,一台二手安卓备用机 | v2rayNG | 内存占用低,后台存活率高 |
| 多机场订阅、需要自动选优 | CMFA | url-test 策略组 + 延迟自动切换 |
| 4K 流媒体重度用户 | CMFA 或 SFA | 支持 Hysteria2,UDP 转发效率高 |
| 出国办公、需要 App 级分流 | CMFA | process-name 规则精准控制 |
| 隐私敏感、要求无 DNS 泄漏 | SFA | DNS 模块可完全自定义 |
| 不想折腾、只想花钱买安静 | Surfboard | UI 直观,配置一次管半年 |
| 需要经常调试排障 | CMFA | 日志分级 + 连接面板最全 |
提醒一句:客户端再强,也救不了烂线路。选客户端是「锦上添花」,选机场才是「地基」。选型时优先看机场是否提供 IEPL/IPLC 专线、是否有 BBRv3、是否给你 Clash + sing-box 双格式订阅——这三条决定了你后面折腾客户端时的自由度。
第一件:关闭电池优化
设置 → 应用 → [客户端] → 电池 → 无限制
设置 → 电池 → 后台耗电管理 → [客户端] → 允许后台活动国产 ROM(MIUI/HyperOS、ColorOS、OriginOS)请额外在「自启动管理」里打开开关,并把客户端加入「锁定后台」白名单。否则息屏 5 分钟后必掉线。
第二件:确认 TUN 接管了 IPv6
连接后进入客户端日志,应该能看到类似 tun: adding route 2000::/3 或 auto-route: true, auto-redirect: true 的输出。如果看不到,说明 IPv6 没被接管,去 设置 里手动开启。
第三件:DNS 必须指向远端
dns.enable: true + dns.nameserver 填写远端解析地址(如 https://1.1.1.1/dns-query),并开启 dns.enhanced-mode: fake-ip。dns.servers 中指定 tls://8.8.8.8 或 https://1.1.1.1/dns-query,strategy 设为 prefer_ipv4。tun.stack 默认 gvisor 在部分麒麟/天玑老平台上有吞吐惩罚,建议手动改成 system;同时 sniffer 若开启 override-destination: true,可能和某些加密 App 冲突导致连接失败。以下命令需要手机开启 USB 调试,并通过 adb 从电脑执行。
# 在 Termux 中执行(需先 pkg install mtr)
mtr -rwzc 50 1.1.1.1
mtr -rwzc 50 your-node-domain.com判定表:
| 现象 | 判定 | 处理 |
|---|---|---|
| 第 1–3 跳丢包 | 本地 Wi-Fi / 运营商出口问题 | 换网络或换 Wi-Fi 信道 |
| 中间某跳丢包但末端正常 | 中间路由 ICMP 限速,误报 | 忽略,看最后一跳 |
| 从某跳开始持续丢包到末端 | 跨境链路拥塞 | 联系机场换节点 |
| 末端延迟 > 200 ms 且抖动大 | 线路绕路 | 换用 IEPL 专线节点 |
# PC 端执行,测试节点端口是否被 QoS
tcping -t 10 your-node-domain.com 443如果 tcping 通但客户端连不上,说明问题在协议层(时间不同步、UUID 错误、SNI 被重置),而不是网络层。
# 查看当前 VPN 是否真的建立
adb shell dumpsys connectivity | grep -i vpn
# 查看客户端进程是否存活
adb shell ps -A | grep -iE "v2rayng|clash|sing-box|surfboard"
# 查看客户端日志(CMFA 示例)
adb logcat -s ClashMetaForAndroid:V *:S
# 查看 DNS 解析路径
adb shell getprop | grep -i dns判定表:
| 命令输出 | 含义 | 结论 |
|---|---|---|
dumpsys connectivity 无 VPN 条目 | TUN 未建立 | 权限被系统回收,重新授权 |
ps 中无客户端进程 | 进程被 ROM 杀死 | 关闭电池优化 + 加白名单 |
logcat 出现 context deadline exceeded | 服务端握手超时 | 节点故障或端口被封 |
logcat 出现 tls: bad record MAC | 加密协商失败 | 服���端配置错误,换节点 |
CMFA 打开「连接」面板,观察每个连接走的是哪个策略组。如果 YouTube 流量走了「直连」,说明 GEOSITE 规则没加载成功——去 rule-providers 里检查远程规则集 URL 是否可达。
| 话术 / 现象 | 真相 | 应对 |
|---|---|---|
| 「独家 BBR 加速协议」 | BBR 是内核参数,不是机场私有技术 | 要求提供 sysctl 输出截图 |
| 「解锁 Netflix / ChatGPT」 | 需实测,很多是 DNS 解锁已失效 | 要求试用期内实测,别信截图 |
| 「无限流量、不限速」 | 通常有大流量用户限速策略 | 看条款里的「公平使用」细则 |
| 「订阅节点数 500+」 | 多为同一台机器的多端口复用 | 测延迟分布,看是否集中在少数 IP |
| 「客户端免配置一键连」 | 加密的闭源配置,可能收集信息 | 优先用开源客户端导入明文订阅 |
| 客户端突然「升级后不能用」 | 多为内核协议废弃 | 回退版本或换 CMFA / SFA |
Q1:v2rayNG 连上了但打不开网页,怎么办? 先看 DNS。进入设置开启「远程 DNS」,并把「域名解析策略」设为「仅远程」。其次检查是否开启了「绕过局域网」却把网关 IP 也误判进去了。最后用 mtr 确认节点本身是否可达。
Q2:CMFA 显示已连接,但测速跑不满带宽? 三个原因:一是 tun.stack 是 gvisor,改成 system;二是开启了 sniffer 的 override-destination,关闭试试;三是节点的 UDP 转发被限速,换用 Hysteria2 节点或改用 TCP 协议。
Q3:SFA 导入 JSON 报错无法启动? 99% 是 JSON 语法错误。用在线 JSON 校验工具检查逗号和引号。特别注意 sing-box 新版本废弃了旧字段(如 inbound.sniff 的位置变更),请对照你的内核版本对应的文档。
Q4:Surfboard 的订阅导入后节点是空的? Surfboard 只认 Surge 风格配置。让机场提供 Surge 或 Surfboard 专用订阅链接,不要拿 Clash YAML 直接塞。
Q5:切到 Wi-Fi 后客户端就断线,切回 4G 又恢复? 典型的「Wi-Fi 下 IPv6 泄漏」。检查路由器是否下发了 IPv6 地址,若是,在客户端里强制开启 IPv6 接管,或直接在路由器关闭 IPv6。
Q6:为什么同一条节点,安卓比 PC 慢一截? 移动端 CPU 单核性能、TLS 握手次数、Mux 复用策略都会影响。试试在 CMFA 里关闭 Mux(smux),很多场景下单连接反而更快。
Q7:客户端后台运行几小时后必掉,怎么破? 这是国产 ROM 的后台管理。除了前面的电池优化设置,还可以用 adb shell dumpsys deviceidle whitelist +你的包名 把客户端加入 Doze 白名单。
选好客户端只是第一步,下面这些内容能帮你把整条链路打通:
写在最后:客户端之争本质上是「分流引擎之争」。v2rayNG 赢在轻,CMFA 赢在全,SFA 赢在新,Surfboard 赢在顺。如果你只选一个,2026 年的最优解大概率是 CMFA 主力 + SFA 备用:前者应对复杂分流,后者兜底新协议。剩下的功夫,请花在挑一条真正的好线路上。