配置文件教程

Clash config.yaml 完整指南

深入理解 Clash 配置文件的每个字段含义,掌握代理节点、代理组、规则分流、DNS 的完整写法,自己动手写出最符合需求的配置。

阅读约 15 分钟 难度:进阶 含完整代码示例
使用教程 config.yaml 配置指南

什么是 config.yaml

config.yaml 是 Clash 的核心配置文件,采用 YAML 格式编写。它告诉 Clash 内核:

监听哪些端口

HTTP 代理、SOCKS5 代理、透明代理各自用哪个端口

有哪些代理节点

所有节点的服务器地址、协议类型、认证信息

如何分组与切换

节点按策略分组:手动选择、自动测速、故障转移

流量分流规则

哪些域名直连、哪些走代理、哪些拒绝

使用机场订阅时,config.yaml 由订阅链接自动生成,通常不需要手动编写。本教程面向希望深度定制配置自建服务器的进阶用户。

配置文件默认位置

操作系统默认路径
Windows %APPDATA%\clash-verge\profiles\
macOS ~/.config/clash-verge/profiles/
Linux ~/.config/clash-verge/profiles/
Mihomo (CLI) ~/.config/mihomo/config.yaml
在 Clash Verge Rev 中,可直接在「订阅」页面点击「编辑」按钮用内置编辑器修改当前配置,无需手动找文件路径。

YAML 语法速查

在写配置文件之前,先了解 YAML 的几个核心规则,避免格式错误导致 Clash 无法启动:

缩进用空格,不用 Tab
# 正确:用 2 个空格缩进
proxies:
  - name: "节点A"
    type: ss

# 错误:不能用 Tab 键
proxies:
	- name: "节点A"   # ← Tab,会报错
列表用 - 开头
# 字符串列表
nameserver:
  - 223.5.5.5
  - 119.29.29.29

# 对象列表(每项多个字段)
proxies:
  - name: "节点A"
    type: ss
  - name: "节点B"
    type: vmess
字符串何时加引号
# 含特殊字符时必须加引号
password: "p@ss:word#123"

# 纯字母数字可不加
log-level: info

# 布尔值不加引号
allow-lan: true
udp: false
注释用 #
# 整行注释
port: 7890  # 行末注释

# 注释可以帮你记录每项配置的用途
mode: rule  # rule/global/direct

基础配置参数

端口设置

Clash 通过本地端口对外提供代理服务,应用程序将代理地址指向这些端口。

config.yaml — 端口配置
# 方案一:分开设置(兼容性最好)
port: 7890        # HTTP 代理端口
socks-port: 7891  # SOCKS5 代理端口
redir-port: 7892  # 透明代理端口(Linux/macOS,TUN 模式相关)

# 方案二:混合端口(推荐,HTTP+SOCKS5 合一)
mixed-port: 7890

# 与方案一互斥,选其一即可
字段类型说明
port整数HTTP 代理端口,浏览器代理填此端口
socks-port整数SOCKS5 端口,适用于游戏、命令行工具
mixed-port整数HTTP+SOCKS5 混合端口,推荐使用
redir-port整数透明代理端口,TUN/iptables 场景使用
allow-lan布尔是否允许局域网其他设备使用此代理,默认 false

代理模式与日志

config.yaml — 模式与日志
mode: rule        # rule(规则)| global(全局)| direct(直连)
log-level: info  # silent | error | warning | info | debug
ipv6: false        # 是否允许内核接受 IPv6 流量
mode 值含义适用场景
rule规则模式日常使用首选,按规则自动分流
global全局代理所有流量走代理,临时调试使用
direct全局直连所有流量不走代理,等同关闭

外部控制接口(RESTful API)

Clash 提供 RESTful API 用于外部控制,Web 管理面板(如 Metacubexd)通过此接口查看流量、切换节点。

config.yaml — 外部控制
external-controller: 127.0.0.1:9090  # API 监听地址
secret: ""                              # API 访问密钥(建议设置)
external-ui: ui                         # Web 面板文件目录(可选)
external-ui-url: "https://github.com/MetaCubeX/metacubexd/archive/gh-pages.zip"
external-controller 改为 0.0.0.0:9090 可允许局域网内其他设备访问 Web 面板,但务必同时设置 secret 防止未授权访问。

DNS 配置详解

Clash 内置 DNS 模块,接管系统 DNS 解析后,可以实现更精准的分流和防止 DNS 泄漏。强烈建议开启,尤其是规则模式和 TUN 模式下。

enhanced-mode:核心 DNS 工作模式

config.yaml — DNS 基础
dns:
  enable: true                   # 开启内置 DNS
  listen: 0.0.0.0:53            # DNS 监听地址
  ipv6: false                    # 是否解析 IPv6
  enhanced-mode: fake-ip        # fake-ip(推荐)或 redir-host
  fake-ip-range: 198.18.0.1/16 # Fake-IP 地址池范围
enhanced-mode工作方式推荐程度
fake-ip返回虚假 IP,连接请求立即发出,Clash 按域名匹配规则推荐
redir-host正常 DNS 解析后,按真实 IP 匹配 IP-CIDR 规则兼容性好

上游 DNS 服务器配置

config.yaml — DNS 服务器
dns:
  # 国内 DNS(用于解析国内域名)
  nameserver:
    - 223.5.5.5           # 阿里 DNS
    - 119.29.29.29        # 腾讯 DNS
    - system              # 跟随系统 DNS

  # 境外 DNS(用于解析非国内域名,防止污染)
  # 使用加密 DNS(DoT/DoH)避免被运营商劫持
  fallback:
    - tls://8.8.8.8:853   # Google DNS over TLS
    - tls://1.1.1.1:853   # Cloudflare DNS over TLS
    - https://dns.google/dns-query  # Google DoH

  # fallback 触发条件:被判定为非国内 IP 时使用 fallback DNS
  fallback-filter:
    geoip: true
    geoip-code: CN       # 非 CN IP 触发 fallback
    ipcidr:
      - 240.0.0.0/4       # 保留地址段也触发 fallback
为什么需要两套 DNS? 国内运营商对境外 DNS 查询会进行 DNS 污染(返回错误结果),所以境外域名必须用加密 DNS(DoT/DoH)查询,才能得到正确的 IP 地址。

fake-ip-filter:排除不走 Fake-IP 的域名

某些本地服务(如 NAS 发现、mDNS、QQ 登录验证)依赖真实 IP,需要从 Fake-IP 中排除:

config.yaml — fake-ip-filter
dns:
  fake-ip-filter:
    - '*.lan'                        # 局域网域名直连
    - '*.local'                      # 本地 mDNS
    - localhost.ptlogin2.qq.com      # QQ 登录验证
    - +.stun.*.*                     # STUN 服务(WebRTC)
    - +.stun.*.*.*
    - time.*.com                     # NTP 时间同步
    - time.*.gov
    - ntp.*.com

proxies — 代理节点配置

proxies 是一个列表,每个条目代表一个代理节点。以下是四种主流协议的完整写法:

Shadowsocks

Shadowsocks 节点写法
proxies:
  - name: "🇭🇰 香港-SS"       # 节点名称,可自定义
    type: ss
    server: hk.example.com   # 服务器域名或 IP
    port: 443
    cipher: aes-256-gcm       # 加密方式(常见:aes-256-gcm / chacha20-ietf-poly1305)
    password: "your-password"
    udp: true                 # 开启 UDP 转发(游戏必开)

  # 带 obfs 混淆插件的 SS(增强抗封锁能力)
  - name: "🇯🇵 日本-SS-obfs"
    type: ss
    server: jp.example.com
    port: 80
    cipher: chacha20-ietf-poly1305
    password: "your-password"
    plugin: obfs
    plugin-opts:
      mode: http             # http 或 tls
      host: bing.com         # 伪装的目标域名

VMess

VMess 节点写法
  # VMess + WebSocket + TLS(最常见搭配)
  - name: "🇺🇸 美国-VMess-WS"
    type: vmess
    server: us.example.com
    port: 443
    uuid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    alterId: 0                  # 新版协议固定填 0
    cipher: auto
    network: ws                # 传输协议:ws / grpc / tcp / h2
    tls: true
    servername: us.example.com # SNI,与 server 一致或 CDN 域名
    ws-opts:
      path: /vmess            # 与服务端 path 一致
      headers:
        Host: us.example.com

  # VMess + gRPC(低延迟,穿透性强)
  - name: "🇸🇬 新加坡-VMess-gRPC"
    type: vmess
    server: sg.example.com
    port: 443
    uuid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    alterId: 0
    cipher: auto
    network: grpc
    tls: true
    grpc-opts:
      grpc-service-name: "vmess-grpc"

Trojan

Trojan 节点写法
  - name: "🇯🇵 日本-Trojan"
    type: trojan
    server: jp.example.com
    port: 443
    password: "your-password"
    sni: jp.example.com     # TLS SNI(通常与 server 相同)
    udp: true
    skip-cert-verify: false # 生产环境保持 false,勿跳过证书验证

  # Trojan + WebSocket(用于 CDN 中转)
  - name: "🇰🇷 韩国-Trojan-WS"
    type: trojan
    server: kr.example.com
    port: 443
    password: "your-password"
    network: ws
    ws-opts:
      path: /trojan
      headers:
        Host: kr.example.com

Hysteria 2

基于 QUIC 的新一代协议,专为高丢包环境优化,适合国际线路提速。

Hysteria 2 节点写法
  - name: "⚡ 美国-Hysteria2"
    type: hysteria2
    server: us.example.com
    port: 443
    password: "your-password"
    sni: us.example.com
    skip-cert-verify: false
    # 上传/下载带宽限速(单位 Mbps,按实际带宽填写)
    up: "50 Mbps"
    down: "200 Mbps"
up / down 填写的是您本地的上传/下载带宽,不是节点带宽。填写准确值有助于 QUIC 发挥最佳性能,填写过大反而会拥塞。

proxy-groups — 代理组详解

代理组是 Clash 最强大的特性之一。它将多个节点按照策略组合,让流量规则可以指向「一组节点」而非单个节点。

select — 手动选择

最基础的代理组类型,由用户在客户端界面手动选择当前激活的节点。

select 代理组
proxy-groups:
  - name: "🚀 节点选择"
    type: select
    proxies:
      - "⚡ 自动选择"      # 引用其他代理组
      - "🛡️ 故障转移"
      - "🇭🇰 香港-SS"     # 引用单个节点(名称必须与 proxies 中一致)
      - "🇺🇸 美国-VMess-WS"
      - "🇯🇵 日本-Trojan"
      - DIRECT            # 特殊值:直连,不走任何代理
      - REJECT            # 特殊值:拒绝连接(用于广告拦截)

url-test — 自动选速

定期对所有节点发起延迟测试,自动切换到延迟最低的节点。

url-test 代理组
  - name: "⚡ 自动选择"
    type: url-test
    proxies:
      - "🇭🇰 香港-SS"
      - "🇺🇸 美国-VMess-WS"
      - "🇯🇵 日本-Trojan"
      - "⚡ 美国-Hysteria2"
    url: 'http://www.gstatic.com/generate_204'  # 测速目标 URL
    interval: 300                               # 测速间隔(秒)
    tolerance: 50                               # 切换容忍度(ms),差距超过此值才切换
    lazy: true                                  # 懒测速:有流量时才测,省资源

fallback — 故障转移

按 proxies 列表顺序优先使用第一个节点,当第一个节点不可用时自动切换到下一个,保证连通性。

fallback 代理组
  - name: "🛡️ 故障转移"
    type: fallback
    proxies:
      - "🇭🇰 香港-SS"       # 首选节点
      - "🇯🇵 日本-Trojan"   # 备用一
      - "🇺🇸 美国-VMess-WS" # 备用二
    url: 'http://www.gstatic.com/generate_204'
    interval: 60   # 检测间隔(秒),比 url-test 更短以快速感知故障

load-balance — 负载均衡

将不同的连接分散到多个节点上,适合多连接并发的下载场景,可提升整体吞吐量。

load-balance 代理组
  - name: "⚖️ 负载均衡"
    type: load-balance
    strategy: consistent-hashing  # round-robin(轮询)| consistent-hashing(哈希,同域名走同节点)
    proxies:
      - "🇭🇰 香港-SS"
      - "🇯🇵 日本-Trojan"
      - "🇺🇸 美国-VMess-WS"
    url: 'http://www.gstatic.com/generate_204'
    interval: 300

rules — 规则配置详解

规则决定了每一条网络请求的去向:直连、走哪个代理组,还是直接拒绝。规则按从上到下的顺序匹配,命中第一条即执行,不再继续往下匹配。

规则类型一览

规则类型格式说明
DOMAIN DOMAIN,google.com,策略 精确匹配完整域名
DOMAIN-SUFFIX DOMAIN-SUFFIX,google.com,策略 匹配域名及其所有子域名
DOMAIN-KEYWORD DOMAIN-KEYWORD,google,策略 域名包含关键词即匹配
IP-CIDR IP-CIDR,192.168.0.0/16,策略 匹配目标 IP 地址段
IP-CIDR6 IP-CIDR6,::1/128,策略 匹配 IPv6 地址段
GEOIP GEOIP,CN,策略 按目标 IP 的地理位置(国家)匹配
GEOSITE GEOSITE,CN,策略 按预置域名数据库匹配(Mihomo 扩展)
PROCESS-NAME PROCESS-NAME,steam.exe,策略 按发起请求的进程名匹配(桌面端)
RULE-SET RULE-SET,规则集名称,策略 引用外部规则集文件(批量规则)
MATCH MATCH,策略 兜底规则,匹配所有未命中的请求(必须放最后)

规则匹配优先级

从上到下依次匹配,命中即停止。 越精确的规则(如 DOMAIN)放越前面,越宽泛的规则(如 GEOIP)放后面,MATCH 必须放最后一行。
DOMAIN 精确域名最高
DOMAIN-SUFFIX 域名后缀
DOMAIN-KEYWORD 域名关键词
IP-CIDR / GEOIP IP 地址规则
MATCH 兜底(放最后)必须最后

常用规则写法示例

config.yaml — 规则示例
rules:
  # ===== 广告与恶意域名拦截 =====
  - DOMAIN-KEYWORD,adservice,REJECT
  - DOMAIN-SUFFIX,doubleclick.net,REJECT
  - DOMAIN-SUFFIX,googlesyndication.com,REJECT

  # ===== 开发者工具走代理(精确匹配优先) =====
  - DOMAIN-SUFFIX,github.com,🚀 节点选择
  - DOMAIN-SUFFIX,githubusercontent.com,🚀 节点选择
  - DOMAIN-SUFFIX,npmjs.com,🚀 节点选择
  - DOMAIN-SUFFIX,docker.io,🚀 节点选择
  - DOMAIN-SUFFIX,docker.com,🚀 节点选择

  # ===== 按进程名规则(仅桌面端支持) =====
  - PROCESS-NAME,steam.exe,🚀 节点选择
  - PROCESS-NAME,git,🚀 节点选择

  # ===== 私有地址直连 =====
  - IP-CIDR,127.0.0.0/8,DIRECT
  - IP-CIDR,172.16.0.0/12,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT

  # ===== 中国大陆 IP 直连 =====
  - GEOIP,CN,DIRECT

  # ===== 兜底规则(未匹配的全部走代理) =====
  - MATCH,🚀 节点选择
规则列表越长,Clash 匹配每条请求的耗时越多。推荐使用 RULE-SET(规则集)引入外部规则文件,将成百上千条规则外置,保持 config.yaml 简洁。

完整 config.yaml 示例

以下是一份结构完整、注释详尽的 Clash 配置文件,包含三种协议节点、四种代理组类型和完整的规则分流,可直接复制后按需修改:

完整 config.yaml(含注释)
# ============================================================
#   Clash config.yaml 完整示例
# ============================================================

# --- 基础配置 ---
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
external-controller: 127.0.0.1:9090
secret: ""

# --- DNS 配置 ---
dns:
  enable: true
  listen: 0.0.0.0:53
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - '*.lan'
    - '*.local'
    - localhost.ptlogin2.qq.com
    - +.stun.*.*
    - time.*.com
    - ntp.*.com
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - tls://8.8.8.8:853
    - tls://1.1.1.1:853
  fallback-filter:
    geoip: true
    geoip-code: CN

# --- 代理节点 ---
proxies:
  - name: "🇭🇰 香港-SS"
    type: ss
    server: hk.example.com
    port: 443
    cipher: aes-256-gcm
    password: "your-ss-password"
    udp: true

  - name: "🇺🇸 美国-VMess"
    type: vmess
    server: us.example.com
    port: 443
    uuid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    alterId: 0
    cipher: auto
    network: ws
    tls: true
    servername: us.example.com
    ws-opts:
      path: /vmess
      headers:
        Host: us.example.com

  - name: "🇯🇵 日本-Trojan"
    type: trojan
    server: jp.example.com
    port: 443
    password: "your-trojan-password"
    sni: jp.example.com
    udp: true

# --- 代理组 ---
proxy-groups:
  - name: "🚀 节点选择"
    type: select
    proxies:
      - "⚡ 自动选择"
      - "🛡️ 故障转移"
      - "🇭🇰 香港-SS"
      - "🇺🇸 美国-VMess"
      - "🇯🇵 日本-Trojan"
      - DIRECT

  - name: "⚡ 自动选择"
    type: url-test
    proxies:
      - "🇭🇰 香港-SS"
      - "🇺🇸 美国-VMess"
      - "🇯🇵 日本-Trojan"
    url: 'http://www.gstatic.com/generate_204'
    interval: 300
    tolerance: 50

  - name: "🛡️ 故障转移"
    type: fallback
    proxies:
      - "🇭🇰 香港-SS"
      - "🇯🇵 日本-Trojan"
      - "🇺🇸 美国-VMess"
    url: 'http://www.gstatic.com/generate_204'
    interval: 60

  - name: "🎬 流媒体"
    type: select
    proxies:
      - "🇺🇸 美国-VMess"
      - "🇯🇵 日本-Trojan"
      - "🚀 节点选择"

# --- 规则 ---
rules:
  # 广告拦截
  - DOMAIN-KEYWORD,adservice,REJECT
  - DOMAIN-SUFFIX,doubleclick.net,REJECT

  # 流媒体
  - DOMAIN-SUFFIX,netflix.com,🎬 流媒体
  - DOMAIN-SUFFIX,nflxso.net,🎬 流媒体
  - DOMAIN-SUFFIX,disneyplus.com,🎬 流媒体
  - DOMAIN-SUFFIX,spotify.com,🎬 流媒体

  # 开发者工具
  - DOMAIN-SUFFIX,github.com,🚀 节点选择
  - DOMAIN-SUFFIX,githubusercontent.com,🚀 节点选择
  - DOMAIN-SUFFIX,npmjs.com,🚀 节点选择
  - DOMAIN-SUFFIX,docker.io,🚀 节点选择

  # 私有地址直连
  - IP-CIDR,127.0.0.0/8,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT

  # 中国大陆直连
  - GEOIP,CN,DIRECT

  # 兜底:其余走代理
  - MATCH,🚀 节点选择

配置完成了?去下载客户端使用吧

将配置文件导入 Clash 客户端,或通过「订阅」功能直接使用机场提供的托管配置。