Clash Meta 設定完整教學 2026:從入門到精通 mihomo YAML 設定

什麼是 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 中的結果。

⚠️
DNS 洩漏提醒

如果同時使用 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.commail.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 權限提醒

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(正確) vs key:value(錯誤)。
  • 包含特殊字元的字串需要用引號包裹。

2. 連接埠被佔用

如果 Clash 啟動後提示連接埠衝突,說明 mixed-port 指定的連接埠已被其他應用程式使用。在 macOS 終端機中執行 lsof -i :7890 查看佔用的處理程序,然後關閉該處理程序或更換連接埠號碼。

3. 節點無法連線

  • 檢查伺服器位址和連接埠是否正確。
  • 確認密碼、UUID 等認證資訊無誤。
  • 確保 cipher(加密方式)與伺服器端一致。
  • 如果使用了 TLS,檢查 sni 是否正確填寫。

4. DNS 解析異常

  • 確認 dns.enabletrue
  • 使用 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 的日誌輸出來定位具體錯誤。

相關資源

📥 下載 ClashX ⚙️ Clash Meta 介紹 🛡️ Mac VPN 推薦 📝 部落格 & 教學