Clash 配置

通过 YAML 设置代理端口、DNS、TUN、策略组与分流规则,并在 Clash Verge 中管理订阅和配置增强。以下示例基于 Mihomo,用于说明字段关系;应用前需补充可用节点,并核对内核版本与本机网络环境。

  • 代理内核Mihomo
  • 配置格式YAML · UTF-8
  • 缩进约定两个空格,避免使用 Tab

基础配置结构

Clash 配置通常包含监听端口、运行模式、节点、代理组与规则。Clash Verge Rev 使用 Mihomo 解析配置,客户端部分设置还可能覆盖对应字段。下面展示配置层级,节点列表为空,不能作为现成代理线路使用。

config.yaml
# 端口数值为示例,需与客户端和应用设置一致
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 配置片段
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 配置片段
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 配置片段
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 配置片段
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 配置片段
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 与配置缓存;客户端管理的端口等字段,还需核对最终生效值。

Merge 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

检查最终配置 配置增强的入口、作用范围与处理顺序可能随版本变化。 对数组、规则和同名字段的处理,不应默认等同于简单追加。 应用后检查生成配置,确认原有 DNS 上游、规则与代理组是否仍被保留; store-selected 和 store-fake-ip 用于相关状态缓存,不能替代配置备份。

Script 脚本增强

需要按条件筛选节点或生成策略组时,可通过 JavaScript 处理配置对象。下面展示 main 函数、节点筛选和规则插入的关系;使用前需核对已有组名与节点引用,避免重复组名或删除仍被引用的节点。

Script 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.proxies 中的节点,不覆盖所有代理集合使用方式。 新建的组需被规则或其他组引用,才能参与连接处理。 删除节点后还需同步检查原有组的引用;已有 HK、JP 或 US 组时,应先处理名称冲突。 完成修改后需返回配置对象,并检查脚本执行结果与内核校验信息。

配置与连接排查

先区分 YAML 解析失败、内核启动失败与连接异常,再按日志检查具体字段。配置能够加载,不代表节点、DNS 和路由都能正常工作;每次只调整相关设置,便于对照结果。

现象 可能原因 检查方法
配置导入时报错 YAML 缩进、字段类型、订阅返回内容或配置引用异常 查看报错行与上下文,确认返回内容为配置文件,再检查缩进、同名键与引用名称
内核提示端口被占用 代理、DNS 或控制接口与现有进程使用相同监听地址 按日志定位具体端口,检查占用进程;修改后同步核对客户端及应用设置
分流规则未按预期生效 未使用 Rule 模式、命中更早规则,或目标流量未进入内核 检查最终配置、当前模式与新连接记录,确认命中规则,再调整顺序或接入方式
规则集加载失败 下载失败、格式不符、缓存路径不可写或内容类型不匹配 检查日志、实际响应内容、format 与 behavior,并确认内核运行环境能访问规则源
节点测试正常但网页无法打开 目标连接的规则、DNS、节点出口或应用代理设置异常 查看目标请求是否进入内核,检查命中策略、解析结果与报错,避免仅凭延迟测试判断
节点测试全部超时 本地网络、节点域名解析、测试目标或节点服务异常 分别检查网络与测试地址可达性、节点解析和日志,再确认节点服务是否有效
策略组出现错误候选项 名称筛选过宽,或提示性条目被纳入候选范围 检查实际成员与正则匹配结果,调整 filter、exclude-filter 或脚本,并核对保留节点
订阅更新后修改消失 直接修改了订阅生成文件,或增强未应用到目标配置 将长期设置单独维护在配置增强中,检查作用范围、处理顺序与最终生效配置

验证配置与代理连接

保存配置后,确认内核加载成功,再用目标应用建立新连接,检查命中规则与实际出口。Clash Verge 管理配置,具体字段行为仍需结合 Mihomo 版本和运行日志确认。

Clash 配置 - DNS、TUN 与分流规则