Clash 配置文件详解:config.yaml 各部分与字段逐项说明
Clash 中文网编辑部 · 更新于 2026/10/22
Clash / Mihomo 的配置文件 config.yaml 是一个 YAML 文档,自上而下大致分为:通用设置、外部控制、节点与代理集合、代理组、规则集合与规则、DNS、TUN、嗅探和 GeoData 几部分。 机场订阅下载下来就是这样一个文件。下面按顺序说明每个部分。
整体结构
# 通用设置
mixed-port: 7890
mode: rule
# 外部控制
external-controller: 127.0.0.1:9090
# 节点
proxies: [...]
# 代理集合
proxy-providers: {...}
# 代理组
proxy-groups: [...]
# 规则集合
rule-providers: {...}
# 规则
rules: [...]
# DNS
dns: {...}
# TUN
tun: {...}
# 嗅探
sniffer: {...}
不是每个部分都必须有。一份最小可用的配置只需要 proxies、proxy-groups、rules 三部分。
YAML 基础语法
| 规则 | 示例 |
|---|---|
| 用空格缩进表示层级,不能用 Tab | 两个空格一层 |
键: 值,冒号后必须有一个空格 |
mode: rule |
列表用 - 开头 |
- DIRECT |
| 列表也可以写在一行 | proxies: [a, b, c] |
| 对象可以写在一行 | { name: a, type: select } |
# 后面是注释 |
# 这是注释 |
| 含特殊字符的值加引号 | password: "a:b#c" |
YAML 中容易出错的值:包含 :、#、*、&、!、|、>、{、[ 的字符串,以及以 0 开头的数字(如 short-id),都建议加引号。
通用设置
| 字段 | 说明 | 常用值 |
|---|---|---|
mixed-port |
HTTP + SOCKS5 混合端口 | 7890 |
port / socks-port |
单独的 HTTP / SOCKS5 端口 | 可不设 |
redir-port / tproxy-port |
透明代理端口(Linux / macOS) | 软路由使用 |
allow-lan |
允许局域网连接 | false |
bind-address |
允许局域网时监听的地址 | * |
authentication |
代理端口的用户名密码 | ["user:pass"] |
skip-auth-prefixes |
免认证的 IP 段 | [127.0.0.1/32] |
mode |
rule / global / direct | rule |
log-level |
debug / info / warning / error / silent | info |
ipv6 |
是否启用 IPv6 | false |
unified-delay |
统一延迟 | true |
tcp-concurrent |
TCP 并发连接 | true |
find-process-mode |
进程匹配:always / strict / off | strict |
global-client-fingerprint |
全局 TLS 指纹 | chrome |
keep-alive-interval |
TCP keep-alive 间隔(秒) | 默认即可 |
profile
profile:
store-selected: true # 记住代理组的选择
store-fake-ip: true # 重启后保留 fake-ip 映射
hosts
hosts:
nas.home: 192.168.1.10
"*.dev.local": 127.0.0.1
内核自己的 hosts 映射,需要 DNS 中 use-hosts: true(默认)。
外部控制
| 字段 | 说明 |
|---|---|
external-controller |
RESTful API 监听地址,如 127.0.0.1:9090 |
secret |
API 密钥 |
external-ui / external-ui-url |
Web 面板目录与下载地址,见 面板教程 |
external-controller-cors |
跨域设置 |
节点(proxies)
proxies:
- name: 香港01
type: ss
server: hk.example.com
port: 443
cipher: 2022-blake3-aes-128-gcm
password: "xxxx"
udp: true
每个节点必须有 name、type、server、port,其他字段因协议而异,见 支持的协议。name 必须唯一,代理组和规则通过名称引用节点。
代理集合(proxy-providers)
从订阅或文件批量引入节点:
proxy-providers:
airport:
type: http
url: "https://example.com/sub"
path: ./providers/airport.yaml
interval: 86400
见 代理集合与规则集合。
代理组(proxy-groups)
proxy-groups:
- name: 节点选择
type: select
proxies: [自动选择, DIRECT]
use: [airport]
- name: 自动选择
type: url-test
use: [airport]
url: https://www.gstatic.com/generate_204
interval: 300
见 代理组详解。
规则集合与规则
rule-providers:
reject:
type: http
behavior: domain
url: "https://example.com/reject.yaml"
path: ./ruleset/reject.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,节点选择
还可以用 sub-rules 定义子规则。见 规则详解。
DNS
dns:
enable: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver: [223.5.5.5]
nameserver: [https://dns.alidns.com/dns-query]
见 DNS 配置详解。
TUN
tun:
enable: true
stack: mips # mips(默认,Mihomo 自研)/ system / gvisor / mixed
auto-route: true
auto-detect-interface: true
dns-hijack: [any:53]
strict-route: false
route-exclude-address: [192.168.0.0/16]
| 字段 | 说明 |
|---|---|
stack |
协议栈 |
auto-route |
自动设置路由 |
auto-redirect |
Linux 自动配置 nftables/iptables |
auto-detect-interface |
自动识别出口网卡 |
dns-hijack |
劫持的 DNS 地址 |
strict-route |
严格路由,防止流量绕过 |
route-exclude-address |
不经过 TUN 的网段 |
mtu |
最大传输单元 |
图形客户端中通常用开关控制,原理见 TUN 模式教程。
域名嗅探(sniffer)
sniffer:
enable: true
force-dns-mapping: true
parse-pure-ip: true
sniff:
HTTP: { ports: [80, 8080-8880], override-destination: true }
TLS: { ports: [443, 8443] }
QUIC: { ports: [443, 8443] }
skip-domain:
- "+.push.apple.com"
嗅探能从流量中识别真实域名,在 TUN 模式或使用 IP 直连的应用中提高分流准确度。
GeoData 设置
geodata-mode: true
geo-auto-update: true
geo-update-interval: 24
geox-url:
geoip: "https://…/geoip.dat"
geosite: "https://…/geosite.dat"
mmdb: "https://…/country.mmdb"
进阶:listeners 与 tunnels
listeners(额外入站)
除了 mixed-port,还可以定义多个入站,并把某个入站的流量固定交给某个代理组:
listeners:
- name: us-in
type: mixed
port: 7801
proxy: 美国节点 # 从 7801 进入的流量全部走美国节点
适合给不同程序分配不同出口:程序 A 用 7890 正常分流,程序 B 用 7801 固定走美国。
tunnels(端口转发)
tunnels:
- tcp/udp,127.0.0.1:6553,8.8.8.8:53,节点选择
把本地端口经代理转发到固定远端地址。
在客户端中修改配置
不要直接改订阅文件(更新后会丢失),应使用客户端的覆写功能:
| 客户端 | 方法 |
|---|---|
| Clash Verge Rev | 扩展覆写配置、扩展脚本、编辑规则 |
| FlClash | 进阶配置 |
| Clash Meta for Android | 覆写设置 |
| Clash Party | 覆写 |
| Clash Nyanpasu | 配置转换 |
注意:客户端会接管端口、allow-lan、mode、log-level、external-controller 等字段,这些在客户端设置中修改。
检查配置
直接使用内核时:
mihomo -d 配置目录 -t
图形客户端中,查看“运行时配置”即可看到最终生效的完整配置。
相关教程
常见问题
配置文件放在哪里?
图形客户端会自动管理配置,无需手动放置;直接运行内核时,用 -d 指定的目录中的 config.yaml 就是配置文件。
YAML 有哪些容易犯的错误?
用了 Tab 缩进、冒号后面缺少空格、同级缩进不一致、包含特殊字符(如冒号、#、*)的值没有加引号。
为什么在订阅里改了端口没用?
图形客户端会接管端口、局域网、模式等字段,以客户端设置为准。直接运行内核时修改才会生效。
订阅里的配置可以直接修改吗?
可以但不推荐,订阅更新时会被覆盖。应该使用客户端的覆写功能修改。