从最朴素的问题说起:用户侧的「调度型代理内核」要解决什么?
现代操作系统里同时跑着浏览器、办公软件、音视频、开发者工具和游戏启动器等各种程序,它们发往公网的每一条连接都会在本地先询问一次「我该直连,还是绕道某个服务器出去」。传统做法是你手动去给每个应用填写代理——很快就会被例外情况和更新折磨到怀疑人生。
于是出现了一类在用户设备上常驻的调度中枢:它统一管理本地暴露的监听端口(或虚拟网卡),再根据一份人类可读的规则表,把所有连接分配给不同的出站,例如走某个兼容 Shadowsocks/VMess 等协议的远端节点,或者回到本地局域网,又或者干脆丢弃无效流量。这便是很多人口中的「开源代理内核」:它未必自带漂亮的窗口,却对实际体验影响最大。
Clash 与 Mihomo:名字背后的演进为何值得记住?
许多中文资料仍习惯统称「Clash」,更精确地说,今天你接触到的配置文件语法、开源社区讨论与跨平台教程,很大一部分已经过渡到以 Mihomo(Clash Meta) 为代表的分支——它在保持 YAML 结构与规则范式亲切感的同时,补上了更多现实世界的协议支持与工程细节打磨。
对你来说,这组名字差异不需要变成宗教战争,只要记住两件事:其一,外层 GUI 是否在持续维护,并不等于内核是否还活着;其二,当你在某个 GitHub Issue 上看到「原版核心停更」「请迁移订阅格式」的讨论时,其实是在提醒你要关注底座的维护者,而不只是换一个皮肤主题。
内核是如何「接入」流量的?先看三条常见路径
把内核想成一个站在本机上的小邮局:它需要知道「信件从门口塞进来」,然后才能分拣。最常见有三类入口:
- 显式 HTTP/HTTPS/SOCKS 代理端口:应用或系统自动把请求指向
127.0.0.1某某端口(常见如合并端口或分列端口的做法),内核读头、建链、再根据规则指派出站。 - 局域网共享:把监听地址从仅限本机扩展到局域网段,从而让同一 Wi‑Fi 下的其他终端把网关或代理指向你的设备——本质仍是「主动配置」而非透明劫持。
- TUN 虚拟网卡:由内核配合驱动在用户态挂载一张逻辑网卡,把满足条件的 IP 流量重新注入代理栈;对「不配合系统代理字段」的软件更友好,但学习与排障成本也会随之上升。
这也是为什么同一台机器上你会觉得「开个浏览器能上,另一个程序却上不了」:它们未必走了同一个入口。TUN、PAC、手动代理彼此之间不是「谁更爱国」的问题,而是在不同约束下互为补充的工程方案。
模式旋钮:全局、直连、规则分别意味着什么?
GUI 常会给你三枚看似简单的按钮,背后其实是策略优先级的大开关。直连模式几乎把所有流量直接送出站网卡——适合临时验证链路或排查劫持。全局模式则一刀切地把可处理的流量塞进当前选定的策略组/节点——适合救火,却很难长期日常使用,因为本国业务站点也被迫绕远道。
规则模式才是 Clash/Mihomo 思想的灵魂:你为不同域名、后缀、关键字、IP 段乃至地理属地贴上标签,从上到下命中第一条即做决定,既可以把海外学术资源送往加密隧道,又能让流媒体账单走直连降低延迟。
记住规则链是有序的:把高精度、低成本的判断放在顶部,兜底的 MATCH 放在末尾,这既关乎性能也关乎安全心智——没有人会希望一条误写的宽泛规则悄无声息地劫持了整块流量。
规则引擎:把「分拣」说清楚,比背一百个快捷键有用
规则行的基本语感可以概括成:当看到某种特征的交通报文时,把它交给哪一个出站别名处理。下面是一张刻意压缩的认知表——真正书写时请再对照所用内核版本的权威列表,因为类型关键字会演进。
FEATURE, PARAMETERS, POLICY_ALIAS
以下为教学示例,并不等于全量枚举:
| 规则意图 | 代表性关键字 | 简述 |
|---|---|---|
| 精确点名 | DOMAIN | 整个主机名完全一致才命中。 |
| 域名家族 | DOMAIN-SUFFIX | 关注公共后缀匹配的稳定性,它比肉眼猜公司名称更耐用。 |
| 近似包含 | DOMAIN-KEYWORD | 简单粗暴,也意味着更容易误杀,要谨慎放置顺序。 |
| 四层地址段 | IP-CIDR | 适合收敛到 CDN 或区域性地址块,常与 DNS 结果联动考量。 |
| 地缘策略 | GEOIP | 将 IP 与国家/地区映射,典型场景是分流境内与境外账单。 |
| 兜底 | MATCH | 没有更精细命中的末站,通常留给「Proxy」「DIRECT」或策略组别名。 |
规则真正的威力来自与 DNS 结果的协同:当你在规则里写域名分流,而最终解析走的是意外路径,可能会出现「配置了规则却仍像没生效」的假阴性。这也是为什么进阶用户会深究 fake-ip、fallback、DoH/DoT 选择与缓存策略——它不是为了炫技,而是为了让规则真的按你脑海中的拓扑运行。
策略组:把节点翻译成人类能拧的旋钮
光有数十个远端节点并不等于好用体验。策略组负责把技术性很强的 endpoint 封装成可选套餐:有时是简单的手动挑选(select),有时是依据延迟与健康检查的自动轮转(url-test 一类语义),再配合规则里写的别名,就能把「看视频选哪条链路」「办公软件永远直连」翻译成配置而不是口头约定。
这层抽象也降低了 GUI 的工作量:界面下拉框里的每一个条目,大多数情况下只是映射 YAML 中已经声明的一组候选;当你导入机场订阅时被自动展开的「自动选择」「故障切换」等板块,本质是生成器替你写了策略组的样板代码。
配置文件在现代工作流里扮演何种角色?
YAML 并不等于「纯手工码字地狱」。现实路径往往是:你从服务商复制订阅链接,借助订阅转换或客户端内置向导拉取远端列表,再配合本地 overrides 增补规则。高级玩家会把配置拆为多文件并通过 proxy-providers/rule-providers(具体键名仍以文档为准)做模块化,以降低合并冲突的痛苦。
下面是一份刻意极简、仅用于对齐语法的草稿,并不等于生产配置:
mixed-port: 7890
allow-lan: false
mode: rule
proxies:
- name: "demo-node"
type: ss
server: 198.51.100.10
port: 8388
cipher: aes-256-gcm
password: "replace-me"
proxy-groups:
- name: "Proxy"
type: select
proxies:
- demo-node
rules:
- GEOIP,CN,DIRECT
- MATCH,Proxy
把这段缩进背下来没必要,更值得记住的是三件事:谁在监听端口、策略组叫什么名字、规则最后一行将如何兜底。
Windows、macOS、Android、GUI 五花八门,它们到底是不是「正版 Clash」?
行业里存在大量冠以 Clash/Verge/Meta/Nyan 前缀的桌面与移动外壳,负责任的回答方式是:看许可证、看源代码仓库活跃度、看它捆绑的内核分支与更新节奏。外壳负责托盘图标、快捷键、PAC 拼装、常驻更新检查和新手引导;而真正决定能不能连上、会不会闪断、是否支持 QUIC/gRPC/Hysteria 等新传输语义的,几乎总是内核层面的提交记录。
当你在论坛看到「卸载 A、改装 B 就好了」一类的结论,请追问一句:A 与 B 是否其实仍在使用同一陈旧内核。如果底层没变,玄学换壳往往只是把时间轴往后平移几天。
- Windows:常见有 Clash Verge Rev、各类经典分支的继承者;关注安装包签名与便携版路径。
- macOS:注意新版系统对内核扩展与隐私提示越来越严格;第一次启用 TUN 往往要多点几次授权。
- Android:区分普通 VPN Service 路由与进阶特性;耗电与待机策略也值得单独评估。
- iOS:受沙箱与上架政策约束更甚,多半是「在阅读器/网络框架里嵌入规则引擎」,购买前确认支持的配置语法版本。
- Linux:纯命令行 systemd 管理与带 GUI 的发行版套件并存——服务器场景下反而更纯粹的 yaml 工作流程。
把它放进知识体系:与安全、局域网与合规使用的边界提示
Clash/Mihomo 首先是网络工程工具,不是魔法盾牌。明文密码躺在 yaml 里、热点共享未设访问控制、在公共网络暴露管理端口——这些失误与内核是否开源无关,却最常见地导致「我用了这么贵的节点怎么还是泄漏」的主观感受。做法是:配置文件权限最小化,谨慎开启局域网代理,远端管理走独立令牌与防火墙策略。
在中国大陆与其他司法辖区,用户对加密隧道的合法性认定并不一致。请确保你的用途符合当地法律法规与服务商 Acceptable Use Policy。本文只讲解通用技术语义,不提供规避监管的操作指南。
小结:把拼图拼回一张地图
现在你应当能复述这条流水线:监听入口(端口或 tun)接住连接 → DNS/SNI/目标地址信息进入规则分拣 → 命中的出站把流量交给某一策略组所选节点 → 节点再用具体协议与你的远端握手。外层 GUI 只是把这条链可视化,同时在崩溃时附上日志缓冲区。
进阶阅读可以按照「先稳定 DNS,再精修少数 DOMAIN / IP 规则,最后才 tinkering 性能旋钮」的顺序推进;遇到疑难,优先考虑抓一份脱敏配置文件与链路 trace,在社区提问时能极大缩短反馈闭环。
常见问题(速览)
Clash 本身是带界面的应用软件吗?大多数情况下你摸到的是外壳 + 内核合体;卸载外壳不等于内核配置文件随之消失。
Mihomo 和 Clash 是什么关系?可把 Mihomo/Meta 视作社区持续演进的事实标准分支集合之一,YAML 范式延续,能力与默认值却可能不同。
只开系统代理与启用 TUN 区别在哪?前者取决于应用自觉性,后者以更底层方式抬升覆盖面,也带来了驱动与兼容性话题。
规则写了却不生效的常见原因?多数是 DNS 回填路径、缓存、模式旋扭仍停留在全局/直连或策略组别名写错等非玄学因素。
与只能「选一个节点全盘加密」的一体化套件相比,Clash/Mihomo 把可读规则、模块化订阅、可视化策略组与可选 TUN放在同一语义体系里——当你既想降低日常办公链路延迟,又不想为偶尔的跨境检索频繁手动切换配置文件时,这种「先描述策略,再由机器托管」的路线往往更耐得住长期使用。如果你在若干工具之间犹豫,不妨试试把需求写成三条规则与一个策略组别名,再来看哪套客户端能最不痛苦地表达出来。