Clash 配置
通过 YAML 设置代理端口、DNS、TUN、策略组与分流规则,并在 Clash Verge 中管理订阅和配置增强。以下示例基于 Mihomo,用于说明字段关系;应用前需补充可用节点,并核对内核版本与本机网络环境。
基础配置结构
Clash 配置通常包含监听端口、运行模式、节点、代理组与规则。Clash Verge Rev 使用 Mihomo 解析配置,客户端部分设置还可能覆盖对应字段。下面展示配置层级,节点列表为空,不能作为现成代理线路使用。
# 端口数值为示例,需与客户端和应用设置一致
mixed-port: 7897 # HTTP 与 SOCKS 共用端口
allow-lan: false # 默认不允许其他设备接入
bind-address: "*"
mode: rule # rule / global / direct
log-level: info # silent / error / warning / info / debug
ipv6: false
# 控制接口由客户端管理,修改前需确认客户端连接设置
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 之前。
GEOIP 匹配还需要对应地理数据可用。
代理端口与控制接口
代理端口接收应用请求,控制接口用于读取状态与管理内核,两者用途不同。mixed-port 可同时接收 HTTP 与 SOCKS 请求;应用中填写的地址和端口需与内核实际监听值一致。
# 混合端口:同时提供 HTTP 与 SOCKS 代理
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: "*" # 绑定所有本地 IP,不是来源网段限制
external-controller: 127.0.0.1:9097
secret: "换成你自己的随机字符串"
字段区别
bind-address 指定本机监听地址,来源网段限制需使用
lan-allowed-ips 等设置或系统防火墙。
secret 是控制接口密钥,不是代理端口密码;
HTTP、SOCKS 与 mixed 端口的用户验证使用 authentication。
修改控制地址或密钥时,需同步确认客户端能否连接内核。
DNS 解析与分流
DNS 设置影响目标域名解析、节点域名解析及部分规则匹配。fake-ip 模式使用映射地址处理域名连接;上游解析服务和解析策略仍需根据网络可达性配置。以下地址为示例,不保证在所有网络中可用。
dns:
enable: true
ipv6: false
listen: 0.0.0.0:1053 # 监听所有 IPv4 地址,按环境限制访问
enhanced-mode: fake-ip # fake-ip 或 redir-host
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "*.local"
- "localhost.ptlogin2.qq.com"
- "+.stun.*.*"
default-nameserver: # 用于解析 DNS 服务自身的域名
- 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 数据
"geosite:cn": https://223.5.5.5/dns-query
"geosite:geolocation-!cn": https://dns.cloudflare.com/dns-query
检查要点
proxy-server-nameserver 用于代理节点域名解析,应确保其上游可达且不会产生连接依赖循环。
nameserver-policy 选择解析上游,不直接决定网站连接走代理还是直连。
使用 geosite 分类需确认数据文件可用;示例中的监听地址也需按设备访问范围调整。
TUN 流量接入
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
# 与已有 dns 配置合并,避免重复定义顶层 dns 字段
dns:
enable: true
enhanced-mode: fake-ip
使用条件
系统代理与 TUN 可以在部分环境中配合使用,但不能仅凭开关状态判断流量已被正确接管。
出现网络异常时,可分别测试两种接入方式,检查权限、路由、DNS 和其他网络工具。
dns-hijack 中的端口 53 规则不代表接管应用自行建立的所有加密 DNS 连接。
具体排查可参考 代理模式与网络连接问答。
代理策略组
策略组组织节点并选择连接出口。select 用于手动选择,url-test 根据测试结果选择节点,fallback 按顺序检查可用性,load-balance 分配不同连接。自动选择的结果受测试目标与网络条件影响。
proxy-groups:
# 手动选择节点或其他策略组
- name: PROXY
type: select
proxies: [AUTO, HK, JP, US, DIRECT]
# 根据延迟测试结果选择节点,tolerance 控制切换容差
- 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
# 根据节点名称筛选候选项
- 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 和 exclude-filter 按节点名称执行正则筛选,
名称中的地区标签不等于实际出口位置。
使用前检查各组是否有候选节点,以及引用名称是否存在。
示例中的 FALLBACK 与 BALANCE 需被其他组或规则引用,才会参与对应连接的处理。
分流规则与规则集
Rule 模式下,普通分流规则按顺序匹配,前面的宽泛规则可能使后续精确规则无法命中。规则集用于集中维护域名、IP 或完整规则,引用前需定义相应 provider,并匹配其内容类型与文件格式。
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
# 引用规则集,需同时配置下方 rule-providers
- 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: yaml
interval: 86400
path: ./ruleset/private.txt
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/private.txt"
reject:
type: http
behavior: domain
format: yaml
interval: 86400
path: ./ruleset/reject.txt
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
cncidr:
type: http
behavior: ipcidr
format: yaml
interval: 86400
path: ./ruleset/cncidr.txt
url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/cncidr.txt"
格式与顺序
示例规则源使用带 payload 的 YAML 内容,即使文件名以
.txt 结尾,也应按实际格式设置 format。
behavior 则区分 domain、ipcidr 与
classical。
上方 NETWORK,udp,PROXY 会先处理匹配的 UDP 连接,后面的规则集不会再匹配这些连接;实际使用应按目标调整顺序。
Merge 配置合并
在 Clash Verge 中,通过 Merge 或扩展配置单独维护自定义 YAML 字段,减少直接修改订阅生成文件的需要。适用内容包括日志、DNS 与配置缓存;客户端管理的端口等字段,还需核对最终生效值。
# 具体合并或覆盖行为以客户端版本为准
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
检查最终配置
配置增强的入口、作用范围与处理顺序可能随版本变化。
对数组、规则和同名字段的处理,不应默认等同于简单追加。
应用后检查生成配置,确认原有 DNS 上游、规则与代理组是否仍被保留;
store-selected 和 store-fake-ip 用于相关状态缓存,不能替代配置备份。
Script 脚本增强
需要按条件筛选节点或生成策略组时,可通过 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.proxies 中的节点,不覆盖所有代理集合使用方式。
新建的组需被规则或其他组引用,才能参与连接处理。
删除节点后还需同步检查原有组的引用;已有 HK、JP 或
US 组时,应先处理名称冲突。
完成修改后需返回配置对象,并检查脚本执行结果与内核校验信息。
配置与连接排查
先区分 YAML 解析失败、内核启动失败与连接异常,再按日志检查具体字段。配置能够加载,不代表节点、DNS 和路由都能正常工作;每次只调整相关设置,便于对照结果。
| 现象 | 可能原因 | 检查方法 |
|---|---|---|
| 配置导入时报错 | YAML 缩进、字段类型、订阅返回内容或配置引用异常 | 查看报错行与上下文,确认返回内容为配置文件,再检查缩进、同名键与引用名称 |
| 内核提示端口被占用 | 代理、DNS 或控制接口与现有进程使用相同监听地址 | 按日志定位具体端口,检查占用进程;修改后同步核对客户端及应用设置 |
| 分流规则未按预期生效 | 未使用 Rule 模式、命中更早规则,或目标流量未进入内核 | 检查最终配置、当前模式与新连接记录,确认命中规则,再调整顺序或接入方式 |
| 规则集加载失败 | 下载失败、格式不符、缓存路径不可写或内容类型不匹配 | 检查日志、实际响应内容、format 与 behavior,并确认内核运行环境能访问规则源 |
| 节点测试正常但网页无法打开 | 目标连接的规则、DNS、节点出口或应用代理设置异常 | 查看目标请求是否进入内核,检查命中策略、解析结果与报错,避免仅凭延迟测试判断 |
| 节点测试全部超时 | 本地网络、节点域名解析、测试目标或节点服务异常 | 分别检查网络与测试地址可达性、节点解析和日志,再确认节点服务是否有效 |
| 策略组出现错误候选项 | 名称筛选过宽,或提示性条目被纳入候选范围 | 检查实际成员与正则匹配结果,调整 filter、exclude-filter 或脚本,并核对保留节点 |
| 订阅更新后修改消失 | 直接修改了订阅生成文件,或增强未应用到目标配置 | 将长期设置单独维护在配置增强中,检查作用范围、处理顺序与最终生效配置 |