CONFIG.YAML · REFERENCE

Clash 設定檔
欄位參考

從頂層 YAML 結構開始,逐項查閱連接埠、運作模式、DNS、代理節點、策略群組、規則與 Provider。範例採用可解析的欄位層級,適合核對現有設定,也適合定位匯入失敗、規則未命中與 DNS 異常。

YAML DNS PROXIES GROUPS RULES

本頁定位是系統查閱手冊,不取代首次安裝流程。尚未完成用戶端安裝、訂閱匯入和系統代理啟用時,先按使用文件走完最短主線;需要選擇 Clash Plus、Clash Verge Rev、FlClash 或其他平台用戶端時,前往安裝包頁面。當設定已能載入,但需要理解某個欄位為何生效、如何組合或怎樣排錯時,再按下方目錄定位到對應章節。

01 · DOCUMENT MODEL

YAML 結構與設定載入順序

頂層欄位不是執行步驟

Clash 設定檔通常命名為 config.yaml,內容由一組頂層鍵組成。常見頂層包括連接埠、運作模式、DNS、代理節點、策略群組、規則以及外部 Provider。它們在檔案中的先後位置主要是為了方便閱讀,並不表示核心嚴格按照書寫順序逐行執行。解析器會先讀取完整 YAML,建立設定物件,再驗證策略群組引用、規則目標與 Provider 定義。因此,把 rules 寫在 proxies 前面未必會直接報錯,但會明顯降低人工檢查效率。建議依照「基礎運作參數 → DNS → 節點 → 策略群組 → Provider → 規則」的順序組織。

YAML 使用縮排表示父子層級,不能以定位字元取代空格。同一層級必須維持相同的縮排寬度,通常使用兩個空格。列表項目以連字號開頭,連字號後的物件仍須遵守縮排。字串大多可以不加引號,但值中含有冒號、井號、大括號、前後空格或容易被識別為布林值的詞時,加上引號更穩妥。例如節點名稱寫成 "HK: Premium",可避免冒號被解讀為鍵值分隔符;密碼包含 # 時也應加上引號,否則井號之後可能被當成註解。

port: 7890
socks-port: 7891
allow-lan: false
mode: rule
log-level: info

dns:
  enable: true
  enhanced-mode: fake-ip

proxies:
  - name: "Example-SS"
    type: ss
    server: 203.0.113.10
    port: 443
    cipher: aes-128-gcm
    password: "your-password"

proxy-groups:
  - name: "節點選擇"
    type: select
    proxies:
      - "Example-SS"
      - DIRECT

rules:
  - MATCH,節點選擇

純量、列表與映射的差異

mode: rule 是純量;rules 下的多行項目是列表;dns 下由多個鍵值對組成的是映射。設定錯誤經常來自三種結構混用。例如 nameserver 要求列表,如果寫成單一且沒有連字號的字串,某些核心會拒絕載入;proxy-groups 是物件列表,每個策略群組都需要自己的 nametype。遇到「欄位類型不正確」時,不要只檢查欄位拼寫,還要確認它應該是字串、數字、布林值、列表還是物件。

YAML 中的 truefalse 不應加上引號,因為布林值與字串的語意不同。連接埠通常寫成數字。網域、節點名稱、正規表示式和密碼更適合以字串處理。空值也需要謹慎:只有鍵而沒有值,並不等同於空列表。需要明確清空某項時,覆寫系統可能要求 []{},具體取決於目標欄位類型。

引用關係與最終設定

策略群組透過名稱引用節點或其他策略群組,規則末尾再引用策略群組名稱。名稱必須精確匹配,空格、大小寫和全形符號都屬於名稱的一部分。若規則寫著 DOMAIN-SUFFIX,example.com,國外節點,但策略群組實際名稱是「境外節點」,核心無法自動推斷兩者等價。訂閱更新後節點名稱變更,也可能讓手寫的策略群組失去引用目標。

圖形化用戶端顯示的設定不一定就是核心最終讀取的內容。訂閱原文可能先經過用戶端的全域覆寫、腳本處理、代理群組產生和欄位相容性轉換,再產生執行時設定。排錯時應優先尋找「查看最終設定」、「執行設定」或日誌中的載入路徑,而不是只看訂閱編輯器。若用戶端提供設定語法檢查,應先解決解析錯誤,再觀察規則與網路行為;一個縮排錯誤會阻止整個檔案載入,後續網路測試便沒有參考價值。

02 · RUNTIME

連接埠、模式與通用欄位

入站連接埠如何分工

port 是 HTTP 代理連接埠,socks-port 是 SOCKS5 代理連接埠,mixed-port 可在同一個連接埠接受 HTTP 與 SOCKS5 請求。桌面用戶端通常只需啟用混合連接埠,方便系統代理和命令列工具共用同一入口。不要讓多個欄位使用同一個連接埠,也不要與其他代理軟體、開發伺服器或已啟動的 Clash 執行個體衝突。連接埠衝突時,用戶端介面可能仍顯示設定已匯入,但日誌會出現監聽失敗,系統代理之後便會指向無法正常工作的入口。

redir-porttproxy-port 與 TUN 入站面向透明代理情境,主要由路由器、Linux 閘道或用戶端自動管理。一般 macOS 與 Windows 使用者不需要為了「涵蓋更全面」而同時手動啟用所有連接埠。系統代理模式會處理遵循系統代理設定的應用程式;TUN 模式則透過虛擬網路介面接管更廣泛的流量。兩者可由用戶端依平台能力設定,但連接埠欄位本身不能取代 TUN 驅動程式與路由設定。

欄位 用途 常見使用位置 檢查重點
mixed-port 同時接受 HTTP 與 SOCKS5 桌面用戶端、本機應用程式 避免與其他程序佔用同一個連接埠
port HTTP 代理入口 系統代理、瀏覽器、命令列 系統代理位址需與欄位一致
socks-port SOCKS5 代理入口 開發工具與支援 SOCKS 的應用程式 應用程式端的協定類型不能選錯
allow-lan 允許區域網路裝置存取入站 區域網路共用代理 搭配監聽位址與系統防火牆

allow-lan 與監聽範圍

allow-lan: true 表示允許區域網路存取,但其他裝置是否真的能夠連線,還取決於 bind-address、作業系統防火牆、網路介面與路由器隔離策略。只在本機使用時保持關閉,更容易控制暴露範圍。需要共用時,應確認目前網路可信,並為外部控制介面設定驗證。代理入站與控制介面是兩類服務:開放代理連接埠不代表應該同時把控制 API 暴露在區域網路中。

external-controller 定義外部控制介面,例如 127.0.0.1:9090。圖形化面板透過它讀取連線、切換策略和重新整理設定。繫結至迴路位址時只有本機可存取;繫結至所有介面前,需要理解 secret 的驗證作用並檢查防火牆。若介面可以啟動但無法顯示節點和連線,先核對控制位址是否被佔用、用戶端填寫的控制連接埠是否一致,以及驗證值是否匹配。

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"

運作模式、日誌與 IPv6

mode 常見值為 ruleglobaldirect。規則模式依 rules 由上至下匹配;全域模式把流量交給全域策略;直連模式跳過代理。日常使用應以規則模式為主,全域模式適合暫時判斷「規則問題還是節點問題」,直連模式可用來確認應用程式本身的網路是否正常。把全域模式當成長期設定,會繞過精細分流,也會掩蓋規則編寫錯誤。

log-level 可控制日誌詳細程度。正常運作使用 info 較合適,排查規則命中、DNS 或握手問題時,可以暫時調整為 debug。詳細日誌可能快速增加,也可能包含存取網域和節點名稱,完成定位後應恢復一般層級。ipv6 決定核心是否啟用相關解析與連線能力,但它不是單獨的網路修復開關;本地網路、DNS 回應、代理節點與規則都需要同時支援。遇到 IPv6 路徑不穩定時,可以先關閉進行對照測試,再決定是否長期調整。

修改設定後,要區分「儲存成功」、「重新載入成功」和「流量已經經過新設定」三種狀態。部分用戶端只儲存文字,不會立即重新載入;部分用戶端在語法錯誤時會保留上一份可運作設定。最可靠的確認方式是查看重新載入日誌、核對目前模式與連接埠,並發起一次可識別的存取來觀察規則命中。若連接埠設定仍不明確,可搭配疑難解答中的系統代理與連接埠問題逐項檢查。

03 · NAME RESOLUTION

Clash DNS、Fake-IP 與解析鏈路

DNS 模組位於哪個環節

啟用 Clash DNS 後,網域解析不再只是作業系統向某個伺服器傳送查詢。核心可以根據規則選擇上游、快取結果,並在 Fake-IP 模式下維護網域與保留位址之間的映射。理解這點有助於區分三類問題:上游 DNS 無法存取、網域被解析到不合適的位址,以及應用程式繞過 Clash 直接發起加密 DNS。代理連線正常但網頁無法開啟時,不應直接把所有故障歸因於節點;需要同時檢查 DNS 監聽、系統 DNS 指向和規則路徑。

dns.enable 控制模組是否啟用,listen 指定監聽位址與連接埠。桌面圖形化用戶端可能自動接管系統 DNS,此時手動修改監聽連接埠會與用戶端管理邏輯衝突。路由器或區域網路服務情境才更常需要明確設定監聽位址。若繫結至區域網路介面,還要確認連接埠未被系統解析服務佔用,並控制可存取範圍。

Fake-IP 與 Redir-Host

enhanced-mode: fake-ip 會先向應用程式回傳一段保留位址,再由 Clash 根據映射還原原始網域並執行規則匹配。它的優點是完整保留網域資訊,規則判斷及時,也減少等待真實位址解析後再轉送的步驟。代價是少數依賴真實位址、區域網路探索或特殊協定的應用程式可能不相容,需要透過 fake-ip-filter 排除。redir-host 更接近傳統的真實位址解析路徑,相容性思路不同,但網域識別與連線鏈路也會受到系統快取和解析時序影響。

fake-ip-range 用於指定保留位址範圍。通常沿用用戶端或核心預設值即可,不應與本地真實網段、VPN 位址池或企業網路路由重疊。若存取某個區域網路網域後被回傳保留位址,優先將該網域加入過濾清單,而不是任意更換整個位址段。過濾規則應盡量精確:單一主機寫完整網域,需要涵蓋子網域時使用支援的萬用字元形式,並在修改後清除應用程式與系統 DNS 快取。

dns:
  enable: true
  listen: 127.0.0.1:1053
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "time.*.com"
  default-nameserver:
    - 223.5.5.5
    - 1.1.1.1
  nameserver:
    - https://dns.alidns.com/dns-query
    - https://cloudflare-dns.com/dns-query
  proxy-server-nameserver:
    - https://dns.alidns.com/dns-query

三組上游欄位如何搭配

default-nameserver 主要用於解析加密 DNS 上游本身的網域,因此通常填寫可直接存取的 IP 位址。若把所有項目都寫成網域,就可能形成「需要先解析 DNS 伺服器網域,但目前尚無可用解析器」的循環。nameserver 是主要查詢上游,可使用一般 UDP、DoT 或 DoH 位址。proxy-server-nameserver 用於解析代理節點伺服器網域,避免節點網域解析與代理鏈形成依賴。節點伺服器已是 IP 位址時,這一層的影響較小;節點伺服器是網域時則非常關鍵。

nameserver-policy 可以依網域指定不同上游,適合企業內網網域、地域解析或需要獨立處理的服務。它解決的是「查詢交給誰」,不直接決定最終連線經過哪個策略群組。連線分流仍由規則負責。不要把 DNS policy 與代理 rule 混為同一套語法,也不要僅憑解析結果判斷代理是否生效。

dns:
  nameserver-policy:
    "geosite:cn":
      - https://dns.alidns.com/dns-query
    "internal.example":
      - 192.0.2.53
  fallback:
    - tls://1.1.1.1
  fallback-filter:
    geoip: true
    geoip-code: CN

DNS 排錯應依鏈路進行

第一步確認 Clash DNS 是否實際監聽,第二步確認系統或 TUN 流量是否送到該監聽點,第三步觀察查詢使用了哪個上游,最後再檢查連線規則。只修改瀏覽器快取或頻繁切換節點,無法定位 DNS 層問題。日誌若出現上游逾時,應測試該上游在目前網路下能否直接連線;若網域能解析但連線失敗,應繼續檢查規則命中、IPv4 與 IPv6 選擇、節點可用性。若只有個別應用程式異常,還要考慮該應用程式內建的 DoH、QUIC 或快取機制。

04 · OUTBOUND

代理節點欄位與協定參數

所有節點共有的識別欄位

proxies 是代理節點物件列表。每個物件至少包含唯一的 name、協定 type、伺服器 server 與連接埠 port,其餘欄位由協定決定。節點名稱是設定內部的引用鍵,不只是介面標籤。兩個節點使用同名會造成策略群組引用不明,訂閱與本機節點重名也可能在合併時互相覆蓋。建議名稱同時呈現地區、線路或用途,但不要把會頻繁變化的狀態寫進名稱。

server 可以是 IP 位址或網域。使用網域時,需要確保前一章提到的節點網域解析鏈可用。連接埠是遠端服務連接埠,不是本機的 mixed-port。混淆兩者是手動輸入時常見的錯誤。協定欄位必須與伺服器端設定一致,不能透過試改加密方式或傳輸類型來「自動探測」。驗證失敗、TLS 握手失敗與網路逾時代表不同階段,應配合日誌判斷。

Shadowsocks 與 VMess 範例

Shadowsocks 節點主要要注意加密方法與密碼。cipher 必須是核心支援且與伺服器端相同的值。密碼建議一律加上引號,避免特殊字元被 YAML 解讀。若伺服器端還使用外掛程式,需要同時填寫外掛程式名稱與選項,不能只複製伺服器、連接埠和密碼。外掛程式參數通常是映射物件,層級錯誤會導致外掛程式未載入或節點無法使用。

proxies:
  - name: "SS-Example"
    type: ss
    server: 203.0.113.20
    port: 443
    cipher: aes-128-gcm
    password: "your-password"
    udp: true

  - name: "VMess-Example"
    type: vmess
    server: edge.example.com
    port: 443
    uuid: 00000000-0000-4000-8000-000000000000
    alterId: 0
    cipher: auto
    tls: true
    servername: edge.example.com
    network: ws
    ws-opts:
      path: /proxy
      headers:
        Host: edge.example.com

VMess 除了身分欄位外,還可能包含 TLS、WebSocket、HTTP 或 gRPC 等傳輸設定。servername 用於 TLS SNI,WebSocket 的 Host 屬於 HTTP 請求標頭,兩者可能相同,但語意不同。路徑要保留開頭斜線,並與伺服器端入口一致。舊設定中可能出現歷史相容欄位,匯入新核心前應以服務提供者給出的目前參數為準,而不是從其他協定範本拼接。

Trojan、VLESS 與 TLS 相關欄位

Trojan 通常使用密碼驗證並依賴 TLS;VLESS 使用 UUID,並可組合不同傳輸與流控。TLS 類節點最常見的故障是伺服器位址、憑證名稱與 SNI 不一致。skip-cert-verify 會改變憑證驗證行為,不應作為長期修復手段。若憑證驗證失敗,應先確認裝置時間、伺服器端憑證、網域和 servername。只有明確知道測試環境使用哪種憑證時,才適合暫時調整並記錄原因。

  - name: "Trojan-Example"
    type: trojan
    server: gateway.example.com
    port: 443
    password: "your-password"
    sni: gateway.example.com
    udp: true
    skip-cert-verify: false

  - name: "VLESS-Example"
    type: vless
    server: vless.example.com
    port: 443
    uuid: 00000000-0000-4000-8000-000000000001
    tls: true
    servername: vless.example.com
    network: grpc
    grpc-opts:
      grpc-service-name: proxy

UDP、介面與撥號行為

udp: true 表示節點允許轉送 UDP,但伺服器端、協定、用戶端模式和本地網路也必須支援。僅增加此欄位,不會讓不支援 UDP 的線路獲得相應能力。涉及遊戲、語音或 DNS 時,可以從日誌確認流量是否經由 UDP,並檢查策略群組選中的節點是否具備支援能力。某些設定還提供 interface-namerouting-mark 或撥號相關欄位,它們更適合多網卡與閘道環境,桌面使用者不應在不清楚介面名稱的情況下照抄。

節點能通過延遲測試,只能說明特定測試 URL 當時可以建立請求,不代表所有協定與網站都正常。測試位址、TLS 路徑、丟包和頻寬都會影響結果。可繼續閱讀Clash 延遲測試數字怎麼看,再結合實際存取與日誌判斷。若需要更換用戶端進行對照,本網站下載清單維持 Clash Plus 為各平台首推,同時列出 Clash Verge Rev、FlClash、Clash Nyanpasu、ClashX Meta 等適用選項。

05 · POLICY

策略群組欄位與選擇邏輯

select:明確的手動選擇

策略群組會把節點、內建動作和其他策略群組組織成規則可引用的出口。select 是最直接的類型,使用者可在用戶端介面手動選擇其中一項,選擇結果通常由用戶端持久化。它適合總入口、地區選擇和需要固定線路的服務。群組內的 proxies 依名稱引用現有節點或策略群組,也可以包含 DIRECTREJECT 等內建動作。被引用的物件必須已存在於最終設定中。

策略群組可以巢狀,例如「節點選擇」引用「香港自動」、「日本自動」和「手動選擇」。巢狀能減少規則重複,但層級過深會增加排錯成本。判斷某條連線最終走向時,需要從規則目標開始,依序展開每一層策略群組,直到具體節點或內建動作。命名應反映功能,不要讓多個群組都叫「自動選擇」而無法區分測試範圍。

url-testfallbackload-balance

url-test 會定期請求指定 URL,根據測試結果選擇符合條件的節點。interval 是測試週期,tolerance 用於減少延遲接近時的頻繁切換。測試過於頻繁會增加請求和耗電量,測試間隔過長則無法及時反映線路變化。測試 URL 應穩定、回應內容小,並能代表實際出口連線能力。不要使用需要登入、重新導向複雜或受地區限制明顯的頁面。

fallback 更強調可用性順序:目前節點不可用時切換到後續可用項目。load-balance 會依策略將連線分配到多個節點,適合明確理解工作階段一致性要求的情境。需要固定來源位址的登入、付款或長連線服務,不適合任意使用負載平衡。自動群組的測試結果也不應解讀為真實瀏覽速度排名;它只對應測試位址與當次網路條件。

proxy-groups:
  - name: "節點選擇"
    type: select
    proxies:
      - "香港自動"
      - "手動選擇"
      - DIRECT

  - name: "手動選擇"
    type: select
    proxies:
      - "SS-Example"
      - "Trojan-Example"
      - "VLESS-Example"

  - name: "香港自動"
    type: url-test
    proxies:
      - "SS-Example"
      - "Trojan-Example"
    url: https://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50

透過 Provider 動態引入節點

節點來自訂閱 Provider 時,策略群組可以使用 use 引用 Provider 名稱,不必把每個節點寫進 proxies。部分核心還支援 filterexclude-filter 依名稱篩選。篩選通常使用正規表示式,字元範圍與括號必須正確轉義。訂閱命名不一致時,只靠「港」或「HK」可能漏掉節點,也可能誤選包含相同字元的說明項目。應先查看實際節點名稱,再建立篩選表達式。

proxy-groups:
  - name: "香港節點"
    type: select
    use:
      - provider-main
    filter: "(?i)香港|港|HK|Hong Kong"
    exclude-filter: "(?i)遊戲|剩餘|到期"

  - name: "故障切換"
    type: fallback
    use:
      - provider-main
    url: https://www.gstatic.com/generate_204
    interval: 600

健康檢查與連線保持

Provider 的健康檢查與策略群組本身的 URL 測試可能同時存在。前者用於維護節點可用狀態,後者用於群組內選擇;重複且高頻的測試會產生不必要的請求。設計設定時應明確由哪一層負責檢查,並合理設定週期。切換策略群組不保證既有連線會立即遷移,瀏覽器連線池、QUIC 和長連線可能繼續使用舊出口。驗證切換結果時,可關閉原有連線、重新發起請求,必要時清除應用程式連線池,而不是只看介面選項。

規則引用的策略群組應長期存在。訂閱更新可以改變節點列表,但不應任意改變規則目標群組名稱。一個穩定結構通常包含總入口、自動群組、手動群組、直連與拒絕處理,再依業務增加串流媒體、即時通訊或開發服務群組。群組越多不代表分流越準確;只有確實被規則引用且用途清楚的群組才有維護價值。

06 · ROUTING

Clash 規則分流語法與優先順序

規則由上至下首次命中

rules 是有序列表。連線資訊符合某條規則後,核心會使用該條指定的策略,不再繼續檢查後面的普通規則。因此,具體規則應放在寬泛規則之前,兜底的 MATCH 必須位於末尾。例如先寫 DOMAIN-SUFFIX,example.com,DIRECT,再寫 MATCH,節點選擇,目標網域會直連;順序相反時,前面的 MATCH 會接收所有流量,後續規則永遠沒有機會執行。

一條典型規則由「規則類型、匹配內容、策略目標」組成,部分類型還可以附加參數。逗號是欄位分隔符,策略群組名稱必須與設定完全一致。規則列表中的每一行都要作為 YAML 字串項目出現。網域規則不應附帶協定標頭、路徑或連接埠;需要匹配 https://sub.example.com/path 時,應擷取主機名稱,並選擇完整網域、後綴或關鍵字規則。

網域、位址與程序規則

DOMAIN 精確匹配完整網域,DOMAIN-SUFFIX 匹配指定網域及其子網域,DOMAIN-KEYWORD 依網域中出現的關鍵字匹配。後綴規則通常比關鍵字規則更可控。關鍵字過短會擴大命中範圍,例如使用常見的兩個字母,可能誤傷無關網域。需要涵蓋某項服務時,先收集實際請求網域,再決定精確規則與後綴規則的組合。

IP-CIDRIP-CIDR6 依位址段匹配。網域連線是否進入位址規則,取決於解析流程和 no-resolve 參數。對不希望觸發額外 DNS 解析的位址規則,可在支援的語法中使用 no-resolveGEOIP 依位址歸屬資料庫分類,結果受資料庫來源與更新狀態影響,不應視為業務歸屬的絕對判斷。PROCESS-NAMEPROCESS-PATH 等程序規則依賴作業系統與用戶端權限,在行動裝置、沙盒環境或 TUN 實作中的支援程度可能不同。

rules:
  - DOMAIN,api.example.com,節點選擇
  - DOMAIN-SUFFIX,example.net,節點選擇
  - DOMAIN-KEYWORD,cdn-example,節點選擇
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR6,fc00::/7,DIRECT,no-resolve
  - GEOIP,CN,DIRECT
  - MATCH,節點選擇

規則集合與邏輯組合

大型規則不適合全部寫在主設定中,可以透過 RULE-SET 引用規則 Provider。規則集合只保存匹配條件,主設定負責指定策略目標,讓同一份集合在不同裝置上選擇不同出口。使用時要確認 Provider 的 behavior 與檔案內容一致:domain 適合網域項目,ipcidr 適合位址段,classical 支援完整經典規則。類型不匹配時,檔案可能成功下載,卻無法按預期解析。

部分核心支援 ANDORNOT 等邏輯規則。它們適合表達「某個程序存取某個網域」之類的組合條件,但可讀性和跨用戶端相容性低於基礎規則。只有基礎類型無法準確描述需求時才應引入,並在旁邊記錄用途。規則複雜度增加後,命中日誌比肉眼推斷更可靠。

rules:
  - RULE-SET,private,DIRECT
  - RULE-SET,applications,DIRECT
  - RULE-SET,streaming,媒體服務
  - RULE-SET,global,節點選擇
  - GEOIP,CN,DIRECT
  - MATCH,節點選擇

規則未命中的定位方法

先從連線日誌取得實際網域、目標位址、程序和命中的規則,再回到設定檢查。瀏覽器網址列中的主網域不代表頁面只存取這一項,腳本、圖片、驗證和 API 可能分布在多個網域。若日誌只顯示 IP,需要檢查 DNS 是否由 Clash 接管,或應用程式是否直接使用位址連線。若預期規則位於 MATCH 後面,移動順序即可解釋問題;若規則目標群組不存在,則需要修正引用。

規則分流的目標是穩定、可解釋,而不是越多越好。區域網路與保留位址通常優先直連,明確的業務規則居中,地區位址規則靠後,MATCH 負責兜底。每次新增規則後應驗證正向命中與反向影響:目標服務是否前往預期群組,無關服務是否被過寬條件帶走。出現連線代理後仍無法存取網頁的綜合問題時,可按逐項排查清單檢查系統代理、連接埠、節點、DNS 與規則。

07 · EXTERNAL SOURCES

Proxy Provider 與規則集合

Provider 解決什麼問題

proxy-providers 將外部節點來源與主設定分離。主設定保留策略群組和規則結構,Provider 定期更新節點清單。這樣可以在訂閱變更時維持穩定的策略群組名稱,也方便讓多個自動群組引用同一份節點來源。Provider 名稱是內部引用鍵,應保持穩定;更換訂閱位址不需要同時修改所有策略群組,只需更新對應的 Provider 定義。

常見 type 包括 httpfile。HTTP 類型透過 URL 取得,檔案類型讀取本機路徑。path 指定快取或本機檔案位置,多個 Provider 不應寫入同一個路徑。interval 控制遠端更新週期,設定過短會頻繁請求,設定過長則無法及時接收上游調整。若用戶端有自己的訂閱更新排程,還要確認它是否會覆蓋核心欄位。

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

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

Provider 檔案格式與健康檢查

代理 Provider 回傳的內容應符合核心要求,通常包含以 proxies 為鍵的節點列表,而不是完整的主設定。把一般訂閱連結、Base64 節點列表或完整設定直接當成 Provider 檔案,不一定能被目前核心識別。格式轉換應在可信且可控的環節完成,並檢查節點欄位是否在轉換過程中遺失。關於訂閱格式差異,可繼續閱讀Clash 訂閱與其他連結格式如何互相轉換

health-check 定期驗證 Provider 內的節點。測試 URL 與週期的選擇原則和自動策略群組相同。健康檢查失敗不一定表示訂閱下載失敗:前者是節點測試,後者是 Provider 檔案取得。日誌中應區分 HTTP 更新狀態、檔案解析狀態和節點測試結果。若更新後節點數量為零,先查看快取檔案是否實際寫入,再核對格式與篩選表達式。

rule-providers 的行為類型

規則 Provider 透過 behavior 宣告內容類型。domain 檔案通常保存網域或網域集合,ipcidr 保存 IPv4 與 IPv6 位址段,classical 保存帶類型的完整規則。format 可用於區分 YAML、文字或核心支援的二進位格式。引用時,主規則使用 Provider 名稱並指定策略群組,例如 RULE-SET,private,DIRECT。策略不會固化在 Provider 檔案中,這正是外部規則可以重複使用的原因。

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

  local-network:
    type: file
    behavior: ipcidr
    format: yaml
    path: ./rules/local-network.yaml

rules:
  - RULE-SET,private,DIRECT
  - RULE-SET,local-network,DIRECT,no-resolve
  - MATCH,節點選擇

更新失敗、快取與回退

Provider 更新失敗時,核心通常會嘗試繼續使用既有快取,但具體行為取決於用戶端與快取是否完整。首次載入時沒有快取,遠端位址無法存取會直接導致對應節點或規則缺失;曾成功運作過的裝置則可能繼續使用舊檔案。排錯時要記錄「從未成功下載」還是「之前可用、目前更新失敗」,兩者的處理路徑不同。

遠端規則與節點來源應使用穩定的 HTTPS 位址。URL 中的查詢參數可能包含訂閱識別資訊,不適合寫入公開日誌、截圖或共用設定。需要分享設定結構時,應替換位址和驗證內容,但保留欄位層級。路徑也要考慮用戶端工作目錄:相對路徑由核心執行目錄解析,不一定相對於使用者看到的訂閱檔案。遇到找不到檔案時,查看日誌提供的絕對路徑,比反覆修改 ./ 更有效。

多個 Provider 合併後,節點仍可能重名。策略群組篩選只看最終名稱,無法區分同名節點來自哪個來源。可以由用戶端為不同 Provider 覆寫並加上前綴,或在訂閱管理階段統一命名。更系統化的多設定管理方法可參考Profile 結構入門與多設定管理

08 · MAINTENANCE

設定覆寫、合併與系統排錯

為什麼需要覆寫層

訂閱設定會在更新時被上游內容取代,直接編輯訂閱正文容易遺失本機修改。覆寫層用於將穩定的本機設定與遠端設定分開,例如連接埠、DNS、策略群組補充和規則前置。不同用戶端對覆寫的稱呼可能是 Override、Mixin、Merge、擴充腳本或設定增強,合併語意也不完全相同。使用前必須確認它採用物件遞迴合併、陣列取代、陣列追加還是腳本處理。

映射欄位通常可以依鍵覆蓋,例如只修改 dns.enable 而保留其他 DNS 子項;陣列欄位則更容易產生差異。若 rules 被整體取代,原訂閱規則會消失;若採用追加,本機規則可能被放在 MATCH 後面而永遠不會命中。策略群組和節點也屬於列表,依名稱合併還是依位置合併會直接影響結果。因此,完成覆寫後必須查看最終設定,而不是只確認覆寫文字的語法正確。

# 範例:概念性覆寫內容,實際合併方式由用戶端決定
mode: rule
log-level: info

dns:
  enable: true
  enhanced-mode: fake-ip

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

規則前置、追加與刪除

本機規則通常需要放在訂閱規則之前,尤其是要覆蓋寬泛規則時。支援 prepend 與 append 的用戶端,應把精確例外放在 prepend,把真正的補充兜底放在 append。若用戶端只支援取代整個陣列,就要明確承擔後續規則維護。刪除某個遠端規則通常不能靠增加一條相反規則「消除」,只能在它之前增加更精確的規則,或使用用戶端提供的過濾腳本。

清空欄位時要使用正確類型。清空列表一般寫 [],清空映射一般寫 {},刪除鍵則取決於覆寫實作。把欄位寫成 null 可能代表刪除,也可能把空值傳給核心並觸發類型錯誤。對於不熟悉的合併器,先用一個不重要的小欄位測試,比較合併前後結果,再處理完整規則與策略群組。

從語法到網路的四層檢查

第一層是 YAML 解析。檢查縮排、冒號、列表符號、引號與欄位類型。此層失敗時,用戶端通常會回報行號,但實際原因可能位於上一行,例如引號未閉合。第二層是設定引用。檢查策略群組是否引用存在的節點或 Provider,規則目標是否存在,Provider 路徑是否衝突。第三層是執行時監聽。檢查代理連接埠、控制連接埠、DNS 連接埠與 TUN 是否成功啟動。第四層才是網路行為,包括節點握手、DNS 上游、規則命中和應用程式是否使用系統代理。

現象 優先檢查 下一步
設定無法匯入 YAML 縮排、欄位類型、引號 依日誌行號向上檢查相鄰物件
設定載入但節點為空 Provider 下載、格式、篩選表達式 查看快取檔案與更新日誌
啟用系統代理後無法存取 監聽連接埠、模式、節點、DNS 分別以直連、全域、規則模式進行對照
特定網站使用錯誤策略 實際網域、規則順序、MATCH 位置 根據連線日誌增加精確規則
切換節點後行為沒有變化 上層策略群組與既有連線 展開群組引用並重新建立連線

最小化設定定位法

複雜設定出現問題時,可以複製一份本機測試設定,只保留一個已知節點、一個 select 策略群組、一條 MATCH 規則和必要的連接埠欄位。先驗證代理鏈路,再逐步加入 DNS、Provider 與規則集合。每加入一部分就重新載入並測試,故障首次出現的位置就是主要調查範圍。這種方法比同時切換多個節點、DNS 與運作模式慢一些,但結果可重複,也能避免問題偶然恢復後無法解釋原因。

mixed-port: 7890
mode: rule
log-level: debug

proxies:
  - name: "Test-Node"
    type: ss
    server: 203.0.113.30
    port: 443
    cipher: aes-128-gcm
    password: "your-password"

proxy-groups:
  - name: "TEST"
    type: select
    proxies:
      - "Test-Node"
      - DIRECT

rules:
  - MATCH,TEST

測試完成後,再恢復一般日誌層級,並把驗證過的修改放回穩定覆寫層。若問題只發生在某個平台,還要考慮系統代理實作、權限、TUN 驅動程式和應用程式網路堆疊差異。Windows 的完整安裝與系統代理問題可參考Windows 安裝 Clash 完整流程;一般問題則可在疑難解答中依基礎認知、安裝設定、使用技巧和故障排查分類繼續定位。

維護一份可長期更新的設定

穩定設定應將上游資料與本機意圖分開:訂閱或 Provider 管理節點,主設定管理策略群組與規則,覆寫層保存裝置差異。為策略群組使用穩定名稱,為自訂規則記錄原因,避免重複定義連接埠和 DNS。訂閱更新後檢查最終設定中的節點數量、策略群組引用和 MATCH 位置;用戶端升級後則重點檢查欄位相容性與覆寫合併結果。

需要遷移裝置時,不要只複製單一 YAML。還應記錄 Provider 快取是否可重新下載、用戶端是否儲存策略選擇、系統代理與 TUN 權限如何設定。設定檔描述的是核心行為,作業系統授權和用戶端介面狀態並不完全包含其中。依照這個界線維護,發生問題時才能判斷應修改 YAML、用戶端設定還是系統網路。

NEXT STEP

繼續安裝或完成首次設定

需要用戶端安裝包時,依平台進入下載頁;尚未完成訂閱匯入、節點選擇與系統代理設定時,依快速入門主線操作。