Clash 中文网搜索

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"

见 GeoIP 与 GeoSite 是什么。

进阶: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 缩进、冒号后面缺少空格、同级缩进不一致、包含特殊字符(如冒号、#、*)的值没有加引号。

为什么在订阅里改了端口没用?

图形客户端会接管端口、局域网、模式等字段,以客户端设置为准。直接运行内核时修改才会生效。

订阅里的配置可以直接修改吗?

可以但不推荐,订阅更新时会被覆盖。应该使用客户端的覆写功能修改。