mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
dns:
enable: true
nameserver:
- https://1.1.1.1/dns-query
- https://dns.google/dns-query
proxy-providers:
provider1:
type: http
url: https://example.com/proxies.yaml
path: ./proxy_providers/provider1.yaml
interval: 3600
proxy-groups:
- name: PROXY
type: select
use:
- provider1
proxies:
- DIRECT
rules:
- GEOIP,CN,DIRECT
- MATCH,PROXY
Clash Verge Rev · Mihomo Config / Rules / External Controller
Clash Verge Rev 的 Mihomo 配置与 API 开发文档
Clash Verge Rev 是基于 Tauri 的桌面 GUI,并内置 Mihomo 内核。配置、规则和对外控制能力主要来自 Mihomo;这里聚焦代理组、路由规则、DNS、TUN、Providers 与 External Controller API,不把 Clash Verge Rev 的内部 GUI 通信当作公开 API。
Mihomo 基础配置与 Clash Verge Rev 的配置关系
Clash Verge Rev 负责 Profile 管理、图形界面和系统集成,实际执行代理、规则、DNS 与 TUN 的核心是 Mihomo。理解 mixed-port、mode、Providers、Proxy Groups、Rules 和 External Controller,有助于判断 GUI 设置最终如何落到内核配置。
mixed-port、allow-lan 与 mode 的职责
mixed-port 适合直接给浏览器插件、系统代理或本地工具统一接入;allow-lan 控制是否允许局域网访问;mode 决定当前是规则模式、全局模式还是直连模式。
配置示例为什么使用占位 Provider 地址?
节点和订阅属于用户自己的配置来源。示例使用 example.com 作为占位地址,只用于说明字段关系,避免把演示服务器、密钥或订阅 URL 误认为真实可用资源。
Mihomo Proxy Groups:选择、测速与故障切换
Proxy Groups 决定代理节点如何被组织和选择。select 用于手动选择,url-test 根据健康检查结果自动选择,fallback 则按成员顺序使用首个可用代理;组内既可以引用代理,也可以通过 use 引用 Proxy Providers。
proxy-groups:
- name: PROXY
type: select
proxies:
- Auto
- Fallback
- DIRECT
- name: Auto
type: url-test
use:
- provider1
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 50
- name: Fallback
type: fallback
use:
- provider1
url: https://www.gstatic.com/generate_204
interval: 300
Proxy Groups 的三个核心选择逻辑
select 用于人工指定当前出口;url-test 根据健康检查结果自动选优;fallback 按成员顺序寻找首个可用代理。url、interval、timeout 与 lazy 等字段会影响测试和切换行为。
Mihomo 路由规则:匹配顺序与流量出口
Mihomo 从上到下匹配路由规则。DOMAIN、DOMAIN-SUFFIX、IP-CIDR、GEOIP 等规则用于识别流量,命中后交给指定代理或策略组;未命中的流量通常由最后的 MATCH 规则处理。
rules:
- DOMAIN-SUFFIX,example.com,PROXY
- DOMAIN-KEYWORD,example,PROXY
- IP-CIDR,203.0.113.0/24,PROXY,no-resolve
- GEOIP,CN,DIRECT
- MATCH,PROXY
DOMAIN / DOMAIN-SUFFIX
按完整域名或域名后缀匹配,适合为特定网站和服务建立明确路由。
域名匹配IP-CIDR / GEOIP
按目标 IP 网段或 GeoIP 国家代码匹配,适合基于地址范围进行路由。
IP 匹配MATCH
承接前面规则没有命中的流量,因此通常作为规则列表的最终兜底。
最终兜底为什么规则顺序会直接改变路由结果?
Mihomo 按规则列表从上到下匹配,越靠前优先级越高;命中后即使用对应目标。具体规则通常放在前面,MATCH 放在最后,避免过早兜底覆盖后续规则。
Mihomo DNS 与 TUN:解析链路和系统级流量接管
DNS 决定域名解析如何与规则系统配合;TUN 通过虚拟网卡接管更广泛的系统流量。Clash Verge Rev 提供 TUN 的图形化控制,但底层行为仍由 Mihomo 的 tun 配置、系统权限、防火墙和路由环境共同决定。
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
listen: 0.0.0.0:1053
default-nameserver:
- 1.1.1.1
- 8.8.8.8
nameserver:
- https://1.1.1.1/dns-query
- https://dns.google/dns-query
tun:
enable: true
stack: mixed
dns-hijack:
- any:53
- tcp://any:53
auto-route: true
auto-detect-interface: true
strict-route: true
哪些现象应该优先检查 DNS 配置?
域名解析失败、解析结果与规则不一致、Fake-IP 行为异常,或切换代理后仍出现错误解析,都可能与 DNS 配置相关。排查时应同时检查 nameserver、enhanced-mode、监听端口和规则关系。
TUN 的 system、gVisor 与 mixed 如何理解?
Mihomo 当前支持 system、gVisor 与 mixed 协议栈。官方文档在无特殊问题时建议使用 mixed;实际选择还应结合操作系统、防火墙、性能和兼容性测试。
Rule Providers 与 Proxy Providers:拆分规则集和节点来源
Rule Providers 用于加载可复用规则集,Proxy Providers 用于加载和更新代理集合。将规则和节点来源从主配置拆开,可以分别设置更新周期、健康检查、过滤和文件路径,更适合长期维护。
rule-providers:
reject:
type: http
behavior: domain
format: yaml
path: ./ruleset/reject.yaml
url: https://example.com/rules/reject.yaml
interval: 86400
direct:
type: http
behavior: domain
format: yaml
path: ./ruleset/direct.yaml
url: https://example.com/rules/direct.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,direct,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
proxy-providers:
provider1:
type: http
url: https://example.com/proxies.yaml
path: ./proxy_providers/provider1.yaml
interval: 3600
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 300
timeout: 5000
Rule Providers 和 Proxy Providers 的职责
rule-providers 提供可被 RULE-SET 引用的规则内容;proxy-providers 提供代理节点集合,可被策略组通过 use 引用,并独立配置更新和健康检查。
Mihomo External Controller API:状态读取与策略控制
Mihomo 提供 RESTful External Controller API。Clash Verge Rev 默认使用内部 IPC 与内核通信;只有在用户显式启用 External Controller 后,外部脚本或 Dashboard 才应通过监听地址和 secret 访问内置 Mihomo。
external-controller: 127.0.0.1:9090
secret: "replace-with-a-strong-secret"
external-ui: ./dashboard
curl \
-H "Authorization: Bearer replace-with-a-strong-secret" \
http://127.0.0.1:9090/proxies
curl -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer replace-with-a-strong-secret" \
-d '{"name":"Example Node"}' \
http://127.0.0.1:9090/proxies/PROXY
curl \
-H "Authorization: Bearer replace-with-a-strong-secret" \
http://127.0.0.1:9090/providers/proxies/provider1/healthcheck
External Controller 为什么应优先绑定本机地址?
External Controller 能读取状态并执行策略切换、Provider 更新等控制操作。优先绑定 127.0.0.1,并设置强 secret;若需要远程访问,还应增加防火墙、可信网络或受控反向代理限制。
Clash Verge Rev 是否把 External Controller 当作公开插件接口?
不是。项目维护者明确说明 GUI 默认使用内部 IPC;External Controller 需要用户主动启用。对于纯脚本化控制场景,维护者也更建议直接围绕 Mihomo 核心本身进行集成。
开发集成边界:Clash Verge Rev GUI、Mihomo 与 API
Clash Verge Rev、Mihomo 与 Dashboard 属于不同层级:Clash Verge Rev 提供桌面 GUI 和系统集成,Mihomo 负责实际代理与规则执行,External Controller 则是可选的外部控制入口。开发时应先确认真正需要集成的是哪一层。
1. External Controller 默认应保持本机或受控访问
如果启用 External Controller,优先绑定 127.0.0.1 并设置 secret 鉴权。需要远程访问时,应额外限制来源网络,避免将核心控制面直接暴露到公网。
2. 配置拆分应围绕 Providers 长期维护
节点来源适合拆到 proxy-providers,规则集适合拆到 rule-providers。这样可以分别处理更新周期、健康检查、规则格式和文件路径,降低主配置复杂度。
3. Dashboard 是控制层,Mihomo 才是执行核心
Dashboard 和桌面 GUI 负责展示与控制,真正处理代理连接、规则、DNS 与 TUN 的是 Mihomo。理解这一层级可以避免把客户端界面能力误认为内核 API。
4. API 方法和路径应按当前 Mihomo 文档校验
例如策略组切换使用 PUT /proxies/{name},而 Proxy Provider 的 healthcheck 使用 GET。自动化脚本应避免继续复制旧示例中的请求方法和返回结构。
external-controller: 127.0.0.1:9090
secret: "replace-with-a-strong-secret"
external-ui: ./dashboard
# 仅在确有远程控制需求时调整监听地址。
# 同时限制网络访问范围,并避免在前端代码中暴露 secret。
重点说明 Clash Verge Rev、Mihomo 配置和 External Controller 之间的技术边界,避免把 GUI、内核与外部控制接口混为同一层。
Clash Verge Rev 与 Mihomo 开发常见问题
如果你正在编写配置、调试规则或接入控制 API,下面这些问题通常最先会遇到。
Clash Verge Rev 有独立的公开 REST API 吗?+
Clash Verge Rev 的公开开发重点并不是独立 REST API。项目内置 Mihomo,并默认通过内部 IPC 与核心通信;如需外部控制,可以主动启用 Mihomo External Controller,但这属于需要自行评估安全风险的高级用法。
Clash Verge Rev 的 Profile 与 Mihomo 配置是什么关系?+
Clash Verge Rev 提供 Profile、Merge、Script、可视化节点和规则编辑等 GUI 能力,最终由 Mihomo 执行生效配置。具体字段行为仍应以当前 Mihomo 配置文档为主要技术参考。
为什么同一份 YAML 在不同客户端表现可能不同?+
客户端可能使用不同 Mihomo 版本、默认覆写、Merge 或 Script、系统代理逻辑以及 TUN 设置。排查时应查看最终生效配置和当前内核版本,而不只比较原始订阅文件。
External Controller 可以直接暴露给网页前端吗?+
不建议。该接口可以读取运行状态并执行策略切换、Provider 更新等操作。更安全的方式是限制在本机或可信网络,并配置 secret 与额外访问控制。