1. 首頁
  2. 部落格
  3. Clash 設定檔詳解:YAML 各欄位從 port 到 rules 逐段解析

Clash 設定檔詳解:YAML 各欄位從 port 到 rules 逐段解析

逐段拆解 Clash 設定檔的 YAML 結構:混合埠、代理群組、規則、DNS 各欄位的意義與寫法,配合範例看懂每一行設定的作用。

設定檔的本質:一份 YAML 文字檔

Clash 與 mihomo(Clash Meta)核心的所有行為,都由一份 YAML 格式的設定檔決定。訂閱連結下載到本機的檔案,本質上就是服務端事先寫好的一份 YAML;用戶端介面上的模式切換、節點選擇,最終也都落在這份檔案的欄位上。看懂結構之後,換埠、加規則、調 DNS,都只是找到對應段落改幾行的事。

YAML 語法只需記住三點:縮排只用空格、禁用 Tab,層級通常縮排兩格;鍵與值以英文冒號分隔,冒號後面必須跟一個空格;短橫線開頭的是清單項目,# 之後的內容是註解。整份設定由若干頂層欄位組成,常見欄位與職責如下。

頂層欄位作用
mixed-port混合代理埠,HTTP 與 SOCKS5 請求共用
allow-lan是否允許區域網路內其他裝置連入
mode運作模式:rule 規則 / global 全域 / direct 直連
log-level日誌輸出的詳細程度
external-controller核心 API 監聽位址,網頁面板由此通訊
dns內建 DNS 解析設定
proxies代理節點清單
proxy-groups代理群組,用戶端介面上切換的對象
rules分流規則,由上而下逐條比對
tunTUN 虛擬網卡模式(僅 mihomo)

其中 proxies、proxy-groups、rules 三段決定流量怎麼走,是本文重點;dns 段決定網域如何解析;其餘欄位控制連接埠與執行行為。以下逐段展開說明。

連接埠與全域欄位:mixed-port 到 external-controller

mixed-port: 7890
allow-lan: false
bind-address: "*"
mode: rule
log-level: info
external-controller: 127.0.0.1:9090

mixed-port 是混合連接埠,HTTP 與 SOCKS5 請求都從這裡進入核心,絕大多數用戶端與訂閱預設使用 7890。舊設定裡分開寫的 port(HTTP 專用)與 socks-port 仍然有效,新設定保留一個 mixed-port 即可。

  • allow-lan:設為 true 後,同一區域網路的手機、平板可以把本機當作代理閘道;bind-address 控制監聽哪個網卡。公共網路環境下保持 false。
  • mode:rule 依 rules 段分流;global 所有流量走選定代理群組;direct 全部直連。用戶端介面上的模式切換,改的就是這一項。
  • log-level:日常用 info 就足夠;排查連線問題時可暫時調成 debug;silent 則完全不輸出。
  • external-controller:核心的 RESTful API 監聽位址,metacubexd、yacd 等網頁面板透過它讀取狀態、切換節點;另起一行寫 secret 可以設定存取密鑰,避免連接埠暴露後被任意操控。

mihomo 設定裡還常見 unified-delaytcp-concurrentfind-process-mode 等擴充欄位,這些是 Meta 核心專屬;原版 Clash 讀到不認識的鍵會直接報錯,混用核心時需要留意。

dns 段:網域怎麼解析

dns:
  enable: true
  listen: 0.0.0.0:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
  fallback:
    - tls://1.1.1.1
    - https://dns.google/dns-query
  fake-ip-filter:
    - "*.lan"
    - "*.local"

enable 是總開關,使用 TUN 模式時必須開啟;listen 是內建 DNS 服務的監聽位址,系統把網域查詢送到這裡,再由核心依設定轉送給上游。

  • enhanced-mode:fake-ip 模式下核心先回傳一個假 IP,等連線建立後再依網域分流,速度快、判斷準;redir-host 是舊模式,新核心已逐步淘汰,保持 fake-ip 即可。
  • fake-ip-range:假 IP 位址池,預設 198.18.0.1/16,一般不需要更動。
  • nameserver:預設上游解析器,支援三種寫法——純 IP 走 UDP,tls:// 開頭走 DoT,https:// 開頭走 DoH。
  • fallback:解析海外網域的上游,屬舊版寫法;mihomo 更推薦 nameserver-policy,可以依網域後綴分組指定不同上游。
  • fake-ip-filter:清單內的網域不回傳假 IP,區域網路主機名稱、部分掃碼登入網域常放在這裡。

何時生效

dns 段只在核心接管流量時才會作用。純系統代理模式下,瀏覽器自行解析網域,dns 段不會參與;TUN 模式下所有查詢都經過核心,這一段的設定才真正生效。

proxies 段:每個短橫線就是一個節點

proxies:
  - name: "香港 01"
    type: ss
    server: hk1.example.com
    port: 8388
    cipher: aes-128-gcm
    password: "example-password"
    udp: true
  - name: "日本 01"
    type: vmess
    server: jp1.example.com
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    alterId: 0
    cipher: auto
    tls: true
    network: ws

proxies 是節點清單,每個短橫線項目代表一個節點。name 是顯示名稱,type 是協定,serverport 是伺服器位址,其餘欄位由協定決定:ss 需要 cipher 與 password;vmess 需要 uuid、alterId 與 cipher;vless 需要 uuid;trojan 需要 password 與 sni;hysteria2 需要 password。udp: true 表示允許轉送 UDP 流量。

mihomo 支援的協定比原版 Clash 多:原版有 ss、ssr、vmess、trojan、snell 等,Meta 核心新增了 vless、hysteria、hysteria2、tuic 等。這一段幾乎總是由訂閱自動產生,手動修改前先確認一件事:下次更新訂閱時,手動改的內容會被覆蓋。

proxy-groups 段:介面上切換的對象

proxy-groups:
  - name: "自動選擇"
    type: url-test
    proxies:
      - "香港 01"
      - "日本 01"
    url: "http://www.gstatic.com/generate_204"
    interval: 300
    tolerance: 50
  - name: "手動選擇"
    type: select
    proxies:
      - "自動選擇"
      - "香港 01"
      - "日本 01"
      - DIRECT

用戶端介面上點選的從來不是單一節點,而是代理群組。type 有四種:select 手動選擇;url-test 依延遲自動選最快;fallback 依可用性依序切換;load-balance 在多個節點之間分攤連線。

  • url:延遲測試的目標位址,常用 http://www.gstatic.com/generate_204。
  • interval:自動測速間隔,單位秒,300 即每五分鐘測一次。
  • tolerance:容差,單位毫秒;新測出的節點延遲要比目前節點低出這個數值才會切換,避免來回跳動。

群組的 proxies 清單裡既可以寫節點名稱,也可以寫另一個群組名稱,形成「手動選擇 → 自動選擇 → 若干節點」的巢狀結構;還可以寫 DIRECT 與 REJECT 兩個內建策略。規則段引用的是群組名稱,節點隨訂閱更新替換,群組結構保持不變。

rules 段:由上而下,命中即停

rules:
  - DOMAIN-SUFFIX,ads.example.com,REJECT
  - DOMAIN-KEYWORD,bilibili,DIRECT
  - GEOSITE,cn,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,手動選擇

規則由上到下逐條比對,命中即停止,順序就是優先度;寫在最後的 MATCH 是兜底條款,接住所有沒被前面規則命中的流量。每條規則是三段結構:類型、比對值、策略目標。策略目標可以是代理群組名稱、節點名稱,也可以是 DIRECT(直連)或 REJECT(拒絕)。

規則類型比對對象範例
DOMAIN完整網域DOMAIN,www.example.com,PROXY
DOMAIN-SUFFIX網域後綴DOMAIN-SUFFIX,google.com,PROXY
DOMAIN-KEYWORD網域關鍵字DOMAIN-KEYWORD,bilibili,DIRECT
GEOSITE網域分類庫(僅 mihomo)GEOSITE,cn,DIRECT
IP-CIDR目標 IP 範圍IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
GEOIPIP 所屬地區GEOIP,CN,DIRECT
DST-PORT目標連接埠DST-PORT,443,PROXY
PROCESS-NAME處理程序名稱PROCESS-NAME,telegram.exe,PROXY
MATCH兜底,比對全部MATCH,PROXY

有兩點容易出錯。其一,IP-CIDR 與 GEOIP 這類依 IP 判斷的規則,對網域請求會先觸發一次 DNS 解析;加上 no-resolve 參數可以避免提前解析,把判斷留給後面的網域規則。其二,GEOSITE 只有 mihomo 支援,依賴 geosite 資料檔,原版 Clash 讀到會直接報錯;GEOIP 則兩種核心都支援,資料檔格式依核心不同。

修改後如何生效與常見報錯

桌面用戶端改完設定後,在設定頁面點重新載入即可,mihomo 支援熱重載,不必重新啟動程式;以命令列執行的 mihomo 可以透過 API 提交新設定完成更新。

YAML 報錯高發區

縮排裡混入了 Tab;冒號打成中文全形「:」;冒號後面漏了空格;清單項目縮排與上一項不齊;節點名稱裡帶冒號或特殊符號卻沒加引號。用戶端啟動失敗並提示「yaml: line xx」時,依行號回去檢查這幾項,絕大多數問題都出在這裡。

另外兩類常見問題:一是連接埠衝突,7890 被其他程式占用時核心會啟動失敗,換掉 mixed-port 或結束占用的程式;二是改了 rules 卻不生效,多半是前面有更寬鬆的規則先命中,把 log-level 調成 debug,日誌裡的規則比對記錄會顯示每筆流量實際命中了哪一條。

設定檔的結構就這幾段:連接埠欄位決定入口,dns 決定解析,proxies 是節點清單,proxy-groups 是選擇開關,rules 是調度表。照這個順序讀一遍自己的訂閱設定,每一行都能對上號。

下載 Clash 用戶端

全平台用戶端與核心依平台整理,版本號逐條列明。

下載Clash