Clash 設定檔結構逐段解析:port、proxies 到 rules 全欄位讀懂
拿到一份 config.yaml 卻不敢改?本文按載入順序逐段拆解通用欄位、代理清單、策略組與規則段的語法與常見寫法,改設定前先看這一篇。
設定檔載入順序與整體結構
Clash 與 Clash Meta(核心代號 mihomo)讀取的都是一份 YAML 格式的文字檔,常見檔名為 config.yaml。用戶端啟動或切換訂閱時,會把整份檔案一次性解析成記憶體裡的物件,再按段落名逐一生效,不存在「邊讀邊生效」的順序依賴,但閱讀和排查問題時按下面的順序理解最省力:
- 通用欄位:埠口、執行模式、日誌等級、外部控制器等,決定用戶端本身怎麼跑起來。
dns段:網域解析行為,影響後續規則比對用的是網域名稱還是解析出的 IP。proxies段:節點清單,每一條描述一個可用的代理伺服器。proxy-groups段:把節點清單組織成策略組,決定「選哪個節點」這件事怎麼呈現給使用者。rules段:流量比對規則,決定「這條連線走哪個策略組」。
訂閱連結下發的設定檔本質也是同一套欄位,只是由訂閱方的後台生成。手動改設定前建議先備份原檔案,改錯欄位輕則用戶端拒絕載入,重則規則失效導致流量全部直連或全部走同一個節點。
YAML 對縮排極度敏感,統一使用兩個空格縮排、不要混用 Tab,冒號後必須留一個空格,清單項用短橫線加空格開頭,這幾條不遵守是新手改壞設定檔的頭號原因。
通用欄位:port、mode、log-level 與外部控制
檔案最上方通常是一批不需要縮排的頂層欄位,控制用戶端自身的執行方式:
port: 7890
socks-port: 7891
redir-port: 7892
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
secret: ""
port/socks-port:分別開放 HTTP 代理埠口和 SOCKS5 代理埠口,系統或瀏覽器按需選一個設定。mixed-port:一個埠口同時接受 HTTP 與 SOCKS5 請求,現在的用戶端介面大多預設只暴露這一個埠口,簡化系統代理設定。allow-lan:是否允許區域網路內其他裝置透過本機代理,手機接區域網路共享上網時要打開。mode:核心工作模式,rule表示按rules段比對分流,global表示所有流量走同一個策略組,direct表示全部直連不經代理。log-level:日誌詳細程度,排查問題時可暫時改成debug,日常使用建議留info或warning,避免日誌檔案迅速變大。external-controller:開啟 RESTful API 的監聽位址,配合secret金鑰,用戶端圖形介面和第三方面板都依賴這個介面讀取狀態、切換節點。
這些欄位大多有預設值,圖形介面一般會用介面開關覆蓋 YAML 裡的寫法,但訂閱連結生成的設定檔仍以 YAML 欄位為準,衝突時以用戶端實際載入結果為判斷標準。
proxies 段:每一個節點怎麼描述
proxies 是一個清單,清單裡每一項對應一個可用節點,欄位隨協定類型不同而不同,但公共欄位是一致的:
proxies:
- name: "HK-01"
type: ss
server: 1.2.3.4
port: 8443
cipher: aes-256-gcm
password: "your-password"
udp: true
- name: "SG-Trojan"
type: trojan
server: example.com
port: 443
password: "your-password"
sni: example.com
skip-cert-verify: false
常見公共欄位說明:
name:節點顯示名稱,策略組裡靠這個名字引用節點,重名會導致引用歧義,建議保持唯一。type:協定類型,常見有ss(Shadowsocks)、ssr、vmess、trojan、hysteria2等,不同協定要求的專屬欄位不同。server/port:節點的伺服器位址與埠口,直接影響連線目標。udp:是否允許該節點轉送 UDP 流量,遊戲和部分即時應用依賴 UDP,關閉後這類流量會失敗或被迫直連。skip-cert-verify:是否跳過 TLS 憑證驗證,自簽憑證場景才需要打開,正常節點保持關閉更安全。
手寫節點時最容易出錯的是密碼裡包含冒號或特殊符號卻沒有用引號包裹,YAML 解析器會把冒號當成新的鍵值分隔符,建議密碼統一加雙引號。
proxy-groups 段:策略組語法與常見類型
proxy-groups 把 proxies 裡的節點組織成可供規則引用的組,常見類型如下:
proxy-groups:
- name: "自動選擇"
type: url-test
proxies:
- HK-01
- SG-Trojan
url: "http://www.gstatic.com/generate_204"
interval: 300
- name: "手動切換"
type: select
proxies:
- 自動選擇
- HK-01
- SG-Trojan
- DIRECT
- name: "故障轉移"
type: fallback
proxies:
- HK-01
- SG-Trojan
url: "http://www.gstatic.com/generate_204"
interval: 300
select:手動切換組,介面上呈現一個下拉清單,使用者點哪個就用哪個,適合放在最外層給使用者兜底。url-test:自動測速組,按interval秒的間隔對組內節點探測一次,自動選延遲最低的節點使用。fallback:故障轉移組,按清單順序嘗試,第一個能連通的節點優先使用,前一個失效才輪到下一個。load-balance:負載平衡組,按策略把連線分散到多個節點,適合節點數量多且效能相近的場景。
策略組的 proxies 清單裡除了節點名,還可以填其他策略組的名字,也可以填 DIRECT 或 REJECT 這兩個內建策略,分別表示直連和拒絕連線。組與組之間可以互相嵌套引用,但不能出現循環引用,否則用戶端載入時會報錯。
rules 段:比對語法與優先順序
rules 是一個從上到下順序比對的清單,命中第一條規則就立即生效,不再繼續往下比對,所以規則順序本身就是優先順序:
rules:
- DOMAIN-SUFFIX,openai.com,自動選擇
- DOMAIN-KEYWORD,google,自動選擇
- DOMAIN,ads.example.com,REJECT
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,自動選擇
常見規則類型:
DOMAIN/DOMAIN-SUFFIX/DOMAIN-KEYWORD:按完整網域名稱、網域後綴或關鍵字比對,後綴比對最常用,涵蓋子網域場景。IP-CIDR/IP-CIDR6:按 IP 段比對,常配合no-resolve參數跳過 DNS 解析,直接對連線目標的字面 IP 判斷。GEOIP:按 IP 所屬國家或地區比對,GEOIP,CN,DIRECT是中國大陸直連常見寫法。PROCESS-NAME:按發起連線的行程名稱比對,桌面端做按應用分流常用這條。MATCH:兜底規則,放在清單最後,前面所有規則都沒命中的流量走這一條,幾乎每份設定檔都需要一條MATCH收尾,否則未命中流量的走向會不明確。
規則裡引用的策略組名必須與 proxy-groups 裡的 name 完全一致,大小寫、空格都要對上,否則用戶端載入時通常會報「引用了未定義的策略」之類的錯誤並拒絕啟用整份設定。
DNS 解析行為會影響 IP 類規則是否生效:如果開啟了 fake-ip 模式,連線目標在規則比對階段拿到的是虛擬 IP,這時 IP-CIDR 類規則容易不按預期工作,通常需要針對特定網域把 DNS 模式切成真實解析,具體判斷邏輯本站另有 DNS 相關文章詳細說明。
常見錯誤與排查思路
手動改設定檔後用戶端不生效或直接報錯,可以按下面幾個方向排查:
- 先用任意線上 YAML 校驗工具或文字編輯器的語法高亮檢查縮排和冒號空格,大多數「載入失敗」是格式問題而非邏輯問題。
- 確認
proxy-groups裡引用的節點名和proxies裡的name完全對應,複製貼上時最容易出現多餘空格或全形字元。 - 確認
rules裡引用的策略組名在proxy-groups裡存在,新增規則時順手把策略組名抄錯是高頻問題。 - 把
log-level暫時改成debug,重啟用戶端觀察日誌輸出,連線失敗的具體報錯通常會指向哪一段設定出了問題。 - 懷疑是訂閱方生成的設定本身有問題時,可以在用戶端裡查看原始訂閱內容,和自己理解的欄位逐一核對,而不是直接懷疑用戶端本身。
理解了這五段結構和載入順序後,後續遇到訂閱商提供的複雜設定檔、或者想手動加一條自訂分流規則,基本都能照著對應段落的語法直接改,不用整份檔案推倒重寫。