先看懂結構:入口、解析、節點、策略與規則

開啟 Clash 設定檔,不必從第一行開始一路猜到最後。先找頂層欄位:mixed-port 決定應用程式連線的入口,dns 管理內建網域解析,proxies 儲存節點,proxy-groups 整理可選的出口,rules 則決定每條連線交由誰處理。看懂這五個部分,就能分辨「檔案能載入」和「連線依預期轉送」是兩回事。

常見的引用鏈是:規則命中策略組,策略組再選取節點;若規則目標是 DIRECT,連線就會直接連到目標,不經過遠端代理節點。各頂層欄位的排列順序通常不會影響執行順序,但 rules 清單的排列會直接改變比對結果。

設定區段用途優先檢查項目
mixed-port接收 HTTP 與 SOCKS5 代理連線連接埠是否被占用、應用程式填寫的位址
dns內建解析器與增強模式是否啟用、請求是否進入核心
proxies遠端節點的連線參數通訊協定、位址、連接埠、驗證資訊
proxy-groups選取或測試出口名稱引用、目前選取的項目
rules依條件分配連線比對順序、最後的預設策略

YAML 寫法:先檢查縮排,再確認欄位用途

YAML 以縮排表示層級。建議統一使用兩個空格,不要使用 Tab。同一層級的欄位要靠左對齊,清單項目則以連字號加空格開頭。副檔名可以是 .yaml 或 .yml,但只把文字檔改成這類副檔名,並不會自動修正語法。

proxy-groups:
  - name: "出口選擇"
    type: select
    proxies:
      - DIRECT

這段設定包含兩個不同位置的概念:頂層的 proxy-groups 是策略組清單;組內的 proxies 則是可選項目的名稱清單,不是完整的節點參數。name、type 和組內的 proxies 屬於同一個物件,因此縮排要一致。

在編輯器中,特別檢查這四項

  • 冒號後要加空格:寫成 mode: rule,不要讓鍵和值黏在一起。
  • 布林值:allow-lan: false 使用布林值,false 不必加上引號。
  • 含特殊字元的字串:節點名稱、密碼及含有 # 的值,建議加上引號,避免被誤認為註解等語法。
  • 重複的鍵:不要在檔案末尾再新增第二個頂層 dns 或 rules。不同解析器可能會拒絕載入,也可能以後面的值覆蓋前面的設定。

語法錯誤通常會指出行號,但真正的問題可能出在上一行。例如清單縮排少了兩個空格,錯誤提示可能出現在下一個欄位。排查時先查看錯誤行,再往上檢查最近一組欄位與清單結構。

頂層設定:mixed-port、allow-lan 與 mode

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false

mixed-port: 7890 表示同一個監聽連接埠可接收 HTTP 和 SOCKS5 代理連線。只供本機使用時,應用程式可填入位址 127.0.0.1 和連接埠 7890。連接埠號並非固定值;若記錄顯示 address already in use,請先確認是否有另一個用戶端或其他程式占用該連接埠。

allow-lan: false 會限制區域網路裝置透過此代理入口連線。若要共用代理,除了調整這個欄位,也要確認監聽位址、系統防火牆及目前網路是否可信。不要為了排查本機連線問題,就直接解除所有連入限制。

三種模式與 rules 的關係

  • rule:依規則清單決定出口,適合用來驗證分流設定。
  • global:透過全域策略選擇出口,不會依一般規則清單逐項分流。
  • direct:連線採直連;此時修改代理規則通常不會看到預期變化。

log-level: info 適合日常查看連線與錯誤;排查問題時可暫時改為 debug,完成後再改回來,避免產生過多記錄。ipv6: false 是本文入門設定的取捨,不代表所有網路都應關閉 IPv6。若需要 IPv6,應一併檢查 DNS 回應、系統路由與節點支援狀況。

dns 區段:啟用解析器並選擇增強模式

dns 是一個巢狀物件。先確認是否啟用內建 DNS,再考慮設定 enhanced-mode。以下是常見的結構範例,使用傳統 IP 位址作為上游,方便看懂欄位之間的關係;這並非適用所有網路環境的通用建議。

dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 223.5.5.5
    - 119.29.29.29

nameserver 是上游解析伺服器清單。這裡的一般 IP 上游通常使用傳統 DNS 傳輸;若要使用 DoH、DoT 或更精細的分流解析,請確認核心支援狀況與上游是否可連線。頂層的 ipv6 和 dns.ipv6 並非完全相同的開關;後者主要影響內建 DNS 如何處理 AAAA 查詢。

fake-ip 會為符合處理條件的網域回傳合成位址,核心會保存位址與網域之間的對應,再依連線所對應的網域處理流量。198.18.0.1/16 屬於保留作為基準測試用途的位址範圍,不是任何節點的公網位址,也不應填入節點的 server 欄位。

設定了 dns,系統解析為何還是沒有變化?

enable: true 只會啟用內建 DNS 功能,不保證整個系統的 DNS 請求都會進入該功能。透過代理通訊協定傳入網域、由系統直接解析網域,以及透過 TUN 搭配 DNS 劫持接入,是不同的流量路徑。排查時先確認應用程式使用哪條路徑,再查看用戶端是否設定了相應的 DNS 接管功能。

若區域網路名稱、遊戲或裝置探索功能異常,可依實際需求研究 fake-ip-filter,讓特定網域不使用合成位址。不要直接複製來源不明的大量過濾項目;過濾後取得的實際解析結果與後續路由仍須驗證。

proxies 與 proxy-groups:分清節點參數和出口名稱

頂層的 proxies 用來儲存節點物件。每個物件至少需要一個供引用的 name,其他必要欄位則依通訊協定而定。例如 Shadowsocks 節點通常需要 type、server、port、cipher 和 password;其他通訊協定還可能需要 UUID、TLS、傳輸層等參數。不同通訊協定的欄位清單不可直接套用。

節點參數應來自實際服務設定或可信任的訂閱。本文不提供虛構的伺服器與驗證資訊,後續完整範例使用 proxies: [] 表示節點清單為空。這樣可先驗證 YAML、監聽連接埠與規則引用,不會把看似完整、實際上卻無法連線的節點當成可用設定。

proxies: []

proxy-groups:
  - name: "出口選擇"
    type: select
    proxies:
      - DIRECT

select 是手動選擇組。組名「出口選擇」會成為規則可引用的目標,目前組內只有內建的 DIRECT。加入實際節點時,必須先在頂層節點清單中保留完整的節點物件,再將其 name 原樣加入組內清單;空格、大小寫和符號都必須一致。只新增節點名稱並不會自動建立節點。

自動測速組還需要哪些設定?

url-test 等組類型還需要設定測速網址、檢查間隔等項目。測速結果只代表特定測試請求下的狀況,不等於所有網站都能存取,也不代表實際下載速度。剛開始閱讀設定時,建議先用 select 驗證各個出口,再加入自動選擇邏輯。

rules 區段:由上往下比對,MATCH 放在最後

在規則模式下,核心會依清單順序尋找符合的項目,命中後採用該項指定的目標。目標可以是策略組、節點名稱,也可以是 DIRECT、REJECT 等內建策略。為了方便管理,通常讓規則指向策略組,而不是把所有節點名稱分散寫在規則中。

rules:
  - DOMAIN,example.com,DIRECT
  - DOMAIN-SUFFIX,example.org,出口選擇
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - MATCH,出口選擇
  • DOMAIN 用來精確比對網域。此處只會比對 example.com,不包含其所有子網域。
  • DOMAIN-SUFFIX 用來比對網域後綴。此處可涵蓋 example.org 及其子網域。
  • IP-CIDR 依目標 IPv4 位址網段比對。192.168.0.0/16 只是常見的私有網路網段之一,並不代表所有區域網路範圍。
  • no-resolve 表示不為這條 IP 規則主動觸發網域解析;若目標 IP 已知,仍可參與比對。
  • MATCH 是最後的兜底規則,會接收前面都未命中的連線,通常放在清單最後。

這裡以保留的範例網域示範語法,沒有設定實際的業務分流。若將 MATCH,出口選擇 移到第一行,後面的規則就不會有機會命中。另一個常見誤解是認為檔案中的區段順序會決定規則優先順序;真正需要留意的是 rules 區段內各項規則的順序。

使用 GEOIP 或 RULE-SET 時,也會依賴相應的資料庫或規則提供器。若記錄顯示資源載入失敗,應先處理資源問題。不要只是不斷調整規則文字,卻忽略規則引用的資料根本沒有載入。

最小可用設定:先驗證直連,再加入實際節點

以下是一份完整的本機直連驗證設定,包含本文提到的主要層級。它可建立代理監聽入口,並透過規則與策略組將請求直接連出;不包含遠端代理節點,因此無法用來驗證遠端代理服務。與前面的 Fake-IP 片段不同,此處選用 redir-host,減少初次驗證時對合成位址對應的依賴。

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false

dns:
  enable: true
  ipv6: false
  enhanced-mode: redir-host
  nameserver:
    - 223.5.5.5
    - 119.29.29.29

proxies: []

proxy-groups:
  - name: "出口選擇"
    type: select
    proxies:
      - DIRECT

rules:
  - DOMAIN,example.com,DIRECT
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - MATCH,出口選擇

儲存與驗證步驟

  1. 先將目前可用的設定另存為備份,再把上述內容以 UTF-8 編碼儲存為 config.yaml。確認編輯器沒有自動加上 .txt 副檔名。
  2. 使用 mihomo 命令列時,可執行 mihomo -t -f config.yaml 檢查設定。圖形介面用戶端請使用內建的設定檢查或匯入功能;功能入口名稱以目前版本的介面為準。
  3. 檢查通過後載入設定,確認記錄中沒有連接埠占用、欄位不支援或策略不存在等錯誤。圖形介面用戶端可能會在原始檔案上套用連接埠、DNS、TUN 等設定,請查看最後實際執行的設定。
  4. 明確指定代理並送出一次請求,不必依賴系統代理是否啟用。能否連上測試網站,也會受到目前網路本身直連能力的影響。
curl -I --proxy http://127.0.0.1:7890 https://example.com

在 Windows PowerShell 中,若 curl 被解讀成其他命令,可改用 curl.exe。測試時也要查看用戶端的連線記錄:目標應為 example.com,規則應命中精確網域項目,出口則應為 DIRECT。只看到 HTTP 回應卻沒有檢查連線記錄,無法確認請求是否依預期經過設定中的連線路徑。

完成直連驗證後,再從實際訂閱或服務設定加入節點,將節點名稱新增至「出口選擇」,並在用戶端手動選取。每次只修改一類內容:先調整節點,再調整策略組,最後才修改分流規則。遇到問題時,就能直接鎖定最近修改的部分。

載入失敗、規則未生效:依錯誤所在層級排查

狀況優先檢查項目處理方式
YAML 解析錯誤縮排、Tab、冒號、引號檢查錯誤行及其上一組清單
找不到策略或節點規則目標與組內名稱逐字比對對應的 name
無法監聽 7890其他用戶端或背景執行的核心關閉重複執行的程序,或更換連接埠並同步修改應用程式設定
修改規則後沒有作用目前模式、啟用中的設定、覆寫設定切換回 rule,確認執行中的設定,再建立新連線
更新訂閱後,修改內容消失確認修改位置是否為訂閱產生的檔案使用用戶端支援的覆寫或合併機制

調整規則與出口後,既有連線可能仍沿用建立時的路徑。驗證時應建立新請求,必要時關閉目標應用程式的舊連線,再查看新規則的命中記錄。不要因為某個長連線仍使用原本的出口,就認定設定沒有載入。

管理訂閱時,也要區分原始內容與實際執行結果。用戶端可能會將訂閱、全域設定及覆寫規則合併為最終設定;直接編輯下載的訂閱檔案,下次更新時可能就會被取代。若要長期保留連接埠或分流設定,請使用用戶端文件明確支援的覆寫入口,並在更新後檢查最終設定。

還沒有用戶端的話,可先前往用戶端下載頁依作業系統選擇;想了解匯入、啟用系統代理及首次連線流程,可接著查看設定教學。分享記錄或設定檔尋求協助前,記得移除訂閱連結、密碼、UUID 等存取憑證。