config.yaml 結構總覽

一份完整的配置檔案由幾個頂層欄位組成,理解這張表之後,後面每一節展開的都是其中某一個欄位的詳細寫法:

欄位作用
port / socks-port本地 HTTP / SOCKS5 代理埠
allow-lan是否允許區域網裝置連線本機代理
mode執行模式:rule(按規則分流)、global(全域性代理)、direct(全域性直連)
log-level日誌詳細程度:silent / error / warning / info / debug
external-controllerRESTful API 監聽地址,配合面板類使用者端使用
dnsDNS 分流與防外洩相關配置
proxies本地手寫的節點列表(訂閱節點不需要寫在這裡)
proxy-groups策略組定義
proxy-providers遠端節點提供者(訂閱連結的底層機制)
rule-providers遠端規則集提供者
rules最終生效的分流規則列表,從上到下逐條匹配
提示: 訂閱連結本質上就是使用者端按固定週期請求這份 config.yaml(或其中的 proxies/rules 片段)併合併到本地配置,理解了這份結構,手動排查訂閱問題會容易很多。

代理協議引數詳解

如果需要手動新增節點(而不是完全依賴訂閱),下面是幾種主流協議在 proxies 欄位下的核心引數:

Shadowsocks

核心欄位是 cipher(加密方式,如 aes-256-gcmchacha20-ietf-poly1305)與 password;部分節點還會附帶 plugin(如 obfsv2ray-plugin)用於流量混淆。

VMess

需要 uuidalterId(新版通常為 0),cipher 常見為 auto;若節點開啟了 TLS,還需要填寫 tlsservername(即 SNI)等欄位。

Trojan

核心欄位是 passwordsni,Trojan 預設強制使用 TLS 偽裝為正常 HTTPS 流量,因此 sni 是否與證書域名匹配會直接影響可用性。

Hysteria2

基於 QUIC 協議,核心欄位是 passwordup / down(上傳/下載頻寬提示值),在弱網或高延遲線路上通常比傳統 TCP 協議更穩定。

WireGuard

欄位風格與前面幾種不同:需要 private-key、對端 public-key,以及 ip(本機在 WireGuard 內網中的地址),配置較為底層,一般由節點提供方直接給出完整片段。

點開檢視幾種協議的欄位示例
proxies:
  - name: "ss-node"
    type: ss
    server: example.com
    port: 443
    cipher: aes-256-gcm
    password: "your-password"

  - name: "trojan-node"
    type: trojan
    server: example.com
    port: 443
    password: "your-password"
    sni: example.com

  - name: "hy2-node"
    type: hysteria2
    server: example.com
    port: 443
    password: "your-password"
    up: "50 Mbps"
    down: "200 Mbps"

規則語法完全參考

規則格式統一為 規則型別,匹配內容,目標策略,從上到下逐條匹配、命中即停。下面是常用規則型別的完整列表:

規則型別匹配物件示例
DOMAIN完全匹配的域名DOMAIN,ad.example.com,REJECT
DOMAIN-SUFFIX域名字尾DOMAIN-SUFFIX,google.com,PROXY
DOMAIN-KEYWORD域名中包含的關鍵字DOMAIN-KEYWORD,youtube,PROXY
DOMAIN-REGEX正則表示式匹配域名DOMAIN-REGEX,^ad\d+\.com$,REJECT
GEOIPIP 歸屬地(配合 GeoIP 資料庫)GEOIP,CN,DIRECT
IP-CIDR / IP-CIDR6IPv4 / IPv6 地址段IP-CIDR,192.168.0.0/16,DIRECT
SRC-IP-CIDR發起請求的本機源 IP 段SRC-IP-CIDR,192.168.1.100/32,DIRECT
SRC-PORT / DST-PORT源埠 / 目標埠DST-PORT,22,DIRECT
PROCESS-NAME發起請求的程序名(分應用代理的底層機制)PROCESS-NAME,com.app.id,PROXY
RULE-SET引用一個 Rule Provider 規則集RULE-SET,reject,REJECT
MATCH兜底規則,匹配所有未命中的流量MATCH,PROXY
提示: 規則越具體、越常訪問就應該放得越靠前,把耗時的 DOMAIN-REGEX 或大型 RULE-SET 放在明顯不會命中的位置之前,會拖慢每一次請求的匹配速度。

Provider 機制:Proxy Provider 與 Rule Provider

Provider 是 Clash 管理「遠端、可自動更新」資源的統一機制——訂閱連結背後其實就是一個 Proxy Provider,規則集背後就是一個 Rule Provider,兩者都支援定期自動拉取更新,無需手動替換檔案。

proxy-providers:
  my-sub:
    type: http
    url: "https://example.com/api/v1/subscribe?token=xxx"
    interval: 3600
    health-check:
      enable: true
      url: http://www.gstatic.com/generate_204
      interval: 300

rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://example.com/rules/reject.txt"
    path: ./rules/reject.txt
    interval: 86400

其中 interval 控制自動更新週期(單位秒),health-check 讓使用者端定期對 Provider 下的節點批次測速,behavior 則告訴使用者端規則集裡的內容是域名列表(domain)、IP 段(ipcidr)還是完整規則(classical)。

策略組高階引數

除了基礎的 typeproxies,策略組還有幾個值得了解的進階引數:

  • lazy —— 為 url-test / fallback 組開啟後,只有在實際被使用時才後臺測速,減少空閒時的資源佔用;
  • tolerance —— 延遲容差(毫秒),新節點延遲只有比當前節點低於這個值才會觸發切換,避免因測速抖動頻繁切換節點;
  • strategy(僅 load-balance 組)—— 負載均衡策略,常見為 consistent-hashing(同一目標地址固定走同一節點,適合需要會話保持的場景)或 round-robin(依次輪詢);
  • disable-udp —— 停用該策略組下節點的 UDP 轉發,部分節點或線路對 UDP 支援不佳時可以關閉。

DNS 高階配置

DNS 配置除了開關防外洩,還可以精細控制解析行為:

dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query
  nameserver-policy:
    "geosite:cn": [223.5.5.5, 119.29.29.29]
  fallback-filter:
    geoip: true
    geoip-code: CN

enhanced-mode: fake-ip 是最常見的模式,使用者端給每個域名分配一個虛擬 IP 再在代理層還原真實域名,相容性最好;nameserver-policy 可以按域名歸屬分別指定用哪組 DNS 解析,fallback-filter 則用來判斷某次解析結果是否「像是」被汙染,從而決定要不要改用 fallback 列表重新查詢。

TUN 模式引數詳解

TUN 模式的核心引數如下:

tun:
  enable: true
  stack: system
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

stack 決定虛擬網絡卡的實現方式,system 相容性最好,gvisor/mixed 在部分場景下效能更好;auto-route 開啟後用戶端會自動接管系統路由表,auto-detect-interface 讓使用者端自動識別當前使用的物理網絡卡,避免手動指定;dns-hijack 用於強制接管走 UDP 53 埠的 DNS 請求,防止應用繞過系統 DNS 設定直接查詢。

外部控制與 RESTful API

設定 external-controller 後,Clash 會在指定地址上開放一套 RESTful API,配合儀表盤類使用者端可以即時檢視連線、切換節點、查詢延遲等,而不需要重啟使用者端。

external-controller: 127.0.0.1:9090
secret: "your-strong-secret"
安全提示: 務必設定 secret 並保證 external-controller 只監聽本機地址(127.0.0.1),如果繫結到 0.0.0.0 又沒有設定金鑰,相當於把代理控制權限暴露給整個網路。

效能與安全建議

  • 優先使用 RULE-SET 引用規則集,而不是把成百上千條 DOMAIN-SUFFIX 平鋪在 rules 裡,前者匹配效率更高、維護也更方便;
  • 把訪問頻率最高、最明確的規則放在 rules 列表靠前的位置,減少平均匹配次數;
  • 非必要不要把 log-level 設為 debug 長期執行,詳細日誌會持續佔用磁碟和記憶體;
  • external-controller 一律設定 secret,多裝置/多平臺之間不要複用同一個金鑰;
  • 策略組的測速間隔不宜過短,幾十秒到幾分鐘一次足夠及時發現節點異常,過於頻繁反而增加節點側壓力和本機資源佔用;
  • 自定義覆寫的規則和策略組建議單獨存放備份,訂閱更新或重灌使用者端後可以快速找回。

常見問題

為什麼改了配置檔案不生效?

大多數使用者端需要手動點選「重新載入配置」或重啟使用者端才會應用改動;如果是透過訂閱管理的配置,直接編輯本地檔案可能會在下次自動更新時被覆蓋,建議改用覆寫功能。

RULE-SET 和直接寫規則有什麼區別?

效果上是一樣的,區別在於維護方式:RULE-SET 是一份可以遠端更新的獨立檔案,規則內容變化時不需要重新匯入整份配置;直接寫在 rules 裡的規則修改後必須手動改動配置檔案本身。

fake-ip 和 redir-host 模式該怎麼選?

fake-ip 相容性和速度都更好,是目前的主流選擇;redir-host 透過修改 DNS 返回結果實現,某些依賴真實 IP 做校驗的應用可能會異常,僅在 fake-ip 模式下遇到明確相容性問題時再考慮切換。

external-controller 埠被佔用怎麼辦?

修改 external-controller 裡的埠號為其他未被佔用的埠即可,常見預設埠是 9090;也可以用系統命令檢視該埠被哪個程序佔用後再決定是否關閉。

策略組一直測速失敗怎麼排查?

先確認測速地址(url 欄位)本身能否被節點訪問到,部分測速地址在特定網路環境下會被攔截;也可以換用其他公開的連通性測試地址,或檢查節點本身是否已經失效。

可以同時使用多個 Rule Provider 嗎?

可以,rule-providers 支援定義任意多個規則集,在 rules 列表裡按需透過 RULE-SET 名稱分別引用即可,順序仍然遵循從上到下逐條匹配的規則。

還沒看過基礎用法?可以先從新手教程瞭解訂閱匯入、策略組、規則分流這些基本概念。