Clash Verge 配置教程

从 Clash 基础 YAML 配置开始,逐步理解端口、DNS、TUN、策略组、规则与 rule-providers, 再使用 Clash Verge 的扩展配置与扩展脚本管理订阅上的个人定制。

  • 配置体系Clash / Mihomo
  • 格式YAML · UTF-8 无 BOM
  • 缩进两个空格,不要用 Tab

Clash 基础配置

Clash 配置以 YAML 为基础,通常由端口、运行模式、日志、外部控制、代理节点、策略组和规则组成。 下面的示例用于理解配置层级,节点可由订阅提供或自行写入。

config.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 片段
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 片段
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 片段
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 片段
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 片段
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
# 扩展配置使用 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 函数读取并修改配置对象,然后返回处理后的配置。

扩展脚本 JavaScript
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 里维护

完成 Clash Verge 配置后开始使用

Clash Verge 负责配置管理与桌面操作,底层 Clash/Mihomo 参数仍以对应官方文档为准。完成配置后可下载客户端导入配置,遇到问题再结合日志与社区讨论排查。