設定檔的本質:一份 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 | 分流規則,由上而下逐條比對 |
| tun | TUN 虛擬網卡模式(僅 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-delay、tcp-concurrent、find-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 是協定,server 與 port 是伺服器位址,其餘欄位由協定決定: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 |
| GEOIP | IP 所屬地區 | 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 是調度表。照這個順序讀一遍自己的訂閱設定,每一行都能對上號。