ADVANCED CONFIGURATION

Clash 設定進階手冊

適用於需要維護規則、DNS、TUN 與多份訂閱的情境。設定項目依資料流順序拆解,範例主要採用相容 Mihomo 的語法;不同客戶端提供的圖形介面名稱可能有所不同,最終行為以核心實際載入的設定為準。

READING PATH

快速入門與完整查閱的分工

如果只是要匯入訂閱、選擇節點並啟用系統代理,請先依照使用文件完成基本連線。本頁不重複說明按鈕位置與首次執行流程,而是解釋設定檔如何由核心解析、規則為何命中某個策略、DNS 與 TUN 如何影響實際連線,以及多訂閱環境如何維持可維護性。遇到匯入失敗、節點逾時或系統代理異常時,也可查閱疑難解答

修改前應保留目前可正常運作的設定副本。每次只調整一個功能範圍,先驗證 YAML 語法,再啟動核心並觀察日誌。不要在一次提交中同時重寫策略組、DNS 與 TUN;否則發生連線故障時,很難判斷是解析階段、網域解析階段,還是路由接管階段出現偏差。

SECTION INDEX

章節目錄

設定模型、載入順序與驗證基準

先區分客戶端、核心與設定來源

Clash 生態中的桌面或行動客戶端負責訂閱管理、設定編輯、系統權限申請與介面呈現,實際處理連線的是核心。Clash Plus、Clash Verge Rev、FlClash、Clash Nyanpasu 等客戶端都可能呼叫相容核心,但各自對訂閱覆寫、設定合併與外部介面的實作方式不同。排查時必須先確認問題屬於哪一層:下載與安裝問題屬於客戶端層,YAML 欄位無法辨識屬於核心與設定層,節點本身無法使用則屬於代理鏈路。將三層混在一起判斷,常見結果是反覆更換客戶端,卻沒有修正錯誤規則。

設定通常來自四類來源:客戶端自行產生的基礎欄位、訂閱回傳的節點與策略、使用者撰寫的本機覆寫,以及執行時狀態。執行時狀態包括目前選取的策略、快取的規則集與 DNS 對映,不一定會完整寫回 YAML。部分客戶端更新訂閱時會重新產生設定;若直接編輯產生後的暫存檔案,下次更新可能覆蓋修改。長期設定應放在客戶端明確提供的覆寫、合併或腳本入口;只供測試的變更才適合直接編輯目前設定。

理解從入站到出站的資料路徑

連線進入核心後,通常會依序經歷入站識別、網域還原或嗅探、規則比對、策略組決策與代理出站。啟用 TUN 後,系統路由會先將流量交給虛擬介面;啟用 Fake-IP 後,DNS 查詢可能先取得保留位址,再由核心依據對映表還原原始網域。規則中的 DOMAIN-SUFFIXGEOSITE 或網域規則集依賴網域資訊,而 IP-CIDRGEOIP 則處理目標位址。理解這條路徑後,才能解釋為何同一個應用程式在系統代理模式下正常,切換到 TUN 模式後卻命中不同規則。

規則會依順序比對,首條命中後便停止繼續檢查。因此具體網域、業務專用規則與攔截規則應放在通用地域規則之前,MATCH 必須置於末尾。策略組只是規則的目標名稱,不會主動比對流量。例如規則寫成 DOMAIN-SUFFIX,example.com,工作流量 後,設定中必須存在名稱完全相同的策略組或代理節點;全形空格、大小寫差異與重新命名遺漏,都可能造成載入失敗或無法選取。

建立最小可運作的設定

複雜設定不應直接從數百行範本開始。先保留一個監聽連接埠、一組節點來源、一個手動選擇組與一條兜底規則,確認設定能載入並完成連線後,再逐步加入規則集、DNS 與 TUN。以下骨架展示欄位之間的引用關係。範例節點位址使用保留網域,僅用於說明結構,無法直接建立代理連線。

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

proxies:
  - name: Example-Node
    type: socks5
    server: proxy.example.com
    port: 1080

proxy-groups:
  - name: 手動選擇
    type: select
    proxies:
      - Example-Node
      - DIRECT

rules:
  - DOMAIN-SUFFIX,example.com,手動選擇
  - MATCH,手動選擇

載入時先檢查縮排。YAML 使用空格表示層級,Tab 字元、同層欄位縮排不一致、冒號後缺少空格,都可能導致解析失敗。名稱中包含冒號、井號、方括號或前後空格時,建議用引號包住。陣列可以寫成多行清單,也可以寫成方括號形式,但同一段落維持同一種寫法更便於檢查。布林值使用 truefalse,不要混用介面中常見的「開啟」「關閉」文字。

設定變更的回歸檢查

每次修改後至少驗證四類流量:明確要求直連的網站、明確要求代理的網站、使用純 IP 的連線,以及本機區域網路服務。瀏覽器存取成功不代表所有應用程式都正常,因為瀏覽器可能啟用獨立的安全 DNS 或基於 QUIC 的連線。建議同時使用系統指令檢查解析結果與連線路徑,例如執行 nslookup example.com 查看系統 DNS,再用 curl -I https://example.com 驗證命令列程式是否經過預期入口。若系統代理與 TUN 同時開啟,還應分別關閉其中一項重新測試,排除重複接管。

設定檔的穩定性取決於能否回復。保留「最近可用」「目前測試」與「計畫上線」三份狀態,比不斷覆蓋同一個檔案更安全。修改策略組名稱時,應全域搜尋規則、規則集、子策略組與快捷腳本中的舊名稱。刪除節點提供器前,應確認沒有策略組透過 use 引用它。只有設定能在客戶端重新啟動、訂閱更新與裝置重啟後維持一致,才算完成驗證。

策略組類型與實際組合方式

select:將最終選擇權交給使用者

select 是最基礎的策略組類型。組內可以放入節點、DIRECTREJECT,也可以引用其他策略組。它不會執行自動測速,只記錄目前選擇。適合「總出口」「工作業務」「串流媒體」等需要明確控制結果的頂層策略。客戶端通常會保存選取狀態,但保存位置可能是執行時快取,而非原始設定。若希望重新啟動後延續選擇,可啟用核心支援的 profile.store-selected,同時確認客戶端沒有在每次啟動時重設設定。

頂層選擇組不宜直接塞入數百個節點。更清楚的方式是將自動測速、故障轉移與地區節點分別組織成子組,再由頂層組選擇這些子組。如此規則只依賴穩定的頂層名稱,訂閱節點增減也不會迫使規則同步改寫。對於需要臨時直連的業務,可在頂層組加入 DIRECT,但應清楚這會繞過代理鏈路,不適合要求固定出口的連線。

url-test:依探測結果選擇可用節點

url-test 會依設定的 URL 定期探測節點,並選擇回應表現符合條件的節點。測試結果只能反映探測目標的連線狀況,不代表所有網站與協定都具備相同品質。測試位址應穩定、回應內容小,並使用實際需要的協定。過短的 interval 會增加背景請求與行動裝置耗電;間隔過長則可能在節點失效後延遲切換。tolerance 用於減少多個相近節點之間頻繁跳轉,數值越大,目前節點在差異較小時越容易被保留。

proxy-groups:
  - name: 自動選擇
    type: url-test
    use:
      - main-provider
    url: https://www.gstatic.com/generate_204
    interval: 600
    tolerance: 80
    lazy: true

  - name: 總出口
    type: select
    proxies:
      - 自動選擇
      - 故障轉移
      - DIRECT

lazy: true 表示策略組在實際使用時才進行必要測試,可減少未使用分組的背景探測。若介面顯示所有節點都逾時,先不要直接判定節點全部失效。應檢查測試 URL 是否能從目前網路存取、DNS 是否正確、系統時間是否準確,以及代理協定所需的握手是否被網路入口阻擋。可參考節點逾時排查順序逐層確認。

fallback:優先順序與故障切換

fallback 著重於可用性與清單順序。它通常優先使用清單中較前且通過探測的節點,目前節點失效後再切換至後續可用項目。與 url-test 相比,它更適合固定主備出口、需要維持來源位址相對穩定的服務。將低延遲節點放在最前面不一定合理;若業務依賴固定地區或固定供應來源,應先依業務限制排序,再考慮回應時間。

故障轉移不是工作階段遷移。既有 TCP 連線在出口切換後通常需要重新建立,下載、遠端終端機或長連線可能中斷。對連續性要求較高的工作,應在應用層設定重試,並避免頻繁健康檢查造成誤切換。節點短暫抖動時,可適度增加探測間隔,或透過組內順序維持首選出口,不應單純追求最短測試時間。

load-balance:分配連線而非疊加頻寬

load-balance 會將不同連線分配至多個節點,但不會拆分單一 TCP 連線來疊加多條線路的頻寬。常見策略包括依目標位址保持一致的雜湊方式,以及更平均輪替連線的方式。需要登入狀態、來源位址驗證或穩定風控表現的業務,應使用能維持相同目標對映的策略,或直接使用 selectfallback。輪替方式適合彼此獨立的短連線,但可能導致同一服務在短時間內看到多個出口位址。

類型 決策依據 適用情境 主要限制
select 人工選擇或持久化狀態 頂層出口、業務專用組 不會自動排除失效節點
url-test 探測結果與容差 日常自動選擇 探測目標不代表全部業務
fallback 清單順序與可用性 固定主備出口 切換會中斷既有連線
load-balance 連線雜湊或輪替 分攤獨立連線 不疊加單一連線頻寬

使用篩選器管理訂閱節點

節點提供器可以透過 filterexclude-filter 或客戶端提供的正規表示式篩選入口產生地區組。正規表示式應符合訂閱中實際存在的命名方式,不要假設所有提供方都使用相同縮寫。先在客戶端查看節點原名,再編寫表達式;比對結果為空時,策略組可能沒有可選項目。地區名稱有多種寫法時,可使用分組表達式,例如 (香港|HK|Hong Kong)。排除「到期」「剩餘流量」等資訊節點時,應另外撰寫排除條件,避免它們進入測速組。

策略組設計的核心是穩定引用:規則引用少量固定組名,組內再組織持續變動的節點。常見結構可以是「總出口」引用「自動選擇」「故障轉移」「地區選擇」與「DIRECT」;業務規則只指向「總出口」或少數專用組。若每個規則集都建立一個功能相同的策略組,設定會迅速膨脹,訂閱更新後也更難確認實際出口。優先維持組名語意清楚、層級不超過三層,並避免兩個策略組互相引用形成循環。

規則集訂閱管理與比對順序

將規則內容與策略決策分離

規則集提供器 rule-providers 用於從本機檔案或遠端位址載入一組規則。它解決的是規則內容更新問題,不負責決定使用哪個節點。主要設定透過 RULE-SET,規則集名稱,策略組名稱 將規則內容連結至策略決策。同一規則集可以在不同設定中指向不同策略組,也可以透過更換策略組實現臨時調度,而不必修改規則檔案本身。

訂閱管理適合規模較大且需要獨立更新的網域分類、IP 網段與業務清單。只有幾條且長期穩定的本機規則,直接寫入 rules 更容易檢查。不要為了形式統一,把所有單條規則都拆成遠端檔案;遠端來源會增加下載失敗、快取失效與格式變動三個變數。關鍵的本機網路、管理位址與最終兜底規則應留在主要設定中,即使外部規則集暫時無法連線,基礎路由仍然可預測。

behavior 決定規則檔案的語意

behavior: domain 用於網域集合,內容通常是完整網域、網域後綴或特定網域表達式;behavior: ipcidr 用於 IPv4 與 IPv6 網段;behavior: classical 則允許每一項攜帶完整規則類型,例如 DOMAIN-SUFFIXPROCESS-NAMEIP-CIDR。主要設定宣告的行為必須與檔案內容一致。將 IP 網段按 domain 讀取,或把完整經典規則當作純網域集合載入,都可能導致解析錯誤或規則無法命中。

規則格式也可能是 YAML 文字、一般文字或核心支援的二進位規則格式。二進位格式載入效率較高,但不適合直接人工檢視;文字格式更便於排查與版本比較。客戶端與核心的支援範圍並不完全一致,遷移設定時應先確認目標核心是否能辨識對應的 format。當相容性比檔案大小更重要時,優先選擇目標客戶端已驗證支援的 YAML 或文字格式。

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

  service-rules:
    type: http
    behavior: classical
    format: yaml
    path: ./rules/service-rules.yaml
    url: https://rules.example.com/service-rules.yaml
    interval: 86400

rules:
  - DOMAIN,router.local,DIRECT
  - RULE-SET,private-domain,DIRECT
  - RULE-SET,service-rules,總出口
  - GEOIP,LAN,DIRECT,no-resolve
  - MATCH,總出口

path 是規則集的本機快取位置。不同提供器不要共用同一個路徑,否則更新時可能互相覆蓋。路徑所在目錄需要具備寫入權限;行動裝置與受限桌面環境通常由客戶端代為管理。interval 以秒為單位控制更新週期;規則並非更新越頻繁越好,週期過短會增加啟動請求與來源壓力。業務變化不頻繁時,每日更新通常比每幾分鐘重新整理更穩妥。

規則順序比規則數量更重要

核心會由上而下進行比對。私有網路、區域網路網域與必須直連的管理位址應放在前面;精確業務規則應位於寬泛地域規則之前;需要攔截的規則必須放在可能放行它們的通用規則之前;MATCH 只負責處理先前未命中的連線。若將大範圍網域集合放在頂部,後續更具體的規則即使寫得正確也不會執行。

網域規則通常不需要先解析 IP,比對成本與結果也更直接。IP 類規則可能觸發網域解析;如果規則只用於檢查已明確的目標位址,可依核心語法加入 no-resolve,避免為了比對規則額外發出 DNS 查詢。但不能機械式地為所有 IP 規則加上此參數:當連線只有網域而規則又需要依目標 IP 判斷時,禁止解析會讓規則失去比對條件。應根據入站是否能提供位址、DNS 模式與嗅探狀態決定。

本機規則集的結構與測試

YAML 規則集通常以 payload 作為清單入口。domain 行為的檔案只保存網域模式,classical 行為的檔案則保存完整規則。更新前先對單一檔案進行語法檢查,再讓主要設定引用。若遠端規則集顯示下載成功卻沒有命中,應檢查四項:提供器名稱是否與 RULE-SET 一致、behavior 是否符合內容、規則是否被更早的條目攔截,以及目標連線是否保留網域資訊。

payload:
  - DOMAIN,api.example.com
  - DOMAIN-SUFFIX,assets.example.com
  - PROCESS-NAME,example-client
  - IP-CIDR,192.0.2.0/24,no-resolve

規則來源失效時,核心可能繼續使用既有快取,也可能在首次載入時因沒有快取而缺少該組規則。重要規則應準備本機基準,不應讓全部存取控制依賴單一遠端位址。訂閱位址解析異常與規則集格式錯誤的表現有時相似,都可能顯示更新失敗;可依照訂閱失效與設定解析復原步驟區分 HTTP 回應、檔案內容、快取與 YAML 結構。

建立可維護的命名與變更紀錄

提供器名稱應表達內容而非來源,例如 work-domainprivate-cidr,避免使用「規則1」「最新規則」等無法長期理解的名稱。策略組名稱面向介面使用者,可以使用中文;提供器與路徑名稱則更適合使用穩定的 ASCII 字元,減少跨平台路徑與腳本處理差異。修改遠端位址、behavior 或格式時,應視為結構變更,先清除對應快取再測試,避免舊快取掩蓋新檔案的錯誤。

規則集規模擴大後,建議記錄每個集合的用途、資料類型、更新來源、目標策略與上次人工驗證結果。重點不是追求規則數量,而是確保每一層都有明確職責。發生命中異常時,透過日誌找到首條匹配規則,再回到對應集合定位內容,比盲目調整全域模式有效。關於中國大陸與海外直連、代理、攔截及兜底的完整排序,可繼續閱讀規則分流設定實戰

DNS 設定最佳化與解析分流

DNS 決定規則引擎能看見什麼

DNS 設定不只是更換解析伺服器,也會影響網域解析路徑、規則能否保留網域、Fake-IP 對映,以及代理連線如何解析節點伺服器位址。系統先將網域交給哪個監聽器、查詢透過直連還是代理發出、回傳真實位址還是保留位址,都會改變後續規則行為。出現「節點可用但網頁打不開」「瀏覽器正常而命令列失敗」「同一網域反覆命中不同策略」時,應將 DNS 視為獨立鏈路檢查。

nameserver 負責一般網域查詢;default-nameserver 主要用於解析加密 DNS 伺服器本身的網域或建立初始連線,因此通常填寫可直接存取的 IP 型解析器;proxy-server-nameserver 可專門處理代理節點伺服器網域,避免節點網域經錯誤策略解析;nameserver-policy 則依網域指定解析器。欄位支援情況取決於核心,客戶端介面可能只提供其中一部分。

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  respect-rules: true

  default-nameserver:
    - 1.1.1.1
    - 8.8.8.8

  nameserver:
    - https://dns.google/dns-query
    - https://cloudflare-dns.com/dns-query

  proxy-server-nameserver:
    - 1.1.1.1
    - 8.8.8.8

  nameserver-policy:
    "geosite:private":
      - system

  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "time.*.com"
    - "stun.*.*"

範例用於展示欄位關係,不代表所有網路都應使用同一組公共解析器。選擇解析器時應先確認目前網路的可達性與隱私需求。加密 DNS 位址本身若是網域,核心仍需要初始解析途徑,這就是 default-nameserver 的作用。若初始解析器無法連線,加密查詢甚至無法開始。啟用 respect-rules 後,DNS 連線會參考規則路由;此時必須避免 DNS 查詢為了選擇策略,又依賴尚未完成的 DNS 結果而形成循環。

redir-host 與 fake-ip 的差異

redir-host 回傳真實 IP,行為接近傳統 DNS,對不相容 Fake-IP 的程式較友善,但網域完成解析後可能只剩目標位址,TUN 接管的純 IP 連線未必還能命中網域規則。fake-ip 則從保留位址範圍回傳對映位址,應用程式連線至該位址時,核心會還原原始網域並執行規則比對。如此可減少真實解析結果提前洩漏至系統路徑,也能讓網域規則在 TUN 情境中維持穩定。

Fake-IP 不等於代理位址,也不會直接出現在公網。它只在本機核心的對映表中代表某個網域。應用程式取得保留位址後,必須繼續將連線交給 Clash;如果系統路由、旁路由規則或安全軟體攔截該位址範圍,連線便會失敗。因此 Fake-IP 與 TUN 的路由接管應一起驗證,不能只看 DNS 查詢是否回傳位址。

fake-ip-filter 的適用範圍

區域網路探索、印表機、投放、時間同步、部分語音通話與依賴 STUN 的程式,可能要求真實位址或特殊 DNS 回應。這類網域可加入 fake-ip-filter,讓它們繞過 Fake-IP 對映。篩選範圍必須盡量具體。將過寬的萬用字元加入篩選清單,會讓大量網域回到真實解析,削弱網域還原與規則比對的穩定性。遇到應用程式異常時,應先從日誌或封包擷取確認實際查詢網域,再新增最小規則,而不是複製一份無法解釋的超長篩選清單。

部分核心支援黑名單或白名單式的篩選模式。黑名單表示清單內網域使用真實解析,是常見行為;白名單則可能只對清單內網域啟用 Fake-IP。遷移設定時必須同時遷移模式欄位,否則同一份網域清單會產生相反效果。若客戶端介面只提供開關,應查看匯出的最終設定確認實際值。

IPv6、快取與瀏覽器獨立 DNS

ipv6: false 通常表示內建 DNS 不回傳 AAAA 結果,但不等同於作業系統徹底關閉 IPv6。系統仍可能透過其他解析器取得 IPv6 位址,應用程式也可能直接連線至已快取的位址。如果網路沒有穩定的 IPv6 出口,可先在 Clash DNS 中關閉回傳,再分別檢查系統網卡與瀏覽器設定;如果網路具備正常 IPv6,則應同時準備 IPv6 路由規則,避免所有 IPv6 連線落入未設計的兜底路徑。

瀏覽器可能啟用獨立的安全 DNS,繞過系統指定的 Clash DNS。排查時可暫時關閉瀏覽器獨立解析,使用系統指令查詢指定監聽連接埠,並清除系統與瀏覽器快取。設定修改後仍看到舊位址,不一定代表新設定沒有生效,也可能只是快取尚未過期。重新啟動核心只能清除核心部分狀態,作業系統、瀏覽器與應用程式內部快取仍需分別處理。

現象 優先檢查 驗證方式
網域規則未命中 DNS 是否繞過核心、是否只剩目標 IP 查看連線日誌中的 Host 與規則類型
回傳 Fake-IP 但無法連線 保留位址範圍是否由 TUN 接管 檢查系統路由與 TUN 日誌
節點網域解析失敗 初始解析器與節點專用解析器 直接查詢節點伺服器網域
瀏覽器與命令列結果不同 瀏覽器獨立 DNS、應用程式快取 關閉獨立解析後比較查詢結果

TUN 接管、Fake-IP 對映與平台限制

TUN 與系統代理處理不同範圍的問題

系統代理依賴應用程式主動讀取作業系統代理設定,通常涵蓋瀏覽器與遵循系統設定的桌面程式。TUN 建立虛擬網路介面,透過系統路由將更多 TCP、UDP 以及不讀取代理設定的應用程式流量交給核心。因此,遊戲、命令列工具、商店程式或固定直連的應用程式在系統代理下沒有進入 Clash,不一定是規則問題;它們可能根本沒有經過代理入口。TUN 擴大接管範圍,但同時引入路由、權限、DNS 劫持與區域網路存取等額外變數。

啟用 TUN 前,應先確認一般系統代理模式可正常運作。若節點、策略與 DNS 基準尚未驗證,直接開啟 TUN 會將入口問題與出站問題疊加。建議順序是:關閉 TUN 驗證節點,啟用 TUN 但暫不調整複雜路由,確認一般網頁與命令列連線進入核心,再逐步處理區域網路、IPv6、應用程式排除與嚴格路由。

tun:
  enable: true
  stack: mixed
  device: Clash
  auto-route: true
  auto-detect-interface: true
  strict-route: true
  dns-hijack:
    - any:53
    - tcp://any:53
  mtu: 1500

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16

stack、auto-route 與 strict-route

stack 決定 TUN 封包由哪種網路堆疊處理。常見值包括系統堆疊、使用者態堆疊或混合模式。系統堆疊通常相容性較直接,使用者態堆疊便於核心完整處理連線,混合模式則嘗試在 TCP 與 UDP 情境間取得平衡。不同作業系統、客戶端封裝方式與應用程式協定的結果可能不同,沒有適用於所有裝置的固定最佳值。出現 UDP、區域網路探索或特定應用程式異常時,切換 stack 是有效的對照實驗,但每次只修改這一項。

auto-route 負責寫入系統路由,使目標流量進入虛擬介面;auto-detect-interface 用於識別實際出口網卡,避免資料再次回到 TUN 形成迴圈;strict-route 會更嚴格限制繞行路徑,減少部分系統查詢或流量繞過接管,但也可能影響多網卡、虛擬機器、企業網路與區域網路服務。裝置同時連接有線、無線、VPN 或容器橋接網路時,自動偵測可能選錯出口,應查看路由表確認預設路由。

DNS 劫持與 Fake-IP 位址範圍

dns-hijack 會將常見的 53 連接埠查詢交給內建 DNS,確保應用程式的一般 DNS 請求進入既定解析鏈路。它無法自動接管應用程式內建的加密 DNS,也不能修復已被其他安全軟體攔截的請求。若系統同時執行其他 VPN、過濾軟體或虛擬網卡工具,多個元件可能爭用 DNS 與預設路由。此時應一次只保留一個接管元件,確認 Clash 能單獨運作後再恢復其他軟體。

Fake-IP 預設使用專用保留網段建立網域對映。該網段必須由 TUN 路由接管,也不能與企業網路、實驗環境或其他虛擬網路的實際位址規劃衝突。若另一個元件將相同網段當成真實內部網路,應用程式連線會被送往錯誤介面。修改 Fake-IP 範圍後,需要清除 DNS 快取與核心對映,舊位址不會自動代表新的對映關係。

MTU 與連線可建立但傳輸停滯

MTU 過大時,某些路徑上的分片或路徑 MTU 探測可能受阻,表現為握手成功、少量資料可傳輸,但較大的頁面、上傳或特定協定長時間停滯。MTU 過小則會增加封包數量與處理負擔。預設值能涵蓋多數乙太網路環境;行動網路、疊加式隧道與部分寬頻撥號環境出現異常時,可逐步降低 MTU 進行對照,不應一開始就設定極端數值。測試時要涵蓋小型請求、大型回應、上傳與 UDP,不要只看首頁能否開啟。

如果只有部分網站載入到一半,先排除 DNS 與規則問題,再檢查 MTU。可觀察日誌中的連線是否已成功建立,以及失敗是否集中在大型回應。系統指令的具體參數因平台而異,但原則相同:傳送禁止分片且逐步調整大小的封包,找出穩定上限,再為隧道標頭預留空間。調整完成後應重新測試實際業務,不要只依賴單次探測。

Windows、macOS、Android、iOS 與 Linux 的差異

Windows 與 macOS 啟用 TUN 通常需要管理員權限或系統網路延伸功能授權;權限遭撤銷後,介面開關可能仍顯示已啟用,但路由並未成功寫入。Android 與 iOS 通常透過系統 VPN 介面實現接管,同一時間往往只能維持一個此類連線,電池最佳化、背景限制與按應用程式代理選項也會影響涵蓋範圍。Linux 需要檢查 TUN 裝置、路由寫入權限與防火牆規則;伺服器環境還要避免將遠端管理連線錯誤送入代理而造成失聯。

客戶端實作決定介面能否設定應用程式排除、路由繞過與自動復原。選擇客戶端時應以平台能力為準,下載入口可在下載頁查看;跨平台優先考慮 Clash Plus,桌面端也可依需求比較 Clash Verge Rev、FlClash 與 Clash Nyanpasu。已停止維護的 Clash for Windows 與 ClashX Meta 僅適合在相容舊環境時參考,不應依賴它們取得新增核心能力。

區域網路、虛擬機器與容器存取

啟用 TUN 後,私有網段通常應在規則前段直連,並依實際網路保留路由。只寫 GEOIP,LAN,DIRECT 不一定足夠,因為流量在進入規則引擎前可能已被系統路由送往錯誤介面。需要同時檢查系統路由、TUN 排除網段與 Clash 規則。區域網路存在多個私有網段時,應明確列出實際網段,不要假設所有裝置都在同一個子網路。

虛擬機器、容器與 WSL 類環境可能擁有獨立的虛擬交換器與 DNS。主機啟用 TUN 後,子系統流量可能經過主機,也可能走獨立 NAT。先在子系統中查看預設閘道與 DNS,再判斷是否需要將 Clash 監聽位址開放給區域網路。若啟用 allow-lan,應搭配防火牆限制可信網段,避免將代理連接埠暴露於不受控網路。排查 TUN 時,務必保留一條不經過該路由的管理通道,以便設定錯誤後復原。

網域嗅探的作用、設定與誤判控制

嗅探用於補回網域資訊

部分連線進入核心時只攜帶目標 IP,沒有可供網域規則比對的主機名稱。網域嗅探會從 HTTP Host、TLS ClientHello 中的伺服器名稱,或可識別的 QUIC 握手資訊提取網域,再用於規則判斷。它不是 DNS 查詢,也不會解密 HTTPS 內容;嗅探只讀取連線建立階段原本就可見的中繼資料。對於 TUN、透明代理與已由應用程式預先解析的連線,嗅探可以提高網域規則的命中率。

嗅探並非越強越好。連線中沒有網域、協定經過特殊封裝、應用程式使用加密的客戶端問候,或目標是純 IP 服務時,核心無法可靠還原名稱。錯誤覆寫目標位址也可能讓原本正常的連線走向不相符的網域。設定應限制協定與連接埠,並為已知不相容服務設定略過規則。

sniffer:
  enable: true
  force-dns-mapping: true
  parse-pure-ip: true

  sniff:
    HTTP:
      ports:
        - 80
        - 8080-8880
      override-destination: true
    TLS:
      ports:
        - 443
        - 8443
    QUIC:
      ports:
        - 443
        - 8443

  force-domain:
    - "+.example.com"

  skip-domain:
    - "Mijia Cloud"
    - "+.push.example.com"

parse-pure-ip 允許對目標為純 IP 的連線嘗試協定解析;force-dns-mapping 與 DNS 對映協同運作,協助還原先前由核心處理過的網域;override-destination 表示成功取得網域後,使用嗅探結果參與或取代後續目標判斷。欄位細節會隨核心實作變化,匯入前應查看客戶端最終產生的設定,避免介面開關與手寫段落同時存在並互相覆蓋。

HTTP、TLS 與 QUIC 的可見範圍

明文 HTTP 通常可從 Host 請求標頭取得網域,但不一定只在 80 連接埠執行。將連接埠範圍擴展至常見代理或開發連接埠,有助於識別內部服務;不過範圍越寬,核心嘗試解析非 HTTP 流量的機會也越多。TLS 嗅探主要讀取握手中的伺服器名稱;如果應用程式直接使用 IP、伺服器名稱被隱藏,或握手不是標準 TLS,就不會得到有效網域。QUIC 基於 UDP,排查時還要確認 TUN 與節點鏈路是否支援相應 UDP 流量。

連接埠清單應來自實際業務。將所有連接埠都加入每種協定,看似涵蓋更廣,實際上會增加誤判與處理成本。一般網頁優先涵蓋 80、443 與少數明確使用的替代連接埠。資料庫、遠端桌面、遊戲與語音協定若沒有網域規則需求,不應強制按 HTTP 或 TLS 解析。日誌中持續出現嗅探失敗不一定會影響連線,但表示目前連接埠範圍可能過寬。

force-domain 與 skip-domain

force-domain 用於指定需要優先嘗試嗅探的網域模式,適合 DNS 對映不完整但必須依網域分流的服務。skip-domain 用於排除已知不相容、網域結果不穩定或不應覆寫目標的連線。網域模式語法應依目標核心要求撰寫,常見的 +.example.com 表示包含根網域及其子網域。排除項目需要有實際故障依據,不要從陌生範本複製大量與本機應用程式無關的名稱。

若某個應用程式啟用嗅探後失敗,先比較關閉嗅探時是否恢復,再查看連線日誌中擷取的網域。若日誌網域與應用程式實際目標不符,將該網域或相關程序加入略過範圍;若根本沒有擷取到名稱,則應回到 DNS、規則與 IP 分流檢查,繼續增加強制網域不會產生真實資訊。嗅探是補充手段,不能取代正確的 DNS 接管。

嗅探與規則順序的協同

嗅探成功只表示規則引擎取得了網域,並不保證命中預期策略。更早的 IP 規則、程序規則或寬泛規則集仍可能先行比對。排查時應查看日誌回報的目標網域、目標位址、命中規則與策略組,而不是只看「sniff success」。若希望網域規則優先,應將具體網域規則放在可能攔截連線的通用 IP 規則之前。

程序規則在不同平台上的可用性差異很大。桌面端可能辨識程序名稱或路徑,行動裝置受系統限制,往往無法提供同等資訊。不要用程序規則取代所有網域規則;更穩定的方式是以網域規則為主,程序規則只處理專用客戶端或無法穩定辨識網域的流量。程序名稱也可能隨更新改變,應透過日誌取得實際名稱。

逐步啟用,而非一次涵蓋所有協定

建議先只啟用 TLS 443 連接埠,在常用網頁與應用程式中觀察命中變化;確認沒有異常後,再加入 HTTP 與 QUIC。每增加一類協定,都分別測試直連、代理、區域網路與長連線。若啟用 QUIC 後只有部分應用程式異常,可暫時關閉 QUIC 嗅探但保留 UDP 轉發,區分問題發生在協定識別還是傳輸鏈路。

網域嗅探最有價值的情境,是透明接管後遺失網域,而不是用來「猜測」所有目標。設定越明確,排錯越容易。長期維護時,應記錄每個強制或略過項目的原因,並定期刪除已無法重現的相容性項目。若某項服務必須依賴大量嗅探例外才能運作,應重新檢查 DNS 模式、Fake-IP 篩選與應用程式自身的解析方式,根因通常不在嗅探清單本身。

本機覆寫與多訂閱合併

先確認客戶端的合併層級

多訂閱合併通常由客戶端完成,而不是 Clash 設定格式中的單一通用欄位。客戶端可能提供基礎設定、全域覆寫、訂閱專屬覆寫、JavaScript 腳本或視覺化合併器。不同入口的執行順序會影響最終結果:後執行的同名純量通常會覆蓋前值,映射可以遞迴合併,陣列則可能整體取代、追加或依名稱去重。不能假設某個客戶端的合併行為適用於所有客戶端。

開始前先匯出客戶端最終交給核心的設定,並做一個小實驗:在訂閱中保留兩個策略組,在覆寫中加入一個組,觀察最終陣列是追加還是取代。確認行為後再遷移完整規則。Clash Plus 適合作為跨平台優先選擇,桌面端的 Clash Verge Rev、FlClash 與 Clash Nyanpasu 也提供不同形式的訂閱管理能力;具體入口應以客戶端目前介面為準。客戶端之間遷移時,先遷移標準 YAML,再重建客戶端專屬的合併邏輯。

純量、映射與陣列的處理差異

mixed-portmodelog-level 屬於純量,後層設定通常會直接取代;dnstun 屬於映射,可能依子欄位合併;proxiesproxy-groupsrules 屬於陣列,最容易出現意外。若合併器將陣列整體取代,一段只有三條本機規則的覆寫可能刪除訂閱原有的全部規則。若合併器執行追加,本機兜底規則又可能被放到訂閱的 MATCH 後面,實際上永遠無法命中。

因此,規則陣列需要明確定義「前置、後置或取代」語意。區域網路直連與業務精確規則通常前置,最終 MATCH 維持唯一並位於末尾。策略組陣列應依 name 去重;同名但類型不同的組不能簡單串接。節點陣列同樣需要處理重名,否則介面可能只顯示其中一個,規則引用也無法判斷實際目標。

# 本機基礎覆寫:只放長期穩定的純量與映射
mode: rule
log-level: info
ipv6: true

profile:
  store-selected: true
  store-fake-ip: true

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

tun:
  auto-route: true
  auto-detect-interface: true

上面的片段不包含節點、策略組與規則陣列,適合由支援遞迴映射合併的客戶端疊加至訂閱。若客戶端採用整段取代,仍需在合併預覽中確認 dns 的其他子欄位是否保留。最穩妥的做法不是猜測,而是查看最終 YAML。任何合併工具只要無法展示結果,就不適合直接用於正式設定。

多訂閱節點的命名與來源隔離

兩個訂閱可能包含相同的節點名稱。直接合併後,策略選擇、健康檢查與持久化狀態都可能指向錯誤節點。建議在合併階段依來源增加穩定前綴,例如「主要來源 / 節點名稱」與「備用來源 / 節點名稱」,並同步更新策略組引用。前綴不宜包含會隨訂閱標題變動的到期日期或流量資訊,否則每次更新都會被視為新節點,已儲存的選擇也會失效。

更清楚的方式是保留多個 proxy-providers,讓策略組透過 use 引用來源,而不是將所有節點展開成一個龐大的陣列。如此可以分別設定更新週期、健康檢查與篩選規則,也便於暫時停用某個來源。提供器路徑必須唯一,遠端位址失效時應保留最近可用的快取,並在介面中明確顯示更新失敗,不能將舊快取誤認為剛剛更新成功。

proxy-providers:
  primary:
    type: http
    url: https://sub.example.com/primary.yaml
    path: ./providers/primary.yaml
    interval: 86400
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 600

  backup:
    type: http
    url: https://sub.example.com/backup.yaml
    path: ./providers/backup.yaml
    interval: 86400
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 600

proxy-groups:
  - name: 主要訂閱
    type: select
    use:
      - primary
  - name: 備用訂閱
    type: fallback
    use:
      - backup
    url: https://www.gstatic.com/generate_204
    interval: 600

敏感欄位與設定分發

訂閱位址、外部控制金鑰與節點驗證資訊都不適合複製到公開儲存庫、截圖或線上格式化工具。多人維護時,可將不含敏感內容的規則與覆寫分開保存,把訂閱與驗證資訊留在客戶端本機。需要在裝置間同步時,應使用受控的私人儲存空間,並限制同步範圍。範例設定只能展示欄位結構,不應複製真實訂閱位址。

外部規則與本機覆寫最好分開管理:規則集負責「哪些目標屬於某類」,本機設定負責「該類目標採用哪個策略」。如此更換訂閱或客戶端時,規則資產仍可重複使用。若將節點、規則、DNS 與裝置專屬路徑全部寫入單一大型檔案,任何一項更新都會增加衝突機率。

更新後的自動檢查清單

每次訂閱更新後,先確認提供器狀態與節點數量是否合理,再檢查頂層策略組是否仍有成員、選取狀態是否指向現存節點、規則引用的策略名稱是否完整。接著驗證 DNS 設定未被訂閱覆蓋,TUN 與外部控制介面仍維持本機預期值。若客戶端支援設定預處理腳本,腳本發生異常時應停止套用新設定,而不是輸出部分合併的檔案。

多訂閱問題經常表現為「更新後沒有節點」或「策略組為空」。這不一定表示訂閱內容為空,也可能是篩選正規表示式排除了所有節點、同名去重邏輯錯誤、提供器檔案解析失敗,或合併器取代了完整陣列。應依原始回應、單份訂閱解析、合併前結構、最終設定與核心載入五個階段逐項檢查。具體復原步驟可參考訂閱失效與設定解析失敗

外部控制介面、面板連接與安全界線

控制介面與代理連接埠不是同一項服務

external-controller 提供執行狀態、策略切換、連線管理、日誌與設定重新載入等控制能力。它不是 HTTP 或 SOCKS 代理連接埠,應用程式不能透過它轉發一般網路請求。常見控制面板會透過此介面讀取策略組並傳送選擇操作;客戶端本身也可能呼叫同一介面實現圖形介面。控制介面具備修改執行狀態的能力,應只向可信任的網路開放。

監聽在 127.0.0.1 時,只有本機程式可以存取,適合桌面客戶端與本機面板。監聽在 0.0.0.0 時會綁定所有可用介面,區域網路裝置可能存取,必須同時設定強密鑰與防火牆來源限制。將監聽位址改為所有介面並不等於完成遠端管理;還需要確認系統防火牆、路由、反向代理與瀏覽器來源限制。沒有遠端存取需求時,應維持本機監聽。

external-controller: 127.0.0.1:9090
secret: "change-this-secret"

# 僅在面板檔案由客戶端或本機部署提供時啟用
external-ui: ./dashboard

profile:
  store-selected: true
  store-fake-ip: true

範例密鑰只用於說明欄位,部署時應在本機產生不可預測的獨立值。不要重複使用控制密鑰、訂閱位址、系統登入密碼或其他服務憑證。修改密鑰後,也要同步更新面板中的連線設定。若面板持續回傳未授權,先檢查請求是否攜帶正確的驗證資訊,再確認客戶端是否在啟動時以另一份設定覆蓋了 secret

外部面板的連線流程

控制面板通常需要控制介面位址與驗證密鑰。面板會從介面讀取策略組、代理節點、目前連線與日誌,再依使用者操作傳送切換或關閉請求。若面板頁面可以開啟卻沒有資料,應將「靜態頁面載入」與「API 連線」分開檢查:前者取決於面板檔案或 Web 服務,後者取決於控制介面位址、驗證、瀏覽器同源限制與網路可達性。

面板部署在本機且介面也只監聽本機時,設定最簡單。面板位於其他裝置時,瀏覽器存取的 127.0.0.1 指向瀏覽器所在裝置,而不是執行 Clash 的主機,這是常見的位址誤判。此時應使用 Clash 主機在可信任區域網路中的位址,並透過防火牆限制來源。跨公網暴露控制介面的風險較高,應使用受控的安全存取層,不應直接開放連接埠。

常用狀態檢查與唯讀觀察

排障時先使用唯讀資訊確認控制面是否連線至正確的核心:查看目前設定模式、策略組清單、核心日誌與活動連線。多個客戶端或核心同時執行時,連接埠可能被占用,面板也可能連到舊執行個體。應透過程序、監聽連接埠與日誌啟動時間確認目標。切換策略後觀察新連線採用的出口;既有連線不會自動全部遷移,必要時需關閉相關連線後重新建立。

連線清單適合判斷應用程式是否進入核心、目標網域是否已還原、命中了哪條規則以及實際策略鏈。若應用程式完全沒有出現在連線清單中,優先檢查系統代理、TUN、應用程式繞過設定與防火牆;若已出現但策略錯誤,檢查規則順序與策略組;若策略正確但連線失敗,再檢查節點與目標網路。這種分層順序比反覆切換節點更容易定位問題。

設定重新載入與執行時狀態

透過介面重新載入設定時,應先完成語法驗證。錯誤設定可能被拒絕,也可能造成部分功能重新啟動。策略選擇、Fake-IP 對映與規則集快取是否保留,取決於設定與核心狀態。profile.store-selected 用於保存策略選擇,profile.store-fake-ip 用於保存對映狀態;更換 Fake-IP 位址範圍、清除快取或移動設定目錄時,應預期這些狀態會重新建立。

重新載入後要確認監聽連接埠、控制位址、DNS 與 TUN 是否仍正常。修改控制介面本身的位址時,目前面板連線會中斷,需要使用新位址重新連線。修改代理連接埠後,系統代理可能仍指向舊連接埠;修改 TUN 裝置名稱或路由設定後,舊路由也可能需要由客戶端清理。完整重新啟動雖然耗時較長,但涉及監聽器、虛擬介面與路由時,通常比連續熱重載更容易取得確定狀態。

日誌層級與故障定位

silenterrorwarninginfodebug 提供不同的詳細程度。日常使用保留 info,較容易發現規則集更新、監聽失敗與連線錯誤。需要定位 DNS、嗅探或規則命中時,暫時使用 debug;重現一次問題後立即保存必要片段並恢復一般層級。日誌可能包含目標網域、區域網路位址與節點名稱,分享前應刪除敏感資訊。

閱讀日誌時,依時間線定位一條具體連線:先找入站類型與來源,再看目標網域或位址、命中規則、策略鏈、實際節點與最終錯誤。只截取最後一行「timeout」通常不足以判斷原因。逾時可能發生在 DNS、節點握手、代理連往目標、UDP 轉發或應用程式等待回應的任一階段。結合疑難解答中的分類問題,可以先判斷錯誤屬於入口、解析、規則或出站。

安全開放的最小原則

控制介面只綁定需要的位址,代理連接埠只開放給需要的裝置;allow-lan 與控制介面開放應分開判斷。允許區域網路裝置使用代理,不代表它們也需要切換策略或查看連線。系統防火牆應依來源位址限制控制連接埠,面板與介面之間使用獨立密鑰。裝置離開可信任網路或連線至公共網路時,應確認監聽策略不會繼續暴露服務。

外部面板檔案應來自已確認的客戶端元件或受控部署,面板更新與核心更新分開進行。面板顯示異常不代表代理核心停止工作,核心連線正常也不代表控制介面安全。維護時分別記錄核心設定、面板版本來源、監聽位址與存取界線,不要把所有問題都歸類為「面板無法連線」。

建立可重複的變更流程

穩定的進階設定應遵循固定流程:匯出目前可用的設定,修改單一功能範圍,完成 YAML 與引用檢查,在測試設定中啟動,驗證直連、代理、DNS、TUN 與控制介面,再替換正式設定。訂閱更新後重複關鍵檢查,並保留回復副本。首次設定連線流程可回到使用文件,客戶端安裝包與平台選擇請在下載頁查看。

最終設定不需要包含所有可用欄位。策略組只保留具有明確決策意義的層級,規則集只保留能說明來源與用途的集合,DNS 與 TUN 只啟用目前網路確實需要的能力,嗅探例外必須能夠解釋,控制介面則遵循最小開放範圍。設定越能清楚描述資料從入口到出口的路徑,發生問題時就越容易透過日誌定位,而不是依賴反覆重設或替換整份範本。

NEXT ACTION

依目前問題選擇後續頁面