CONFIG.YAML / 完整查閱

Clash YAML
設定檔參考

從頂層結構開始,逐項查閱連接埠、執行模式、DNS、代理節點、策略組、分流規則與覆寫合併。範例採用 mihomo 相容語法,並說明欄位之間的相依關係與常見邊界。

mixed-port dns proxies proxy-groups rules rule-providers
閱讀說明

使用文件負責完成安裝、匯入訂閱、選擇節點與開啟系統代理的快速流程;本頁則說明設定為何要這樣寫,以及欄位發生問題時應檢查哪裡。首次使用者應先完成快速入門,再依實際問題查閱本手冊。需要更換用戶端時,可前往下載中心核對平台與架構,圖形用戶端首推 Clash Plus。

設定檔遵循 YAML 縮排規則。本文範例中的伺服器網域、密碼與權杖均為明確的示範值,複製後必須替換成自己的有效資訊。編輯前請保留原始檔案,修改一段後立即執行設定檢查或重新載入,不要一次改動多個互不相關的模組。

CHAPTER 01

YAML 結構總覽與縮排規則

從頂層鍵了解設定載入順序

一份可執行的 Clash 設定通常由通用設定、DNS、代理節點、代理提供者、策略組、規則提供者與規則清單組成。它們都位於 YAML 頂層,彼此透過名稱引用。核心讀取檔案時會先解析 YAML 語法,再建立節點與策略組,最後檢查規則目標是否存在。設定順序通常不影響解析,但依「基礎設定、DNS、節點、策略組、規則」排列,更方便人工檢查,也能減少引用尚未定義物件時的閱讀困難。

最小設定不代表只有一個連接埠。若啟用規則模式,至少還需要可用的策略目標與結尾規則;若策略組引用節點名稱,該節點必須存在;若規則使用 RULE-SET,對應的 rule-providers 項目也必須存在。訂閱產生器往往會補齊這些模組,但手動設定時需要自行確保引用完整。名稱區分大小寫,中文、空格與符號雖然可以使用,仍應保持穩定,避免覆寫腳本進行字串比對時找不到目標。

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

dns:
  enable: true
  enhanced-mode: fake-ip
  nameserver:
    - https://dns.example/dns-query

proxies:
  - name: "示範節點"
    type: ss
    server: proxy.example.com
    port: 443
    cipher: aes-128-gcm
    password: "your-password"

proxy-groups:
  - name: "節點選擇"
    type: select
    proxies:
      - "示範節點"
      - DIRECT

rules:
  - DOMAIN-SUFFIX,example.com,節點選擇
  - MATCH,DIRECT

縮排、清單與資料型別

YAML 使用空格表示層級,建議每層兩個空格,禁止混用定位字元。同層級的鍵必須對齊,清單項目使用短橫線加空格。上例中的 dns 是映射,nameserver 是清單,proxies 則是由多個節點映射組成的清單。多出一個空格可能會把欄位移入錯誤物件,少了一個短橫線則可能讓清單變成普通字串。若編輯器支援顯示空白字元,疑難排解時應開啟此功能。

布林值應寫成 truefalse,連接埠應寫成不加引號的整數。節點名稱、策略名稱與密碼建議加上雙引號,尤其是內容含有冒號、井字號、逗號、星號、開頭或結尾空格,或類似布林值的單字時。井字號代表註解起點,未加引號的密碼若包含井字號,後半段會被解析為註解。純數字密碼也建議加上引號,避免前導零遭到處理。空值不要任意寫成空字串;不需要的選用欄位通常應整行刪除。

引號、錨點與重複鍵

雙引號會處理反斜線跳脫,單引號則基本上依原文保留。一般名稱使用雙引號最直觀;正規表示式、Windows 路徑或包含大量反斜線的內容,則需要特別確認跳脫結果。YAML 錨點可以重複使用一段映射,但不同用戶端的預處理流程可能改變錨點行為。需要跨用戶端傳遞的訂閱檔案,應優先使用完整欄位,不要過度依賴複雜錨點與合併鍵。

同一個映射中出現重複鍵是危險情況。例如頂層寫了兩次 dns,有些解析器採用後者,有些工具會直接報錯,結果不能依賴。訂閱覆寫常見的故障正是將新模組追加到檔案末尾,卻沒有刪除原有模組。檢查時應搜尋頂層鍵是否只出現一次,再查看用戶端最後產生的執行設定,而不是只看覆寫片段。

設定檔副檔名通常為 .yaml.yml,兩者語法相同。檔案編碼建議使用 UTF-8,避免策略組中文名稱在不同系統間變成亂碼。換行格式通常可由用戶端處理,但從 Windows 編輯後交給 Linux 服務執行時,仍應避免混入不可見控制字元。先確保檔案能被 YAML 解析,再討論節點連線與規則命中,這是整個疑難排解流程的第一道關卡。

CHAPTER 02

通用欄位:連接埠、模式與控制介面

監聽連接埠如何分工

port 提供 HTTP 代理監聽,socks-port 提供 SOCKS5 監聽,mixed-port 則讓同一個連接埠同時接受 HTTP 與 SOCKS5。桌面圖形用戶端通常只需要一個 mixed-port,系統代理會自動指向它。若其他程式明確要求 SOCKS5 位址,可以單獨設定 socks-port。多個監聽連接埠不能使用同一個連接埠號,也不能與系統中的其他服務衝突。

redir-porttproxy-port 主要用於 Linux 閘道器、路由器或透明代理,桌面使用者不應只為了「涵蓋更多流量」就任意開啟。TUN 模式有獨立的虛擬網卡與路由處理路徑,也不等於簡單增加一個監聽連接埠。需要比較兩種接管機制時,可閱讀TUN 模式與系統代理的差異,先確認流量從哪裡進入核心,再選擇相關欄位。

mixed-port: 7890
allow-lan: false
bind-address: "*"
mode: rule
log-level: info
ipv6: false

external-controller: 127.0.0.1:9090
secret: "your-controller-secret"

profile:
  store-selected: true
  store-fake-ip: true
欄位 用途 常見設定 檢查重點
mixed-port 統一接受 HTTP 與 SOCKS5 請求 桌面用戶端保留一個本機連接埠 確認未被其他程序佔用
allow-lan 允許區域網路裝置連線 僅供本機使用時設為 false 開啟後同時檢查防火牆
bind-address 限定監聽位址 搭配區域網路分享使用 不要把控制介面誤當成代理連接埠
mode 決定採用規則、全域或直連處理 日常使用通常為 rule 用戶端介面可能覆寫檔案值

區域網路存取與繫結位址

allow-lan 決定其他裝置能否透過目前裝置的代理連接埠連線。設為 false 時適合單機使用;設為 true 後,還要檢查作業系統防火牆、監聽位址與區域網路隔離設定。開放區域網路存取並不會自動將手機或電視設定為代理,仍需在目標裝置中填入執行 Clash 的區域網路位址與監聽連接埠。位址變更會導致連線失效,因此長期分享時應為主機設定穩定的區域網路位址。

bind-address 用來限制監聽範圍。部分用戶端會依據「允許區域網路連線」開關自動產生此欄位,因此檔案中的值可能在啟動時被介面設定覆寫。疑難排解時應查看實際監聽位址:若只監聽 127.0.0.1,其他裝置無法存取;若監聽所有介面,則應確保控制介面與代理連接埠沒有直接暴露在不受信任的網路中。代理監聽與外部控制介面是兩套服務,不應混淆。

執行模式、記錄檔與狀態保存

mode: rule 會依 rules 由上而下比對,是日常設定的核心。global 會將流量交給全域策略,適合暫時驗證某個節點是否可用;direct 讓請求直接連線,適合確認問題是否由代理路徑引起。圖形用戶端的模式按鈕通常會在執行時切換狀態,不一定會寫回訂閱原始檔案。因此不要只看檔案中的 mode,也要查看用戶端目前的介面狀態。

log-level 常用 info,疑難排解時可暫時提高到 debug,完成後恢復,避免過多記錄干擾判斷。ipv6 控制核心是否處理 IPv6 相關能力,但不能修復本地網路本身缺少 IPv6 路由的問題。開啟後若出現連線等待,應檢查 DNS 是否回傳 IPv6 位址、系統是否有可用的 IPv6 出口,以及規則是否涵蓋對應位址。

external-controller 提供介面與核心通訊的控制位址,通常繫結本機迴路位址。secret 是控制介面的存取憑證,範例值必須替換。它不是代理節點密碼,也不會參與遠端連線。profile.store-selected 可保存策略組選擇,profile.store-fake-ip 可保存 Fake-IP 對映狀態。若訂閱更新後策略選擇總被重設,應同時檢查用戶端自己的持久化選項,而不是只修改 YAML。

CHAPTER 03

DNS 設定:解析路徑與 Fake-IP

先分清楚是誰發起解析

DNS 設定決定網域如何轉換為位址,也會影響規則能否在正確階段識別網域。瀏覽器可能使用系統 DNS、安全 DNS 或自身快取,作業系統可能快取舊結果,TUN 模式又可能將更多 DNS 請求交給核心。出現「節點可用但網站打不開」時,不應立即更換所有節點;先確認請求是否進入 Clash DNS、解析結果是否可達,以及規則最後選用了哪個策略。

dns.enable 開啟內建 DNS 模組。listen 用於指定 DNS 服務監聽位址,在一般圖形用戶端中通常由用戶端管理,手動開放到區域網路前需要了解防火牆影響。nameserver 是主要解析器,既可以填入一般位址,也可以填入 DoH 位址。解析器數量不宜無目的堆疊,因為不同回應之間的差異會讓疑難排解變得困難。

dns:
  enable: true
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  use-hosts: true
  respect-rules: true
  default-nameserver:
    - 223.5.5.5
    - 1.1.1.1
  nameserver:
    - https://dns.example/dns-query
  proxy-server-nameserver:
    - https://resolver.example/dns-query
  direct-nameserver:
    - 223.5.5.5
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "time.*.com"
    - "+.stun.*.*"

各類 nameserver 的職責

default-nameserver 主要用於解析 DoH 或 DoT 伺服器本身的網域,也可作為啟動階段的基礎解析器。為避免形成「先解析解析器網域才能使用解析器」的循環,這裡通常填入可直接存取的 IP 位址。它不是所有業務網域的預設出口,不能靠增加大量位址來取代正確的主要解析設定。

nameserver 負責一般網域查詢。proxy-server-nameserver 可專門解析代理節點伺服器網域,避免節點網域解析過程依賴尚未建立的代理連線。節點位址若本身就是 IP,此欄位影響較小;節點位址是網域且啟動時持續出現解析失敗,則應重點檢查。direct-nameserver 可用於直連網域解析,配合遵循規則的 DNS 路徑,讓直連與代理目標採用不同的解析策略。

respect-rules 讓 DNS 查詢更緊密地遵循分流規則,但它依賴策略組與解析器設定。錯誤的規則目標、無法使用的代理解析器或循環引用,可能讓 DNS 在節點尚未可用時等待代理。啟用後若所有網域都停止解析,應暫時恢復簡化設定:保留一個可存取的 nameserver,關閉複雜分流,確認基礎解析恢復後,再逐項加入專用解析器。

Fake-IP 與 redir-host 的差異

enhanced-mode: fake-ip 會為網域回傳保留位址範圍中的暫時位址,並由核心維護「暫時位址到原網域」的對映。優點是核心能及早保留網域資訊,規則判斷更直接,也能減少某些應用程式繞過網域規則的情況。fake-ip-range 應使用專用保留位址範圍,不要與本地真實網段、公司網路或虛擬機網段重疊。發生區域網路位址衝突時,可能表現為部分內網服務無法開啟,而一般公網存取正常。

redir-host 回傳真實解析位址,相容路徑較傳統,但在透明接管情境下可能較早遺失原始網域資訊。選擇哪種模式應以應用程式相容性與接管方式為準,而不是認為某一種永遠更快。桌面用戶端使用 Fake-IP 後,若只有印表機、區域網路裝置、時間同步或遊戲區域網路探索異常,通常先補充 fake-ip-filter,不必直接關閉整個 DNS 模組。

fake-ip-filter 中的網域會繞過 Fake-IP 並回傳真實位址。過濾範圍應盡量精確。將過寬的萬用字元加入清單,會讓大量網域失去 Fake-IP 處理,最後產生「規則已寫入但命中不穩定」的情況。新增項目後應清除用戶端 DNS 快取或重新啟動核心,因為舊對映可能仍被保留。系統與瀏覽器也有獨立快取,必要時應分別重新整理。

DNS 故障的分層檢查

第一層檢查設定能否載入,第二層檢查解析器位址能否從目前網路存取,第三層檢查節點伺服器網域能否解析,第四層檢查業務網域規則,最後才檢查應用程式快取。若記錄顯示逾時,應區分是 UDP DNS、DoH 建立連線還是代理節點建立連線逾時。若能取得位址但連線失敗,問題已從解析階段進入路由、規則或節點階段。

不要同時更換 DNS、開啟 TUN、修改 Fake-IP 範圍並替換規則集。正確做法是保留一份可正常工作的基準設定,每次只變更一個模組。關於連線速度下降的進一步分層方法,可參閱Clash 速度慢如何排查。DNS 只負責解析路徑,不會提升品質較差的遠端線路,也不能取代正確的節點與策略選擇。

CHAPTER 04

代理節點欄位與代理提供者

節點物件的共同結構

proxies 是靜態節點清單,每個清單項目至少包含名稱、類型、伺服器位址與連接埠,再依協定補充驗證與傳輸欄位。name 是整份設定中的引用識別,策略組透過它找到節點。重複的節點名稱會導致選擇與覆寫結果不確定,因此訂閱合併後應檢查名稱是否唯一。server 可以是網域或 IP,port 必須與伺服器實際監聽一致。

協定類型決定可用欄位,不能將一種協定的參數機械式複製到另一種協定。加密方式、使用者識別、傳輸層、TLS 與伺服器名稱都必須與伺服器設定一致。用戶端能載入 YAML,只代表語法與欄位結構基本有效,不表示遠端驗證一定成功。記錄中的握手失敗、驗證失敗、連線遭拒與逾時分別指向不同階段,應依錯誤階段處理。

proxies:
  - name: "SS 示範節點"
    type: ss
    server: ss.example.com
    port: 443
    cipher: aes-128-gcm
    password: "your-password"
    udp: true

  - name: "Trojan 示範節點"
    type: trojan
    server: trojan.example.com
    port: 443
    password: "your-password"
    sni: service.example.com
    skip-cert-verify: false
    udp: true

  - name: "Hysteria2 示範節點"
    type: hysteria2
    server: hy2.example.com
    port: 443
    password: "your-password"
    sni: service.example.com
    skip-cert-verify: false

驗證、TLS 與傳輸欄位

Shadowsocks 節點常見欄位包括 cipherpasswordudp。加密方法必須與伺服器相同,名稱相近也不能互換。Trojan 類節點依賴 TLS,除了密碼外也經常需要 sni。SNI 表示握手時使用的伺服器名稱,可能與連線位址相同,也可能由服務提供者指定。填寫錯誤時,TCP 連線可能成功,但 TLS 握手會失敗。

skip-cert-verify 控制憑證驗證。正常設定應保持 false,優先修正伺服器名稱、系統時間與憑證鏈問題。將它改為 true 只能用於確認憑證驗證是否為故障點,不應作為通用修復方式。系統時間偏差、受限網路攔截與錯誤的 SNI 都可能產生憑證相關錯誤。只看「連線失敗」四個字不足以判斷原因,必須結合記錄中的握手階段。

VMess、VLESS、TUIC、Hysteria2 等類型還可能包含使用者識別、網路類型、WebSocket 路徑、HTTP 標頭、流量控制或壅塞控制欄位。欄位集合會隨核心能力與伺服器部署方式變化。手動移轉節點時應以原始訂閱與目前核心文件為準,不要只憑另一個節點的外觀補上欄位。關於原版 Clash、Meta 與 mihomo 的名稱及相容關係,可閱讀核心版本選型說明

proxy-providers 的按需載入

節點較多或需要遠端更新時,可以使用 proxy-providers。提供者是節點集合,策略組透過 use 引用它。常見類型為 HTTP 或本地檔案,遠端提供者包含位址、更新間隔、儲存路徑與健康檢查。儲存路徑應位於用戶端允許寫入的位置;容器或服務模式下還要確認目錄權限。遠端位址中的查詢參數可能包含存取憑證,不應寫入公開記錄或公開範例。

proxy-providers:
  provider-main:
    type: http
    url: "https://subscription.example/config?token=xxxx"
    path: ./providers/provider-main.yaml
    interval: 3600
    health-check:
      enable: true
      interval: 600
      url: https://www.gstatic.com/generate_204

proxy-groups:
  - name: "訂閱節點"
    type: select
    use:
      - provider-main
    proxies:
      - DIRECT

interval 是重新整理間隔,不代表每次啟動都一定會立即下載。用戶端還可能有自己的更新按鈕與快取策略。health-check 使用固定位址檢查節點可達性,結果用於介面顯示或自動策略選擇,但單一檢測位址不能代表所有網站都可存取。檢測失敗時,先確認測試位址在目前網路中可達,再判斷節點是否故障。

proxiesuse 可以在同一策略組中同時出現:前者列出固定節點或內建動作,後者引入提供者集合。覆寫工具處理這兩類欄位時的行為可能不同,追加靜態節點不一定會自動加入提供者。訂閱更新後節點消失,通常應檢查遠端提供者是否重新整理成功、儲存路徑是否可寫,以及策略組是否仍引用正確的提供者名稱。

CHAPTER 05

策略組:手動選擇與自動測試

策略組是規則與節點之間的中介層

proxy-groups 將多個節點、其他策略組與內建動作組合成可選擇的目標。規則通常不會直接指向特定節點,而是指向「節點選擇」「串流媒體」或「下載」等策略組。如此一來更換節點時不需要重寫規則。策略組名稱同樣區分大小寫,規則目標、上層策略組引用與介面顯示必須保持一致。

策略組之間可以巢狀,但不能形成循環。例如 A 引用 B,B 又引用 A,會導致設定檢查失敗或執行行為異常。設計策略層級時應保持單向:頂層業務組引用地區組,地區組引用具體節點;不要讓底層組反向引用頂層業務組。層級過深也會增加選擇成本,通常兩到三層已經足夠。

proxy-groups:
  - name: "節點選擇"
    type: select
    proxies:
      - "自動選擇"
      - "故障轉移"
      - "SS 示範節點"
      - DIRECT

  - name: "自動選擇"
    type: url-test
    proxies:
      - "SS 示範節點"
      - "Trojan 示範節點"
    url: https://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50
    lazy: true

  - name: "故障轉移"
    type: fallback
    proxies:
      - "SS 示範節點"
      - "Trojan 示範節點"
    url: https://www.gstatic.com/generate_204
    interval: 300
    lazy: true

select、url-test 與 fallback

select 是手動選擇組,用戶端介面會顯示其中的節點與子策略。它不會自行判斷哪個節點較快,適合需要穩定指定出口的情境。將 DIRECT 放入選擇組可用於暫時對照,但也代表誤選後相關規則全部直連。常用主組可開啟狀態保存,讓用戶端重新啟動後繼續使用上次的選擇。

url-test 會定期存取測試位址,並在候選節點中選擇回應結果較合適的一個。它測量的是到測試位址的連線表現,不等於所有業務的實際速度。interval 控制測試週期,過短會增加網路與電量消耗。tolerance 用於減少結果接近時的頻繁切換;容差過小,節點會因輕微波動反覆變更,長連線也可能受到影響。

fallback 更重視可用性與候選順序。目前節點不可用時會依清單切換,適合希望優先使用固定出口、故障時才切換的情境。它與「永遠選擇延遲最低」不是同一個目標。若業務依賴穩定的來源位址,通常手動選擇或故障轉移會比頻繁測速切換更容易控制。

load-balance 與健康檢查的界線

load-balance 會在多個可用節點之間分配連線,可依核心支援的策略維持同一目標的一致性或進行輪換。它適合大量獨立連線,不適合要求整個工作階段始終使用同一出口的服務。登入狀態異常、驗證碼增加或同一業務觀察到出口變化時,應先改用固定節點確認,而不是繼續縮短測速間隔。

自動策略依賴健康檢查位址。測試位址應穩定、回應內容小、允許頻繁存取,且不能被本地網路特殊處理。若所有節點突然顯示失敗,而實際存取仍正常,可能是檢測位址本身無法連線。反之,檢測成功只表示該位址可存取,不能證明 DNS、目標網站、UDP 或特定協定都正常。自動選擇是輔助機制,不是完整的品質評分。

策略類型 主要目的 適用情境 常見誤區
select 人工固定選擇 穩定出口、按需切換 以為會自動測速
url-test 依測試結果自動選擇 日常瀏覽、候選節點較多 把測試延遲等同於下載速度
fallback 優先使用並在故障時切換 主備線路 忽略清單順序
load-balance 在多個節點間分配連線 多連線工作 用於要求固定出口的工作階段

以業務組維持規則可維護性

一份易於維護的設定通常保留一個總入口組,再依業務建立少量策略組。規則指向業務組,業務組再引用總入口、自動組或指定地區組。如此訂閱節點變更時,只需調整組成員。不要為每個網域建立一個策略組,否則介面會充滿重複選項,覆寫也難以維護。

新增或重新命名策略組後,應搜尋整份檔案中的舊名稱。規則、其他策略組與覆寫腳本都可能引用它。用戶端出現「策略不存在」時,先檢查名稱中的空格、全形符號與大小寫,再檢查該組是否因覆寫順序被刪除。若節點延遲顯示與實際體驗差異明顯,可結合節點、線路與本地設定排查,分別驗證 DNS、握手與持續傳輸,不要只依據一次健康檢查。

CHAPTER 06

規則語法、比對順序與規則集

規則依由上而下的順序比對

rules 是有順序的清單。請求遇到第一條符合的規則後就會停止繼續檢查,因此具體規則應放在寬泛規則之前,末尾使用 MATCH 承接其餘流量。若將 MATCH 放在頂部,後續規則永遠不會生效。若先寫寬泛的網域後綴,再寫子網域的特殊規則,子網域也會被前一條規則提前接走。

規則通常由「類型、比對值、策略目標」組成,部分規則還可以附加參數。逗號是欄位分隔符,策略名稱必須存在於 proxy-groups 中,或使用 DIRECTREJECT 等內建動作。規則行中的多餘空格可能成為值的一部分,手動編輯時應保持格式一致。

rules:
  - DOMAIN,api.example.com,節點選擇
  - DOMAIN-SUFFIX,example.com,節點選擇
  - DOMAIN-KEYWORD,example,節點選擇
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR6,fc00::/7,DIRECT,no-resolve
  - PROCESS-NAME,example-app.exe,DIRECT
  - GEOIP,CN,DIRECT
  - RULE-SET,private-domain,DIRECT
  - RULE-SET,service-domain,節點選擇
  - MATCH,節點選擇

網域、位址與程序規則

DOMAIN 只比對完整網域,適合單一主機;DOMAIN-SUFFIX 比對指定網域及其子網域,適合完整網站範圍;DOMAIN-KEYWORD 只要網域包含關鍵字就可能命中,涵蓋範圍最廣,也最容易誤傷。能使用完整網域時不要使用關鍵字,能使用明確後綴時不要寫過短的片段。

IP-CIDRIP-CIDR6 依目標位址範圍比對。區域網路、容器網段與公司內網通常應優先直連,但位址範圍必須符合實際網路。no-resolve 表示比對時不為取得 IP 而額外解析網域,可避免不必要的 DNS 查詢。它不表示禁止已有 IP 流量,也不會改變應用程式自身已完成的解析。

PROCESS-NAME 與程序路徑類規則依賴平台能力、權限及接管方式。系統代理模式下,並非所有流量都能可靠取得程序資訊;行動平台也可能不支援相同的程序規則。跨平台設定應將網域與位址規則作為基礎,程序規則則作為特定裝置上的補充。出現桌面端命中而手機端未命中時,先檢查規則類型是否具備平台可攜性。

GEOIP 依 IP 資料庫分類,GEOSITE 或規則集則依網域集合分類,實際可用能力取決於核心與資料檔案。資料庫規則方便涵蓋大範圍目標,但分類資料有更新週期,不能取代明確的業務規則。需要強制某個網域使用指定策略時,應將精確規則放在資料庫規則之前。

rule-providers 管理大型規則集

大量規則適合放入 rule-providers。每個提供者需要名稱、類型、行為、來源、儲存路徑與更新間隔。behavior 決定內容格式:網域集合、IP 位址範圍或傳統規則行不能混用。提供者下載成功不代表已參與分流,還必須在 rules 中使用同名的 RULE-SET

rule-providers:
  private-domain:
    type: http
    behavior: domain
    format: yaml
    url: "https://rules.example/private-domain.yaml"
    path: ./rules/private-domain.yaml
    interval: 86400

  service-domain:
    type: file
    behavior: classical
    format: yaml
    path: ./rules/service-domain.yaml

rules:
  - RULE-SET,private-domain,DIRECT
  - RULE-SET,service-domain,節點選擇
  - MATCH,節點選擇

domain 行為適合網域或網域後綴集合,ipcidr 適合位址範圍,classical 允許傳統規則表示式。遠端內容格式必須與宣告一致。若提供者檔案本身包含完整的 payload 結構,儲存後由核心依對應格式讀取;若將普通訂閱檔案誤當成規則集,設定會在解析階段報錯。

規則集重新整理失敗時,先查看網路請求狀態,再檢查儲存目錄權限與檔案格式。舊快取仍可能繼續運作,因此「目前仍可存取」不能證明更新成功。服務模式下,相對路徑以執行目錄或用戶端設定目錄為基準,不一定是 YAML 檔案所在的目錄。移轉裝置後規則提供者失效,路徑差異是常見原因。

驗證規則命中,不要只憑結果猜測

用戶端連線記錄通常會顯示目標網域、命中的規則與最後採用的策略。測試時應先清除瀏覽器既有連線或使用新的請求,否則重用連線可能會繼續沿用舊策略。修改規則後重新載入設定,再查看新連線是否命中新規則。只看網頁能否開啟,無法區分它使用直連還是代理。

自訂規則應從少量精確項目開始。先寫一條明確的網域規則,確認命中後,再逐步擴大到後綴或規則集。若新增規則導致大量網站異常,立即檢查是否使用了過短的關鍵字、過寬的位址範圍或過早出現的 MATCH。規則分流的核心不是數量,而是順序清楚、目標存在且範圍可解釋。

CHAPTER 07

訂閱覆寫、YAML 合併與更新界線

原始訂閱與執行設定不是同一份檔案

圖形用戶端匯入訂閱後,通常會經歷下載、解析、覆寫、注入用戶端設定與核心載入幾個階段。介面中看到的訂閱內容可能是原始檔案,也可能是處理後的快取;核心實際執行的設定還可能包含用戶端自動寫入的連接埠、控制介面與 TUN 設定。因此排查覆寫問題時,要確認目前查看的是哪個階段的檔案。

訂閱更新會重新下載遠端內容。直接編輯快取檔案的變更可能在下一次更新時消失,這是正常的更新結果,不代表用戶端儲存失敗。需要長期保留的本地規則、策略組或 DNS 設定,應放入用戶端支援的覆寫、擴充腳本或本地設定層。不同用戶端的覆寫能力與欄位名稱並不完全相同,移轉時應先匯出最終設定進行核對。

映射、清單與純量的合併差異

YAML 本身定義資料結構,但沒有統一規定訂閱工具必須如何進行深度合併。純量欄位如 mode 通常由後值取代前值;映射如 dns 可能逐鍵合併,也可能整體取代;清單如 rulesproxy-groups 可能覆蓋、追加、前置或依名稱處理。不能假設所有用戶端都採用相同演算法。

規則覆寫尤其依賴順序。若自訂規則被追加到遠端規則末尾,而遠端設定已經有 MATCH,新規則就不會命中。此時需要「前置規則」而不是普通追加。策略組若整體取代,訂閱產生的節點引用可能遺失;若只追加同名組,則可能產生重複名稱。每種資料類型都應單獨確認合併結果。

# 基礎設定中的片段
mode: rule
dns:
  enable: true
  enhanced-mode: fake-ip
rules:
  - DOMAIN-SUFFIX,example.com,節點選擇
  - MATCH,節點選擇

# 預期前置的本地規則片段
rules:
  - DOMAIN,internal.example.com,DIRECT

# 合併後的正確順序應類似
rules:
  - DOMAIN,internal.example.com,DIRECT
  - DOMAIN-SUFFIX,example.com,節點選擇
  - MATCH,節點選擇

安全使用 YAML 錨點

錨點可以減少重複欄位。例如多個自動策略組共用測速位址與間隔時,可以定義公共映射,再使用合併鍵展開。但錨點只在同一份 YAML 文件內有效。遠端訂閱與本地覆寫若在解析後才合併,覆寫片段不一定能引用原始檔案中的錨點。某些轉換工具還會先展開或捨棄錨點,因此不能將關鍵相容性建立在跨檔案錨點上。

group-test-common: &group-test-common
  type: url-test
  url: https://www.gstatic.com/generate_204
  interval: 300
  tolerance: 50

proxy-groups:
  - name: "自動選擇"
    <<: *group-test-common
    proxies:
      - "SS 示範節點"
      - "Trojan 示範節點"

錨點名稱只用於 YAML 解析,不會成為 Clash 設定欄位。若用戶端的嚴格檢查不接受額外的頂層鍵,可以將公共結構放到工具支援的位置,或直接展開欄位。為了跨裝置傳輸,最終匯出的設定最好是已經展開、能夠獨立載入的完整檔案。減少重複固然方便,但可讀性與相容性優先順序更高。

建立可回復的覆寫流程

第一次覆寫只修改一個容易驗證的欄位,例如記錄層級或一條精確規則。重新載入後查看最終設定與連線記錄,確認覆寫層確實生效。第二步再加入 DNS 或策略組。若一次同時替換連接埠、DNS、策略組與規則,發生故障時便無法判斷是哪一層造成。

為本地擴充保留清楚的命名,例如策略組統一使用穩定名稱,規則提供者使用不會與訂閱衝突的前綴。訂閱更新前後,對比最終設定中的頂層鍵數量、策略組名稱與規則順序。不要只比較檔案行數,因為節點數量變化會產生大量無關差異。重點是本地欄位是否仍存在、引用是否完整、末尾兜底是否唯一。

在不同用戶端之間移轉時,應先在新用戶端中匯入原始訂閱,再移植本地覆寫,不要直接複製整個執行目錄。Clash Plus、Clash Verge Rev、FlClash、Clash Nyanpasu 等圖形用戶端的設定管理介面與持久化方式可能不同,核心相容也不代表介面設定完全一致。可在選型指南了解用戶端定位,再到下載中心取得對應平台安裝包。

訂閱更新後的異常定位

更新後設定無法載入,先暫時停用本地覆寫並驗證原始訂閱。原始訂閱可用而覆寫後失敗,表示問題位於合併層;原始訂閱也失敗,則應檢查遠端內容、訂閱狀態或核心相容性。若設定能載入但策略組為空,檢查節點提供者名稱與過濾條件;若自訂規則消失,檢查覆寫類型是取代還是追加;若連接埠恢復預設值,檢查用戶端設定是否優先於檔案欄位。

保留一份最近可正常工作的最終設定,可以快速區分「上游訂閱變更」與「本地編輯變更」。回復後不要立即再次覆蓋全部內容,應從差異最小的模組開始恢復。首次安裝與匯入訂閱的一般注意事項,也可參考跨平台初始化與常見錯誤

CHAPTER 08

設定檢查、載入流程與故障分層

先檢查語法,再檢查網路

設定故障應依固定順序處理:檔案編碼與 YAML 語法、欄位結構與引用、監聽連接埠、DNS、節點連線、策略組、規則命中、應用程式接管。上一層尚未通過時,不要跳到下一層。語法錯誤會讓整份設定無法載入,節點錯誤只會影響對應連線,規則錯誤則可能讓流量走錯策略。釐清故障範圍,才能避免無目的地更換所有設定。

圖形用戶端通常提供設定檢查或重新載入按鈕。伺服器端與命令列環境可使用目前核心提供的測試參數,但具體可執行檔名稱與參數應以安裝包內的說明為準。檢查命令必須指向實際設定目錄;相對路徑錯誤時,可能測試了另一份同名檔案。看到「設定有效」後仍需觀察啟動記錄,因為連接埠佔用、目錄權限與網路連線屬於執行階段問題。

# 範例:先進入實際設定目錄,再呼叫目前核心的設定檢查參數
cd /path/to/clash-config
mihomo -t -d .

# 查看本機連接埠是否已被佔用時,可依作業系統使用對應工具
# Linux
ss -lntup

# Windows PowerShell
Get-NetTCPConnection -State Listen

解析錯誤的常見位置

錯誤訊息包含行號時,應同時查看該行與上方數行。YAML 解析器往往要到無法繼續理解時才報錯,真正問題可能是前一行漏了引號、冒號後缺少空格或清單縮排中斷。若提示映射鍵重複,搜尋同一層級的同名欄位;若提示型別不符,檢查原本應為清單的位置是否少了短橫線,或整數是否誤寫成物件。

從聊天軟體或富文字複製的內容可能包含全形冒號、彎引號、不換行空格與不可見字元。最穩妥的處理方式是在純文字編輯器中重新輸入問題行。中文策略組名稱可以正常使用,但標點應保持普通半形 YAML 分隔符。註解必須從井字號開始,並與有效值保持適當空格。

設定可以解析但提示目標不存在時,檢查節點名稱、提供者名稱、策略組名稱與規則集名稱。常見情況包括策略組引用了已被訂閱更新重新命名的節點、規則指向被覆寫刪除的組、RULE-SET 名稱與提供者鍵不一致。搜尋名稱時應包含引號內的完整文字,注意結尾空格與相似字元。

連接埠、系統代理與 TUN 的分支

用戶端顯示正在執行但應用程式無法連網,先確認監聽連接埠是否存在,再核對系統代理位址。若 YAML 的 mixed-port 已改為新值,而系統代理仍指向舊值,瀏覽器會立即連線失敗。若只有不遵循系統代理的應用程式無法接管,表示基礎代理可能正常,需要評估 TUN,而不是繼續修改節點協定。

開啟 TUN 後完全斷網,應檢查權限、虛擬網卡、路由、DNS 接管與其他網路軟體衝突。先關閉 TUN,確認系統代理路徑可以運作,再單獨處理 TUN。若關閉用戶端後仍無法上網,檢查系統代理是否仍開啟、虛擬網卡路由是否恢復。不要在同一項測試中同時啟用多個代理用戶端,它們可能爭用系統代理、連接埠與路由。

節點可用性與規則命中的驗證

節點測試失敗時,先區分 DNS 解析失敗、TCP 連線逾時、連線遭拒、TLS 握手失敗與驗證失敗。解析失敗檢查節點伺服器網域與 proxy-server-nameserver;逾時檢查網路與遠端位址;遭拒通常表示目標連接埠沒有接受連線;握手失敗檢查系統時間、SNI 與憑證;驗證失敗檢查密碼、使用者識別與協定欄位。不同錯誤不能用相同的修復方式處理。

節點測試成功但目標網站失敗時,查看連線記錄中的命中規則與策略。若命中 DIRECT,問題在規則順序或模式;若命中預期節點,繼續檢查目標網域解析、節點出口與網站端限制。暫時切換到全域模式可用於區分規則問題,但測試後應恢復規則模式。全域模式能存取並不代表原規則正確,只表示某個代理路徑可用。

現象 優先檢查 下一步
設定無法載入 縮排、重複鍵、欄位型別 縮小至最小可解析設定
用戶端執行中但瀏覽器中斷連線 監聽連接埠與系統代理連接埠 確認本機連接埠沒有衝突
網域失敗但 IP 可連線 DNS 監聽、解析器與快取 簡化 DNS 後逐項恢復
全域可用、規則模式失敗 規則順序與策略目標 查看連線記錄中的命中項目
更新訂閱後本地規則消失 覆寫方式與合併順序 比較最終執行設定

建立最小可工作的設定

複雜設定無法定位問題時,可以從一個連接埠、一個節點、一個手動策略組與兩條規則開始。確認它能載入並連線後,再依序加入 DNS、自動策略、規則提供者與 TUN。每加入一層就保存可正常工作的副本。這個過程比在數千行訂閱中反覆猜測更快,也能明確了解用戶端與核心實際支援哪些欄位。

最小設定測試使用的節點必須確認資訊完整,測試網域也應保持穩定。若最小設定仍然失敗,問題多半不在規則集,而在節點、系統網路、權限或用戶端安裝。此時可回到使用文件核對初始化步驟,或閱讀訂閱、模式與連線狀態十問。需要重新安裝時,從下載中心選擇對應平台,桌面與行動平台都優先查看 Clash Plus。

完成疑難排解後,應將暫時的 debug 記錄、寬泛測試規則與憑證驗證變更恢復為正常設定。刪除不再使用的連接埠、重複策略組與失效提供者,並為自訂部分寫上簡短註解。設定的長期可維護性取決於每個模組都有清楚職責,而不是欄位數量。能夠說明每條規則為何存在、每個組引用誰、每個 DNS 解析器負責什麼,才是一份可以持續更新的設定。

從可執行設定繼續

尚未安裝用戶端時,先依平台取得安裝包;已完成安裝但不熟悉介面操作時,依快速入門流程匯入訂閱、選擇策略並驗證連線。