什麼是 Clash Meta 設定檔?為什麼要學習它?
Clash Meta(現已更名為 mihomo)是目前最主流的代理核心之一,被 ClashX、Clash Verge、Clash Nyanpasu 等眾多客戶端採用。它的核心功能——代理節點管理、DNS 解析、流量規則分流——全部透過一個 YAML 格式的設定檔來定義。
雖然大多數使用者可以透過匯入訂閱連結來自動取得設定,但理解設定檔的結構和原理能帶來明顯的好處:
- 精準分流:自訂規則,讓國內流量直連、海外流量走代理,避免不必要的繞路。
- 故障排查:遇到無法連線時,能快速定位是節點問題、DNS 問題還是規則設定錯誤。
- 效能最佳化:合理設定 DNS、啟用 TUN 模式可以顯著提升網路體驗。
- 安全可控:清楚每一項設定的含義,避免使用來路不明的設定導致隱私洩漏。
已經安裝了 ClashX 或 Clash Verge 等客戶端,想深入理解和自訂設定檔的使用者。無論你是剛接觸代理工具的新手,還是想最佳化現有設定的進階使用者,本教學都會幫到你。
設定檔基礎結構
一個完整的 Clash Meta 設定檔由多個頂層欄位組成。以下是最基本的骨架結構,每個欄位我們會逐一講解:
# Clash Meta (mihomo) 基礎設定
# 混合代理連接埠(HTTP + SOCKS5 共用一個連接埠)
mixed-port: 7890
# 允許區域網路裝置連線
allow-lan: true
# 綁定位址,* 表示所有網路介面
bind-address: '*'
# 執行模式:rule(規則)/ global(全域代理)/ direct(直連)
mode: rule
# 日誌級別:silent / error / warning / info / debug
log-level: info
# 外部控制器 API,用於儀表板或客戶端通訊
external-controller: 127.0.0.1:9090
# 外部控制器存取金鑰(選填但建議設定)
secret: "your-secret-here"
# 查詢處理程序名稱(用於基於處理程序的規則比對)
find-process-mode: strict
# GeoIP 資料檔格式
geodata-mode: true
geox-url:
geoip: "https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat"
geosite: "https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat"
mmdb: "https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb"
關鍵欄位說明
- mixed-port:最重要的連接埠設定。設為 7890 後,HTTP 代理和 SOCKS5 代理都透過這個連接埠接入。如果需要分開,可以分別使用
port(HTTP)和socks-port(SOCKS5)。 - allow-lan:設為
true後,同一區域網路下的其他裝置(如手機、平板)可以透過你的電腦作為代理閘道上網。 - mode:決定流量的全域行為。
rule是最常用的模式,讓 Clash 根據規則列表決定每個連線走代理還是直連。global讓所有流量走代理,direct讓所有流量直連。 - external-controller:提供 RESTful API,讓客戶端的儀表板(Dashboard)、yacd 等管理面板可以連線和控制 Clash。
- find-process-mode:啟用後可在規則中按處理程序名稱比對(如讓 Telegram 走特定節點),
strict模式最精確但稍微消耗更多資源。
DNS 設定詳解
DNS 設定是 Clash Meta 中最影響上網體驗的部分之一。錯誤的 DNS 設定可能導致解析緩慢、無法存取某些網站,甚至造成 DNS 洩漏。
dns:
enable: true
listen: 0.0.0.0:53
ipv6: false
# enhanced-mode 決定 DNS 的工作方式
# fake-ip:傳回虛擬 IP,加速首次連線(建議)
# redir-host:傳回真實 IP,相容性更好
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
# 排除不走 fake-ip 的網域
fake-ip-filter:
- '*.lan'
- '*.local'
- 'localhost.ptlogin2.qq.com'
- '+.stun.*.*'
- '+.stun.*.*.*'
- 'lens.l.google.com'
- 'stun.l.google.com'
# 預設 DNS 伺服器(用於解析國內網域)
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
- 223.5.5.5
- 119.29.29.29
# 備用 DNS(用於解析可能被污染的網域)
fallback:
- https://dns.cloudflare.com/dns-query
- https://dns.google/dns-query
- tls://8.8.4.4:853
# 備用過濾策略
fallback-filter:
geoip: true
geoip-code: CN
geosite:
- gfw
ipcidr:
- 240.0.0.0/4
domain:
- '+.google.com'
- '+.facebook.com'
- '+.youtube.com'
fake-ip vs redir-host
fake-ip 模式是目前的建議選擇。當應用程式請求 DNS 解析時,Clash 會立即傳回一個虛擬 IP(從 fake-ip-range 中分配),然後在背景非同步完成真實 DNS 解析。這種方式的好處是連線建立速度極快,因為不需要等待 DNS 結果傳回。
redir-host 模式會等待真實 DNS 解析完成後再傳回結果。雖然速度稍慢,但在某些依賴真實 IP 的場景(如區域網路裝置發現、特定遊戲連線)中更可靠。
nameserver 和 fallback 的協作
nameserver 中設定的是主 DNS 伺服器,通常使用國內的公共 DNS(如阿里 DNS、騰訊 DNS),它們解析國內網域速度最快。fallback 中設定的是備用 DNS,通常使用海外 DNS(如 Cloudflare、Google),當 Clash 偵測到主 DNS 傳回的 IP 可能被污染時(透過 fallback-filter 判斷),會自動使用 fallback 中的結果。
如果同時使用 fake-ip 模式和 TUN 模式,請確保 dns.listen 設定正確,避免系統 DNS 請求繞過 Clash 直接傳送到電信業者 DNS,造成隱私洩漏。
代理節點設定
代理節點(proxies)是設定檔的核心部分,定義了你可以使用的每一個代理伺服器。Clash Meta 支援多種協定,以下是各主流協定的設定範例:
Shadowsocks (SS)
proxies:
- name: "SS-HK"
type: ss
server: hk.example.com
port: 8388
cipher: aes-256-gcm
password: "your-password"
udp: true
VMess
- name: "VMess-JP"
type: vmess
server: jp.example.com
port: 443
uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
alterId: 0
cipher: auto
tls: true
network: ws
ws-opts:
path: /ws-path
headers:
Host: jp.example.com
Trojan
- name: "Trojan-US"
type: trojan
server: us.example.com
port: 443
password: "your-password"
udp: true
sni: us.example.com
skip-cert-verify: false
VLESS(Clash Meta 專屬)
- name: "VLESS-SG"
type: vless
server: sg.example.com
port: 443
uuid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
network: ws
tls: true
udp: true
flow: xtls-rprx-vision
ws-opts:
path: /vless-ws
headers:
Host: sg.example.com
reality-opts:
public-key: "your-public-key"
short-id: "your-short-id"
Hysteria2(Clash Meta 專屬)
- name: "Hy2-TW"
type: hysteria2
server: tw.example.com
port: 8443
password: "your-password"
obfs: salamander
obfs-password: "obfs-password"
sni: tw.example.com
skip-cert-verify: false
up: "30 Mbps"
down: "200 Mbps"
如果你的服務商支援 Hysteria2,優先選擇它——基於 QUIC 協定,在高封包遺失的網路環境下表現遠優於 TCP 協定。VLESS + Reality 是目前最難被偵測的方案之一。傳統的 SS 和 VMess 仍然穩定可靠,是最通用的選擇。
代理群組策略設定
代理群組(proxy-groups)是 Clash 實現智慧分流的關鍵。你可以將多個節點組合在一起,並定義選擇策略。
手動選擇(select)
proxy-groups:
- name: "🚀 節點選擇"
type: select
proxies:
- "♻️ 自動選擇"
- "🔮 負載均衡"
- "SS-HK"
- "VMess-JP"
- "Trojan-US"
- "VLESS-SG"
- "Hy2-TW"
- DIRECT
自動測速(url-test)
- name: "♻️ 自動選擇"
type: url-test
proxies:
- "SS-HK"
- "VMess-JP"
- "Trojan-US"
- "VLESS-SG"
- "Hy2-TW"
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 50
故障轉移(fallback)
- name: "🔄 故障轉移"
type: fallback
proxies:
- "Hy2-TW"
- "VLESS-SG"
- "Trojan-US"
url: http://www.gstatic.com/generate_204
interval: 300
負載均衡(load-balance)
- name: "🔮 負載均衡"
type: load-balance
proxies:
- "SS-HK"
- "VMess-JP"
- "Trojan-US"
strategy: consistent-hashing
url: http://www.gstatic.com/generate_204
interval: 300
四種策略的適用場景:
- select:最靈活,手動切換節點。適合需要精確控制出口 IP 的場景(如解鎖特定地區串流媒體)。
- url-test:全自動選最快節點。
tolerance參數(單位 ms)設定容忍範圍,避免頻繁切換——新節點延遲必須比目前節點低超過 tolerance 值才會切換。 - fallback:按優先順序排列,第一個可用就用第一個。適合有明確優先節點偏好的場景。
- load-balance:將請求分散到多個節點。
consistent-hashing策略讓同一網域始終走同一節點,避免 IP 頻繁變動。
規則分流設定
規則(rules)定義了每個網路連線應該走代理、直連還是封鎖。Clash Meta 從上到下逐條比對,比對到第一條就執行對應策略,所以規則的順序非常重要。
rules:
# 網域精確比對
- DOMAIN,google.com,🚀 節點選擇
# 網域後綴比對(包括所有子網域)
- DOMAIN-SUFFIX,googleapis.com,🚀 節點選擇
- DOMAIN-SUFFIX,github.com,🚀 節點選擇
- DOMAIN-SUFFIX,youtube.com,🚀 節點選擇
# 網域關鍵字比對
- DOMAIN-KEYWORD,google,🚀 節點選擇
- DOMAIN-KEYWORD,twitter,🚀 節點選擇
- DOMAIN-KEYWORD,facebook,🚀 節點選擇
# GeoSite 規則(使用 Meta 擴充資料庫)
- GEOSITE,google,🚀 節點選擇
- GEOSITE,github,🚀 節點選擇
- GEOSITE,telegram,🚀 節點選擇
- GEOSITE,cn,DIRECT
# IP 位址段比對
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
# GeoIP 規則(根據 IP 歸屬地比對)
- GEOIP,CN,DIRECT
- GEOIP,private,DIRECT,no-resolve
# 處理程序名稱比對(需要 find-process-mode 開啟)
- PROCESS-NAME,Telegram,🚀 節點選擇
- PROCESS-NAME,Steam,DIRECT
# 兜底規則(必須放在最後)
- MATCH,🚀 節點選擇
規則類型速查
- DOMAIN:精確比對完整網域,如
google.com不會比對www.google.com。 - DOMAIN-SUFFIX:比對網域後綴,
google.com會同時比對www.google.com和mail.google.com。這是最常用的規則類型。 - DOMAIN-KEYWORD:包含關鍵字即比對,範圍最廣但也最容易誤傷。
- GEOSITE:Clash Meta 專屬,基於分類好的網域資料庫比對,比手動維護網域列表高效得多。
- IP-CIDR:比對目標 IP 位址段。加
no-resolve參數可以跳過 DNS 解析,避免在 fake-ip 模式下觸發不必要的解析。 - GEOIP:根據 IP 地理位置比對,
CN比對中國大陸 IP。 - PROCESS-NAME:按應用處理程序名稱比對,實現對特定應用的精確控制。
- MATCH:兜底規則,放在所有規則的最後,比對所有未被前面規則命中的流量。
精確規則(DOMAIN)放在前面,寬泛規則(DOMAIN-KEYWORD、GEOSITE)放在中間,IP 類規則和兜底規則放在最後。這樣能保證命中率和效能的最佳平衡。
TUN 模式設定
TUN(網路隧道)模式可以接管系統所有流量,包括那些不支援設定代理的應用程式。在 Clash Meta 中,TUN 模式已經非常成熟,是實現真正全域代理的最佳方案。
tun:
enable: true
stack: system # system / gvisor / mixed
dns-hijack:
- any:53
- tcp://any:53
auto-route: true
auto-detect-interface: true
# macOS 下的 MTU 設定
mtu: 9000
TUN 堆疊選擇
- system:使用系統網路堆疊,效能最好,相容性最高。在 macOS 上建議使用。
- gvisor:使用者空間網路堆疊,不依賴系統實作,在某些 Linux 環境下更穩定。
- mixed:混合模式,TCP 使用 system,UDP 使用 gvisor。適合 UDP 表現不佳的系統環境。
dns-hijack 會劫持所有 DNS 查詢請求,確保它們經過 Clash 的 DNS 模組處理而不是直接傳送給電信業者 DNS,是防止 DNS 洩漏的核心設定。auto-route 自動建立路由表項,無需手動設定。auto-detect-interface 自動辨識出站網路介面。
TUN 模式需要管理員權限(macOS 上需要在系統設定中授權 VPN 權限)。首次啟用時,系統會彈出授權提示,點擊允許即可。如果使用 ClashX Pro,TUN 功能已經內建。
進階:腳本規則與子規則
Clash Meta 提供了比傳統規則列表更強大的流量控制方式,適合有複雜分流需求的進階使用者。
Sub-Rules(子規則)
子規則允許你在一條規則命中後,繼續使用另一組規則進行細分比對。這在需要對同一類流量進行更精細控制時非常有用。
# 主規則中引用子規則
rules:
- SUB-RULE,(AND,((GEOSITE,geolocation-!cn),(NOT,((GEOSITE,cn))))),overseas-rules
- SUB-RULE,(GEOSITE,cn),china-rules
- MATCH,🚀 節點選擇
# 子規則定義
sub-rules:
overseas-rules:
- GEOSITE,youtube,📹 YouTube
- GEOSITE,netflix,🎬 Netflix
- GEOSITE,openai,🤖 AI 服務
- GEOSITE,telegram,📱 Telegram
- MATCH,🚀 節點選擇
china-rules:
- GEOSITE,bilibili,📺 嗶哩嗶哩
- GEOSITE,zhihu,DIRECT
- MATCH,DIRECT
Rule Providers(規則集引用)
當規則數量龐大時,可以將規則儲存在外部檔案或遠端 URL 中,透過 rule-providers 引用:
rule-providers:
reject:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
path: ./ruleset/reject.yaml
interval: 86400
proxy:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
path: ./ruleset/proxy.yaml
interval: 86400
direct:
type: http
behavior: domain
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
path: ./ruleset/direct.yaml
interval: 86400
rules:
- RULE-SET,reject,REJECT
- RULE-SET,proxy,🚀 節點選擇
- RULE-SET,direct,DIRECT
- GEOIP,CN,DIRECT
- MATCH,🚀 節點選擇
使用 rule-providers 的好處是規則可以自動更新(透過 interval 設定更新間隔,單位秒),且主設定檔保持簡潔。behavior 欄位有三種類型:domain(網域列表)、ipcidr(IP 位址段列表)、classical(混合格式)。
常見錯誤與排查指南
即使是經驗豐富的使用者也經常在設定中遇到問題。以下是最高頻的錯誤和解決方案:
1. YAML 格式錯誤
這是最常見的問題。YAML 對縮排極其敏感:
- 必須使用空格縮排,絕對不能用 Tab 鍵。
- 同一層級的縮排必須一致(建議統一使用 2 個空格)。
- 冒號後面必須有空格:
key: value(正確) vskey:value(錯誤)。 - 包含特殊字元的字串需要用引號包裹。
2. 連接埠被佔用
如果 Clash 啟動後提示連接埠衝突,說明 mixed-port 指定的連接埠已被其他應用程式使用。在 macOS 終端機中執行 lsof -i :7890 查看佔用的處理程序,然後關閉該處理程序或更換連接埠號碼。
3. 節點無法連線
- 檢查伺服器位址和連接埠是否正確。
- 確認密碼、UUID 等認證資訊無誤。
- 確保
cipher(加密方式)與伺服器端一致。 - 如果使用了 TLS,檢查
sni是否正確填寫。
4. DNS 解析異常
- 確認
dns.enable為true。 - 使用 DoH(DNS over HTTPS)格式的 DNS 伺服器,避免 DNS 請求被電信業者劫持。
- 如果使用 fake-ip 模式但某些應用程式出問題,將該應用的網域加入
fake-ip-filter。
5. 規則不生效
- 檢查規則是否被更前面的規則「搶先」比對了。規則是從上往下按順序執行的。
- 確認代理群組名稱與規則中引用的名稱完全一致(區分大小寫和 emoji)。
- 使用客戶端的「連線」面板查看具體請求命中了哪條規則,輔助除錯。
將 log-level 臨時設為 debug,可以在日誌中看到每個連線的完整比對過程。排查完問題後記得改回 info,避免日誌檔案過大。
常見問題 (FAQ)
1. Clash Meta 和原版 Clash 的設定檔有什麼差異?
Clash Meta(mihomo)在原版 Clash 設定格式的基礎上進行了大量擴充。主要差異包括:支援 VLESS、Hysteria2、TUIC 等新協定;增加了 TUN 模式的精細化設定;支援 sub-rules(子規則)和更複雜的規則比對;DNS 設定支援更多解析模式。原版 Clash 的設定檔可以在 Clash Meta 中使用,但反過來不一定相容。
2. Clash Meta 設定檔存放在哪個目錄?
設定檔位置取決於你使用的客戶端。ClashX 在 macOS 上預設將設定檔存放在 ~/.config/clash/ 目錄下。Clash Verge 有自己的設定管理目錄,通常在應用程式資料夾中。你也可以在客戶端設定中手動指定設定檔路徑。設定檔通常以 .yaml 或 .yml 為副檔名。
3. fake-ip 和 redir-host 模式哪個比較好?
fake-ip 模式在絕大多數場景下表現更優。它透過傳回虛擬 IP 來加速 DNS 解析過程,減少首次連線的延遲,特別適合日常瀏覽和串流媒體使用。redir-host 模式會傳回真實 IP 位址,在某些需要真實 IP 的場景中更合適。建議預設使用 fake-ip,遇到相容性問題時再切換為 redir-host。
4. 為什麼我的 Clash Meta 設定檔無法載入?
設定檔無法載入通常有以下原因:1)YAML 格式錯誤,最常見的是縮排不一致(必須用空格,不能用 Tab);2)連接埠衝突,mixed-port 指定的連接埠已被其他應用程式佔用;3)代理節點資訊有誤;4)規則語法錯誤。建議使用 YAML 驗證工具檢查格式,並查看 Clash Meta 的日誌輸出來定位具體錯誤。