設定檔結構:先確認引用關係,再修改欄位

Clash 設定檔不只是節點清單。連接埠決定應用程式如何將連線交給核心,DNS 負責解析網域名稱,節點定義遠端連線參數,策略組組織出口,規則則將連線導向相應出口。FlClash 使用的 Clash Meta 核心也稱為 mihomo;本文依照這套核心的設定方式說明,其他舊版核心不一定支援所有欄位。

最重要的關係是:規則引用策略組,策略組引用節點名稱或內建出口。例如,規則將請求交給「手動選擇」,該組再選擇「範例節點」或 DIRECT。名稱必須完全一致,多一個空格也可能導致找不到目標。

  • proxies:節點定義清單,記錄通訊協定、伺服器、連接埠與驗證資訊。
  • proxy-groups:策略組清單,記錄可選出口及選擇方式。
  • rules:依序比對的規則清單,決定連線要交給哪個出口。
  • dns 與 tun:分別處理名稱解析與虛擬網卡接管,兩者都不是節點本身。

通用欄位:連接埠、模式與記錄

先從頂層欄位開始。以下範例會在同一個混合連接埠同時提供 HTTP 代理和 SOCKS5;其中的 7890 僅為範例值,不代表每份訂閱或每個用戶端都使用相同連接埠。

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
欄位範例值用途
mixed-port7890在同一個連接埠提供 HTTP 與 SOCKS5 代理入口。
allow-lanfalse禁止將此代理入口作為區域網路共用入口。
moderule依規則選擇出口,而非讓所有連線都使用全域選擇。
log-levelinfo記錄一般執行資訊;疑難排解時可暫時改為 debug。
ipv6false限制核心使用 IPv6,不代表關閉作業系統的 IPv6。

代理連接埠不等於節點連接埠

本機程式連線到 127.0.0.1:7890,遠端節點則可能使用 443 或服務端指定的其他連接埠。兩者不必相同。port 可單獨提供 HTTP 代理,socks-port 可單獨提供 SOCKS 代理;使用混合連接埠時,不必為了「完整」而把所有監聽欄位都加上。

設定檔載入成功後,可執行 curl -I -x http://127.0.0.1:7890 https://example.com,確認代理入口是否接受連線。此命令只測試 HTTP 請求路徑,不能證明 UDP、TUN 或所有應用程式都已接管。若顯示連線遭拒,請先確認實際監聽連接埠與核心執行狀態。

DNS 區段:解析入口與 Fake-IP

DNS 設定會影響網域名稱交由核心解析的方式。以下是便於理解的精簡範例:監聽本機 1053 連接埠,使用 Fake-IP 模式,並指定一個加密上游。這不是適用所有網路的通用建議;上游位址必須能從目前的網路連線到。

dns:
  enable: true
  listen: 127.0.0.1:1053
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - https://1.1.1.1/dns-query

1053 監聽連接埠與系統 DNS 是兩回事

listen 只會讓核心提供 DNS 服務。僅設定這個欄位,不會自動把系統 DNS 改為該入口;一般系統 DNS 設定通常也無法直接填入自訂連接埠。是否接管系統 DNS,還取決於 TUN 的 DNS 劫持、系統網路設定及實際路由。

Fake-IP 不是真正的伺服器位址

198.18.0.1/16 在此用於核心的虛擬位址對應。應用程式取得對應位址後,核心會依據儲存的網域關聯繼續比對規則並建立連線。因此,看到這個網段不必立刻判定為解析錯誤;更應檢查請求是否交回同一個核心處理,以及對應關係是否仍然有效。

  • dns.ipv6: false 在此表示不向呼叫端回傳 AAAA 結果,與頂層 ipv6 的作用範圍不同。
  • nameserver 是主要的上游解析伺服器。若使用網域名稱作為上游位址,也要考慮該上游網域本身需要如何解析。
  • 如果節點的 server 欄位是網域名稱,也必須能夠解析。較複雜的設定可另用 proxy-server-nameserver 指定節點網域的解析上游。
  • 不要一次同時修改上游、Fake-IP 過濾條件和 TUN 劫持設定。每次只改一項,才能判斷問題出在哪裡。

proxies:節點參數必須與服務端設定相符

proxies 是一份清單,每個節點都以 - name: 開頭。不同通訊協定需要的欄位各不相同;Shadowsocks 的密碼與加密方式,不能直接套用到需要 UUID 或 TLS 參數的其他通訊協定。以下僅示範 Shadowsocks 節點的欄位結構。

proxies:
  - name: "範例節點"
    type: ss
    server: 192.0.2.10
    port: 443
    cipher: chacha20-ietf-poly1305
    password: "yaml-demo-password"
    udp: true

name 是供策略組引用的本機名稱,可以使用中文;server 才是遠端伺服器位址。udp: true 表示在該節點設定中啟用 UDP 功能,但不保證服務端、線路和應用程式都支援 UDP 轉送。

如果服務提供者提供的是完整的 Clash 訂閱,通常已包含節點參數,不必手動重寫。另一種常見結構是 proxy-providers:節點由提供者管理,策略組則透過 use 引用提供者名稱。不要把提供者名稱當成單一節點名稱,直接放進組內的 proxies 清單。

proxy-groups:將節點整理為可選出口

定義節點後,再建立策略組。select 表示由使用者手動選擇組內出口,適合用來確認設定引用是否正確。以下的「手動選擇」同時提供範例節點與直連出口。

proxy-groups:
  - name: "手動選擇"
    type: select
    proxies:
      - "範例節點"
      - DIRECT

DIRECT 是內建的直連出口,不必列在頂層 proxies 中。REJECT 也是內建出口,用於拒絕連線。自訂組名應避免與這些內建名稱衝突,也不要建立同名節點和策略組。

自動測速不等於下載速度測試

url-test 策略組會依照設定的探測網址與間隔,比較候選出口的探測延遲。例如,interval: 300 表示每隔 300 秒探測一次;tolerance: 50 可設定以毫秒為單位的切換容許值。探測結果會受目標網站與線路影響,不能直接換算成大型檔案的下載速度。

初次除錯時,建議先保留一個手動策略組。確認節點可連線、規則引用正確後,再加入自動選擇或故障轉移。多個策略組可以互相引用,但必須避免 A 引用 B、B 又引用 A 的循環依賴。

rules:由上往下比對,首次命中即生效

在 mode: rule 模式下,規則通常會由上往下依序比對,命中後便交由指定出口處理。精確規則放前面,最後才放兜底規則。以下網域僅用來說明比對範圍,不代表特定類型的網站必須直連或必須走代理。

rules:
  - DOMAIN,example.com,DIRECT
  - DOMAIN-SUFFIX,example.org,手動選擇
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - MATCH,手動選擇
  • DOMAIN,example.com:比對這個完整網域,不會自動包含 www.example.com。
  • DOMAIN-SUFFIX,example.org:比對該網域及其子網域,不是任意字串包含比對。
  • IP-CIDR:依目標 IP 網段比對;範例列出兩個私有位址區段,並非完整的區域網路位址清單。
  • no-resolve:避免為了這條 IP 規則主動觸發網域解析,但不代表整個連線完全不需要 DNS。
  • MATCH:接收前面規則都未命中的連線。若放在開頭,後續規則就沒有比對機會。

規則未生效?先確認模式與新連線

如果用戶端目前處於全域模式,就不能依照規則模式的預期來判斷結果。切換回規則模式後,請確認連線記錄中的目標網域、命中規則及實際出口。只有 IP、缺少可用網域資訊的連線,也不一定會命中預期的網域規則。

修改規則或切換策略後,請建立新連線再測試。瀏覽器可能會重複使用既有的 TCP 或 QUIC 連線;設定文字改變後,原有連線不會自動依新規則重新建立。必要時請關閉相關連線再試,不要只是不斷重新整理同一個重複使用中的工作階段。

TUN:接管流量入口,不取代規則與 DNS

TUN 模式會透過虛擬網卡將流量交給核心,適用於不讀取系統代理設定的應用程式。這是與 mixed-port 不同的連線方式,但流量接管後,仍須由策略組和規則決定出口。以下範例維持停用,只展示 mihomo 常見欄位的結構。

tun:
  enable: false
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

auto-route 用來自動設定路由,auto-detect-interface 用來自動偵測輸出介面;實際支援情況與行為會受到作業系統和核心版本影響。dns-hijack 中的 any:53 用於處理遭接管的一般 DNS 流量,不能因此宣稱應用程式內建的 DoH 或所有加密 DNS 都會遭到接管。

啟用 TUN 通常需要系統授權。FlClash 介面上的開關也可能影響最終產生的設定,因此不能只看訂閱檔中的 enable 就斷定目前的執行狀態。請一併確認虛擬網卡、路由、用戶端狀態與連線記錄。如果系統同時執行其他 VPN,請先記錄原本狀態,再逐一停用並比較,避免同時變更多個流量接管入口。

檢查縮排與最小可載入範例

YAML 使用縮排表示結構,建議統一使用兩個空格,不要使用 Tab。頂層的 dns、proxies、proxy-groups 和 rules 應對齊;同一個節點中的 type、server、port 則應位於同一層。

  1. 檢查冒號後是否有空格。mode: rule 是鍵值寫法,mode:rule 可能會被當成一般字串。
  2. 檢查清單項目的連字號。節點、組內候選項目和規則都是清單,但各自所屬的層級不同。
  3. 檢查特殊字元。密碼或名稱含有 #、冒號後接空格等內容時,請加上合適的引號;雙引號字串中的反斜線也涉及跳脫處理。
  4. 檢查重複鍵。不要在檔案末尾再新增第二個頂層 rules。請將規則合併到原有清單,重複的鍵可能會造成錯誤或覆寫。
  5. 檢查名稱引用。「手動選擇」和「手動選擇 」不是同一個名稱;修改節點或策略組名稱時,也要一併修改引用位置。

先確認直連設定結構,再加入真實節點

以下是一份獨立的最小設定,所有連線最終都會直連。它不提供遠端代理功能,適合用來在本機副本中確認連接埠、策略組和規則的基本結構。不要把它當成訂閱的替代品,覆寫目前日常使用的設定。

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

proxies: []

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

rules:
  - MATCH,手動選擇

如果使用獨立的 mihomo 程式,可執行 mihomo -t -f ./config.yaml 檢查指定檔案。檢查通過只表示核心能接受這份設定,無法證明節點驗證資訊正確、上游 DNS 可連線或路由已接管。若使用 FlClash 管理設定,請在用戶端內重新載入,再查看實際錯誤訊息。

繼續設定時,可參考進階設定說明,確認策略組、規則與 TUN 之間的關係;若要從匯入訂閱開始操作,請依照設定教學完成匯入與模式選擇。設定檔描述的是預期行為,最終結果仍應以用戶端執行狀態和連線記錄為準。