Clash Verge 配置教程
从 Clash 基础 YAML 配置开始,逐步理解端口、DNS、TUN、策略组、规则与 rule-providers, 再使用 Clash Verge 的扩展配置与扩展脚本管理订阅上的个人定制。
Clash 基础配置
Clash 配置以 YAML 为基础,通常由端口、运行模式、日志、外部控制、代理节点、策略组和规则组成。 下面的示例用于理解配置层级,节点可由订阅提供或自行写入。
# 基础端口
mixed-port: 7897 # HTTP 与 SOCKS 共用端口
allow-lan: false # 允许局域网设备连入时改为 true
bind-address: "*"
mode: rule # rule / global / direct
log-level: info # silent / error / warning / info / debug
ipv6: false
# 外部控制(Clash Verge 自身会管理,手动调用 API 时才需要关注)
external-controller: 127.0.0.1:9097
secret: ""
# 节点:使用订阅时由订阅提供,这里可留空或写入自建节点
proxies: []
proxy-groups:
- name: PROXY
type: select
proxies:
- AUTO
- DIRECT
- name: AUTO
type: url-test
url: http://cp.cloudflare.com/generate_204
interval: 300
tolerance: 50
include-all: true # 自动纳入订阅里的全部节点
rules:
- GEOIP,LAN,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,PROXY
说明
include-all 会把订阅中的所有节点纳入该策略组,省去手工维护节点名单;
MATCH 必须放在规则列表最后,它是兜底规则。
Clash 端口与外部控制
Clash 可以使用 mixed-port 统一提供 HTTP 与 SOCKS 代理,也可以分别设置不同监听端口;external-controller 则用于本地控制接口。端口冲突或控制地址配置错误都可能导致内核启动失败。
# 方案一:一个混合端口,推荐
mixed-port: 7897
# 方案二:分开监听,某些工具只认单一协议时有用
# port: 7890 # HTTP
# socks-port: 7891 # SOCKS5
# redir-port: 7892 # Linux / macOS 透明代理
# tproxy-port: 7893 # Linux TProxy
allow-lan: false # 手机、电视等设备要共用时才打开
bind-address: "*" # allow-lan 为 true 时限定来源,例如 "192.168.1.0/24"
external-controller: 127.0.0.1:9097
secret: "换成你自己的随机字符串"
注意
打开 allow-lan 相当于把代理暴露给同一网段的设备。在公共网络下请保持关闭,
或用 bind-address 限定来源网段,并给 secret 设置一个随机值。
Clash DNS 配置
Clash DNS 配置决定域名如何解析,并会影响规则匹配、节点域名解析和 TUN 场景下的访问结果。 Mihomo 支持 fake-ip、上游 DNS、proxy-server-nameserver 与 nameserver-policy 等配置项,应根据本地网络环境组合使用。
dns:
enable: true
ipv6: false
listen: 0.0.0.0:1053
enhanced-mode: fake-ip # fake-ip 或 redir-host
fake-ip-range: 198.18.0.1/16
fake-ip-filter: # 这些域名不使用 fake-ip
- "*.lan"
- "*.local"
- "localhost.ptlogin2.qq.com"
- "+.stun.*.*"
default-nameserver: # 仅用于解析下面的 DoH 域名
- 223.5.5.5
- 119.29.29.29
nameserver: # 常规查询
- https://223.5.5.5/dns-query
- https://doh.pub/dns-query
proxy-server-nameserver: # 解析节点域名,避免走代理造成循环
- https://223.5.5.5/dns-query
nameserver-policy: # 按域名指定上游
"geosite:cn": https://223.5.5.5/dns-query
"geosite:geolocation-!cn": https://dns.cloudflare.com/dns-query
说明
proxy-server-nameserver 用国内直连 DNS,是为了避免「解析节点域名又要先连上节点」的循环依赖。
国内外分流交给 nameserver-policy 更可控。
Clash TUN 模式
Clash TUN 模式通过虚拟网卡与系统路由接管更多应用流量,适合不遵循系统代理设置的程序。启用时需要关注系统权限、路由、DNS 劫持以及出口网卡识别。
tun:
enable: true
stack: mixed # gvisor / system / mixed
device: Mihomo
auto-route: true # 接管系统路由
auto-detect-interface: true # 自动识别出口网卡
strict-route: false # 更严格的路由隔离,按需开启
mtu: 1500
dns-hijack:
- any:53
# TUN 场景下 DNS 建议配合 fake-ip
dns:
enable: true
enhanced-mode: fake-ip
注意 TUN 与系统代理同时开启容易出现流量绕圈。先只开一个验证通路,确认正常后再按需组合; 开启失败多为权限或虚拟网卡条件不满足,参见 常见问题里的排查思路。
Clash 策略组
Clash 策略组用于组织代理节点并决定实际出站方式。常见类型包括 select、url-test、fallback 与 load-balance,也可以通过 filter 和 exclude-filter 对订阅节点进行筛选。
proxy-groups:
# 手动选择:总入口,指向下面几个组
- name: PROXY
type: select
proxies: [AUTO, HK, JP, US, DIRECT]
# 自动测速:延迟最低优先
- name: AUTO
type: url-test
url: http://cp.cloudflare.com/generate_204
interval: 300
tolerance: 50
include-all: true
# 故障转移:按顺序用,前一个不可用才换下一个
- name: FALLBACK
type: fallback
url: http://cp.cloudflare.com/generate_204
interval: 300
include-all: true
# 负载均衡:同一策略组内分摊连接
- name: BALANCE
type: load-balance
strategy: consistent-hashing # 或 round-robin
url: http://cp.cloudflare.com/generate_204
interval: 300
include-all: true
# 按地区分组:用 filter 从全部节点里筛名字
- name: HK
type: url-test
include-all: true
filter: "(?i)香港|hong ?kong|hk"
url: http://cp.cloudflare.com/generate_204
interval: 300
- name: JP
type: url-test
include-all: true
filter: "(?i)日本|japan|jp"
url: http://cp.cloudflare.com/generate_204
interval: 300
- name: US
type: url-test
include-all: true
filter: "(?i)美国|united ?states|us"
exclude-filter: "(?i)过期|剩余|官网"
url: http://cp.cloudflare.com/generate_204
interval: 300
说明
filter 是正则,(?i) 表示忽略大小写;
用 exclude-filter 排掉订阅里的流量提示、到期时间这类伪节点,
否则它们会被算进测速并被选中。
Clash 规则与 rule-providers
Clash 规则按顺序匹配,命中第一条符合条件的规则后停止。单条规则适合精确分流,rule-providers 则用于集中维护域名或 IP 规则集,最终由 RULE-SET 在 rules 中引用。
rules:
# 局域网与本机,不需要解析域名
- GEOIP,LAN,DIRECT,no-resolve
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
# 按进程分流:只让特定程序走代理
- PROCESS-NAME,Telegram.exe,PROXY
- PROCESS-NAME,Telegram,PROXY
# 按域名分流
- DOMAIN-SUFFIX,github.com,PROXY
- DOMAIN-KEYWORD,google,PROXY
- DOMAIN,ghcr.io,PROXY
- DOMAIN-SUFFIX,cn,DIRECT
# 按端口与协议
- DST-PORT,22,DIRECT
- NETWORK,udp,PROXY
# 规则集:批量域名/IP 清单
- RULE-SET,private,DIRECT
- RULE-SET,reject,REJECT
- RULE-SET,cncidr,DIRECT,no-resolve
# 地理位置兜底
- GEOIP,CN,DIRECT
- MATCH,PROXY
rule-providers:
private:
type: http
behavior: domain
format: text
interval: 86400
path: ./ruleset/private.txt
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/private.txt"
reject:
type: http
behavior: domain
format: text
interval: 86400
path: ./ruleset/reject.txt
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
cncidr:
type: http
behavior: ipcidr
format: text
interval: 86400
path: ./ruleset/cncidr.txt
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/cncidr.txt"
注意
上面的规则集地址来自第三方社区维护的仓库,不属于本项目,使用前请自行确认内容与更新情况。
behavior 必须和清单类型对应:域名清单用 domain,IP 段用 ipcidr,混合用 classical,写错会直接导致配置加载失败。
Clash Verge 扩展配置(Merge)
Clash Verge 当前将原来的 Merge 配置称为“扩展配置”。它使用 YAML 对订阅配置进行覆写或合并, 适合统一修改 DNS、日志、端口等配置项;规则前置与后置则可通过订阅的可视化规则编辑功能维护。
# 扩展配置使用 YAML 对订阅配置进行覆写 / 合并
mixed-port: 7897
log-level: warning
unified-delay: false
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
profile:
store-selected: true
store-fake-ip: true
说明 新版 Clash Verge Rev 中,“Merge 配置”已改名为“扩展配置”,主要用于 YAML 配置项的覆写与合并。 需要前置或后置规则时,优先使用订阅右键菜单中的规则编辑功能;全局扩展与订阅扩展可以按作用范围组合使用。
Clash Verge 扩展脚本(Script)
Clash Verge 当前将原来的 Script 配置称为“扩展脚本”。当 YAML 覆写不足以表达条件判断或批量处理时,可以通过 JavaScript 的 main 函数读取并修改配置对象,然后返回处理后的配置。
function main(config, profileName) {
// 1. 兜底:字段可能不存在,先补上
config.rules = config.rules || [];
config["proxy-groups"] = config["proxy-groups"] || [];
// 2. 剔除订阅里的伪节点(流量、到期提示)
const junk = /(剩余|到期|过期|官网|流量|订阅)/;
config.proxies = (config.proxies || []).filter((p) => !junk.test(p.name));
// 3. 按关键字生成地区策略组
const areas = [
{ name: "HK", re: /香港|hk/i },
{ name: "JP", re: /日本|jp/i },
{ name: "US", re: /美国|us/i },
];
for (const area of areas) {
const members = config.proxies
.filter((p) => area.re.test(p.name))
.map((p) => p.name);
if (members.length === 0) continue;
config["proxy-groups"].push({
name: area.name,
type: "url-test",
url: "http://cp.cloudflare.com/generate_204",
interval: 300,
proxies: members,
});
}
// 4. 把自己的规则插到最前面
config.rules.unshift("DOMAIN-SUFFIX,my-internal.example,DIRECT");
// 5. 必须返回配置对象
return config;
}
说明
脚本里 config 是解析后的对象,带连字符的字段要用
config["proxy-groups"] 这种写法。改动完成后一定要
return config,否则会得到一份空配置。
Clash 配置排错
Clash 配置无法加载、规则不生效、DNS 异常或节点全部超时时,可以从 YAML 格式、端口、规则顺序、rule-provider 类型、DNS 和订阅扩展逐项排查。
| 现象 | 常见原因 | 怎么确认 |
|---|---|---|
| 配置导入就报错 | YAML 缩进用了 Tab,或冒号后缺空格 | 统一两个空格缩进;把改动分段注释掉二分定位 |
| 启动失败、提示端口占用 | mixed-port 与其他代理工具冲突 |
换一个端口,或先退出占用端口的程序 |
| 规则不生效 | 命中了更靠前的规则,或写在了 MATCH 之后 |
把该规则移到 prepend-rules;用全局模式反向验证 |
| 规则集加载失败 | behavior 与清单类型不匹配,或 URL 不可达 |
域名清单用 domain、IP 段用 ipcidr;直接打开 URL 确认可访问 |
| 能连上但网页打不开 | DNS 配置问题,fake-ip 与 redir-host 混用 | 先用一套 DNS 配置跑通;检查 fake-ip-filter 是否漏了内网域名 |
| 节点全部超时 | 解析节点域名走了代理,形成循环 | 确认 proxy-server-nameserver 指向直连 DNS |
| 测速选中了奇怪的节点 | 订阅里的流量/到期提示被当成节点 | 用 exclude-filter 或脚本过滤掉这些名字 |
| 订阅更新后改动消失 | 直接改了订阅配置本身 | 把改动迁到 Merge 或 Script 里维护 |