先看懂結構:入口、解析、節點、策略與規則
開啟 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,出口選擇
儲存與驗證步驟
- 先將目前可用的設定另存為備份,再把上述內容以 UTF-8 編碼儲存為
config.yaml。確認編輯器沒有自動加上.txt副檔名。 - 使用 mihomo 命令列時,可執行
mihomo -t -f config.yaml檢查設定。圖形介面用戶端請使用內建的設定檢查或匯入功能;功能入口名稱以目前版本的介面為準。 - 檢查通過後載入設定,確認記錄中沒有連接埠占用、欄位不支援或策略不存在等錯誤。圖形介面用戶端可能會在原始檔案上套用連接埠、DNS、TUN 等設定,請查看最後實際執行的設定。
- 明確指定代理並送出一次請求,不必依賴系統代理是否啟用。能否連上測試網站,也會受到目前網路本身直連能力的影響。
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 等存取憑證。