設定進階 · CONFIG REFERENCE

Clash 設定檔完整參考

config.yaml 查閱手冊:結構總覽、通用欄位、DNS、代理節點、策略組、規則語法、覆寫合併,逐段附 YAML 範例。欄位以 mihomo 核心(原 Clash Meta)為準,與原版 Clash 有差異之處另行標註。

  • 核心解析 · MIHOMO
  • 性質 · 查閱手冊
  • 配套 · SETUP.HTML 教學

先分清兩頁的分工。教學頁是快速上手主線:裝用戶端、匯入訂閱、選模式、驗證連線,跟著做就能跑通。本頁是查閱手冊,不講操作順序,只講 config.yaml 每個欄位的含義、可用值與寫法。訂閱下發的設定大多已經寫好,手冊的用途是讀懂它、改對它。文中用戶端與下載頁清單一致:各平台首推 Clash Plus,與 Clash Verge Rev、FlClash 同屬 mihomo 核心生態,本手冊對這些用戶端同樣適用。

01YAML 結構總覽

config.yaml 是核心的唯一輸入。Clash Verge Rev、Clash Plus、FlClash 這些圖形用戶端,本質上都在做同一件事:管理這份檔案,交給 mihomo 核心執行。介面上的每次點擊——換節點、切模式、改通訊埠——最終都落回 YAML 文字。讀懂這份檔案,等於讀懂用戶端的全部行為;改對這份檔案,等於改對全部用戶端。

檔案位置不用死記路徑。Clash Verge Rev 設定頁任一訂閱卡片按右鍵,「開啟檔案」直達目前設定原文,同一選單裡還有更新、編輯等入口。核心直接執行的情境(伺服器、路由器)沒有 GUI,檔案位置由啟動參數 -f(指定檔案)或 -d(指定目錄)給出,與用戶端無關。

頂層結構依職責分五區,書寫順序不強制,社群慣例固定如下:

# ① 通用欄位:通訊埠、模式、日誌、外部控制
mixed-port: 7897
mode: rule
log-level: info

# ② DNS:核心接管網域解析
dns:
  enable: true

# ③ 代理節點:出站清單
proxies: []

# ④ 策略組:節點的組織方式
proxy-groups: []

# ⑤ 規則:分流判定,由上而下
rules:
  - MATCH,DIRECT

五區之外是擴充區:proxy-providers 彙整訂閱節點、rule-providers 引入外部規則集、tun 接管系統流量、hosts 靜態網域表、listeners 額外監聽。用到哪個查哪個,在對應章節展開。

YAML 語法六條硬規則,違反任何一條都會導致啟用失敗:

  • 縮排只用空格,禁用 Tab;同層縮排必須等寬,慣例兩個空格。
  • key: value 冒號後必須有一個空格,key:value 是非法寫法。
  • 清單項目以 - 開頭,短橫線後同樣要空格;- 與父鍵同列或再縮排皆可,全檔案統一即可。
  • 字串含 #: ,或以 @&* 開頭,或看起來像數字、布林值時,必須加引號。密碼欄位幾乎總是需要。
  • # 起注釋,行尾注釋與內容之間留空格,否則 # 會被吞進前面的字串。
  • 錠點 &name 與引用 *name 可重複使用同段內容,核心依標準 YAML 解析,支援此特性。

最小可用設定。二十行,已能完成「本機混合埠 + 單節點 + 台灣本地直連、其餘走代理」的完整分流:

mixed-port: 7897
allow-lan: false
mode: rule
log-level: info
dns:
  enable: true
  nameserver:
    - 223.5.5.5
    - 119.29.29.29
proxies:
  - name: 節點A
    type: ss
    server: ss.example.com
    port: 8388
    cipher: aes-128-gcm
    password: "your-password"
proxy-groups:
  - name: 預設代理
    type: select
    proxies:
      - 節點A
      - DIRECT
rules:
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  - MATCH,預設代理

修改與生效分兩步:改檔案,再讓核心重新載入。Clash Verge Rev 裡重新啟用設定即觸發熱重載;GUI 上的系統代理、TUN、開機自動啟動屬於用戶端設定,不會寫進訂閱檔案,兩類設定別混為一談。

靜默忽略 欄位名打錯不會報錯——核心會靜默忽略不認識的欄位。設定「改了沒反應」時,先逐字核對欄位名,再查縮排。

核心差異要留心。原版 Clash 已停止更新,Clash Meta 更名為 mihomo 繼續維護,三代核心的欄位並不通用:mihomo 新增的 vless、hysteria2、tuic、wireguard 節點類型與邏輯規則,舊核心無法辨識。各用戶端內建核心的對應關係見部落格文章《Clash 核心版本差異整理》。本頁欄位一律以 mihomo 為準。

02通用欄位:通訊埠、模式與行為基準

通用欄位位於頂層,管核心的監聽、模式與行為基準。它們與具體節點無關,改任何一項都會影響全局。訂閱設定通常已帶合理預設值,需要動的主要是通訊埠、模式與日誌三處。

通訊埠族。port 是 HTTP 代理埠,socks-port 是 SOCKS5 埠,mixed-port 把兩種協定合併到同一埠——系統代理與多數應用程式只認其中一種,混合埠免去二選一,Clash Verge Rev 預設使用 7897 混合埠。redir-porttproxy-port 只服務 Linux 透明代理,桌面用戶留空即可。

區域網路。allow-lan: true 開放區域網路存取,bind-address 決定監聽網卡,* 表示全部網卡。手機、電視共用電腦代理的完整設定方式見部落格文章《混合埠與區域網路共享代理設定》。開放即暴露:只在可信網路開啟,公共 Wi-Fi 下請保持 false

模式。mode 三選一:rule 依規則分流,日常常駐;global 全部流量走選定的代理組;direct 全部直連。GUI 的模式切換就是改寫這個欄位。規則排錯的標準二分法:先切到 global 驗證代理鏈路本身是否可用,再切回 rule 逐段查規則。

日誌與外部控制。log-level 五個等級,從 silent 到 debug;日常用 info,排錯時暫調 debug,用完記得調回——debug 日誌量大,且包含存取過的網域。external-controller 是核心 RESTful API 的監聽位址,GUI 與第三方面板都經由它控制核心;監聽位址改成非本機位址時必須同時設定 secret,否則等於把代理控制權交給同網段的任何人。

行為微調。unified-delay: true 統一測速口徑,剔除協定交握差異,節點間延遲才有比較意義。tcp-concurrent: true 對候選位址並發建立連線、取最快者。find-process-mode 控制程序比對,PROCESS-NAME 規則依賴它。profile.store-selected: true 讓核心記住手動選過的節點,重啟不丟失。ipv6: false 是 IPv6 異常網路裡「能連但打不開」的常見解法。

欄位典型取值說明
port7890HTTP 代理埠
socks-port7891SOCKS5 代理埠
mixed-port7897混合埠,HTTP 與 SOCKS 共用,建議使用
redir-port / tproxy-port7892 / 7893Linux 透明代理專用,桌面留空
allow-lanfalse是否允許區域網路裝置連入
bind-address*allow-lan 開啟時的監聽位址
moderulerule / global / direct 三選一
log-levelinfosilent / error / warning / info / debug
ipv6false是否允許 AAAA 解析與 IPv6 出站
external-controller127.0.0.1:9090核心 API 監聽位址
secretAPI 存取金鑰,非本機監聽時必填
profile.store-selectedtrue記住手動選擇的節點
port: 7890
socks-port: 7891
mixed-port: 7897
allow-lan: false
bind-address: "*"
mode: rule
log-level: info
ipv6: false
unified-delay: true
tcp-concurrent: true
find-process-mode: strict
external-controller: 127.0.0.1:9090
secret: "your-secret"
profile:
  store-selected: true
  store-fake-ip: false
通訊埠被佔用 啟用時出現 bind: address already in use,即通訊埠已被佔用:換用 mixed-port,或找出佔用的程序。Windows 下用 netstat -ano | findstr :7897 定位,macOS 與 Linux 用 lsof -i :7897

03DNS 欄位:解析路徑與 fake-ip

DNS 獨立成一章,因為分流是否正確,一半取決於它。規則裡的 GEOIP、IP-CIDR 都要先拿到解析結果;解析被污染,分流也跟著出錯。dns.enable: true 是前提——設為 false 時整段失效,核心退回系統解析,假位址、策略解析全部不會運作。

監聽與模式。listen 決定核心 DNS 服務的監聽位址;TUN 模式下查詢由核心內部接管,系統端不需要改動。enhanced-mode: fake-ip 是主流選擇:網域查詢立即回傳 198.18.0.1/16 池中的假位址,連線真正建立時核心依網域比對規則,省掉一次真實解析的等待,網頁開啟明顯更快。舊的 redir-host 模式已從 mihomo 移除,舊設定裡看到應該刪除。

fake-ip 範圍。fake-ip-range 預設 198.18.0.1/16,僅在與內部網段衝突時才需要修改。fake-ip-filter 是不發假位址的白名單:區域網路網域、NTP 授時、系統連通性探測必須列入,否則印表機、路由器後台、時間同步會莫名失敗。下方範例列出常用項目,照抄後再補上自己的內部網域。

解析器分組。nameserver 是預設群組,支援多種寫法(見下表),多台伺服器並發查詢、取最快回應。proxy-server-nameserver 專門解析節點網域:節點位址本身也是網域,用它指定可信解析器,避免「要先連上代理才能解析代理」的死循環。direct-nameserver 服務直連網域,通常填電信業者或台灣本地公共 DNS。

寫法協定說明
223.5.5.5UDP 53明文查詢,最快,可能被竊聽
tls://dns.alidns.comDoTTLS 加密通道
https://doh.pub/dns-queryDoHHTTPS 加密,可走 443
quic://dns.alidns.comDoQQUIC 傳輸,低延遲
dhcp://en0DHCP取網卡 DHCP 下發的 DNS

策略解析。nameserver-policy 依網域指派解析器,鍵可以是具體網域、geosite: 分類或 rule-set: 規則集——台灣本地網域走電信業者 DoH、其餘走可信境外 DoH,都靠這一段表達。舊欄位 fallback 已棄用,mihomo 中由 nameserver-policy 取代,遷移時依「哪類網域用哪組伺服器」重寫。

其餘開關。respect-rules: true 讓境外解析器本身也依規則出站,需搭配 proxy-server-nameserver 使用。use-hostsuse-system-hosts 控制 hosts 表來源。prefer-h3 讓 DoH 查詢優先走 HTTP/3。

dns:
  enable: true
  listen: 0.0.0.0:53
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter:
    - "*.lan"
    - "*.local"
    - "time.*.com"
    - "ntp.*.com"
    - "+.msftconnecttest.com"
    - "+.msftncsi.com"
  use-hosts: true
  use-system-hosts: true
  prefer-h3: true
  nameserver:
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query
  proxy-server-nameserver:
    - https://doh.pub/dns-query
  direct-nameserver:
    - 223.5.5.5
    - 119.29.29.29
  nameserver-policy:
    "geosite:cn":
      - 223.5.5.5
      - https://doh.pub/dns-query
    "geosite:geolocation-!cn":
      - https://dns.cloudflare.com/dns-query
      - https://dns.google/dns-query
內部網域要加兩處 內部網域要同時加進 fake-ip-filter 與 nameserver-policy(或 direct-nameserver)。只加一處,仍可能拿到假位址,表現為內部網站時開時不開。

排錯線索。網頁「能連但打不開」、開啟極慢、解析到錯誤地區,先看 DNS:在日誌裡依網域查解析路徑,確認它走進了哪一組解析器、拿到了什麼結果,再回頭改對應的欄位。

04代理節點欄位:proxies 陣列

proxies 是陣列,一個元素代表一個節點。所有節點共用四個基礎欄位:nametypeserverport;其餘欄位由 type 決定。寫錯 type 專屬欄位的名稱,核心不會報錯、直接忽略,節點會表現為連不上。

name 是節點的身分證:策略組依名稱引用它,重名時後者覆蓋前者,改名會讓所有引用失效。名稱含空格、冒號、# 時要加引號。server 可以是網域或 IP;填網域時由 proxy-server-nameserver 負責解析,見上一章。

通用選填欄位。udp: true 允許 UDP 轉發,QUIC、遊戲、語音通話都需要它。skip-cert-verify: true 跳過憑證驗證,只作臨時排查手段。tfo 開啟 TCP Fast Open。interface-name 指定出網卡,多網卡機器用得上。

Shadowsocks

  - name: ss-node
    type: ss
    server: ss.example.com
    port: 8388
    cipher: aes-128-gcm
    password: "your-password"
    udp: true

cipher 常見取值:aes-128-gcm、aes-256-gcm、chacha20-ietf-poly1305、2022-blake3-aes-128-gcm。plugin 可搭配 obfs 或 v2ray-plugin 做流量偽裝,參數放進 plugin-opts

VMess

  - name: vmess-ws
    type: vmess
    server: vmess.example.com
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    alterId: 0
    cipher: auto
    tls: true
    servername: vmess.example.com
    network: ws
    ws-opts:
      path: /ray
      headers:
        Host: vmess.example.com
    udp: true

alterId 現代伺服端一律為 0。network 支援 tcp、ws、grpc、h2、http;ws 傳輸時 ws-opts 裡的 path 與 headers.Host 必須與伺服端完全一致,錯一個字元就是 400。

VLESS + Reality

  - name: vless-reality
    type: vless
    server: 192.0.2.10
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    network: tcp
    tls: true
    udp: true
    flow: xtls-rprx-vision
    servername: www.microsoft.com
    client-fingerprint: chrome
    reality-opts:
      public-key: "your-public-key"
      short-id: "0123456789abcdef"

flow 只認 xtls-rprx-vision。Reality 的 public-keyshort-id 來自伺服端設定,client-fingerprint 建議填 chrome,servername 填伺服端偽裝的網域。

Trojan

  - name: trojan-node
    type: trojan
    server: trojan.example.com
    port: 443
    password: "your-password"
    sni: trojan.example.com
    alpn:
      - h2
      - http/1.1
    skip-cert-verify: false
    udp: true

sni 必須等於伺服端憑證網域,alpn 常見 h2 與 http/1.1。密碼即認證憑據,一旦洩漏等於節點洩漏。

Hysteria2

  - name: hy2-node
    type: hysteria2
    server: hy2.example.com
    port: 443
    password: "your-password"
    obfs: salamander
    obfs-password: "obfs-password"
    sni: hy2.example.com
    skip-cert-verify: false
    up: 50
    down: 200

基於 QUIC,強制使用 UDP,udp 欄位不必寫。obfs 目前僅 salamander,密語放進 obfs-passwordupdown 單位為 Mbps,虛報頻寬會讓壅塞控制起反效果,請按實際填寫。電信業者 QoS 嚴重時可用 ports 設定跳埠。

TUIC

  - name: tuic-node
    type: tuic
    server: tuic.example.com
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    password: "your-password"
    alpn:
      - h3
    congestion-controller: bbr
    udp-relay-mode: native
    reduce-rtt: true
    sni: tuic.example.com

第五版協定。congestion-controller 可選 bbr、cubic、new_reno,高丟包鏈路 bbr 較穩定。udp-relay-mode 預設 native;reduce-rtt: true 可降低交握延遲。

WireGuard

  - name: wg-node
    type: wireguard
    server: 198.51.100.20
    port: 51820
    ip: 172.16.0.2
    private-key: "your-private-key"
    public-key: "peer-public-key"
    mtu: 1420
    udp: true

ip 是分配到的隧道位址;private-key 是本機私鑰、public-key 是對端公鑰,別填反了。mtu 常見 1420;部分服務商要求填 reserved 三段位元組,照抄官方用戶端匯出的值即可。

訂閱彙整:proxy-providers

訂閱下發的節點由 proxy-providers 管理:核心定時拉取、依 health-check 進行健康檢查,策略組用 use 引用整組節點。手寫節點與 provider 節點可以混在同一份設定裡。

proxy-providers:
  provider-01:
    type: http
    url: "https://example.com/subscribe?token=xxxx"
    path: ./providers/provider-01.yaml
    interval: 86400
    health-check:
      enable: true
      url: http://www.gstatic.com/generate_204
      interval: 300
skip-cert-verify 的代價 長期開啟等於放棄 TLS 的身分驗證,中間人可冒充節點。只在排查憑證問題時暫時開啟,確認鏈路後立即關回 false。

欄位核對方法:節點連不上時,依 type 找到對應小節的範例,逐欄位比對——多寫的欄位會被忽略,少寫的欄位用預設值,拼錯的欄位不會警示。訂閱節點的欄位以服務商下發為準,核心欄位名全網統一。

05策略組欄位:proxy-groups

策略組決定「流量交給誰」。規則裡只寫策略名,策略名背後是組,組裡是節點——三層解耦,換節點不動規則,改規則不動節點。

五種類型,行為各不相同:

type行為適用場景
select手動選擇最外層入口組,GUI 點哪個就用哪個
url-test定期測速選最低延遲同地區多節點自動擇優
fallback依順序取第一個可用主備切換,主節點恢復後自動切回
load-balance連線分攤到多節點大流量下載、多線疊加
relay串接鏈路中轉加速、特殊落地
  • select:手動選擇,適合作為最外層入口組,其他組掛在它下面。
  • url-test:定期對組內節點測延遲、選最低者;tolerance 設為 50(毫秒)可防止延遲抖動導致來回跳節點。
  • fallback:依 proxies 順序取第一個通過健康檢查的節點,主節點恢復後自動切回。
  • load-balance:strategy 三選一——consistent-hashing 同網域固定同節點、網站連線最穩定;round-robin 輪詢;sticky-sessions 同連線同節點。
  • relay:流量先進第一個節點、再從最後一個節點出站,鏈路上每一跳都必須可用,任何一跳中斷整條鏈路就斷。

通用欄位。proxies 列節點名稱,use 列 proxy-providers 名稱,兩者可混用。filter 用正規表達式篩選節點名稱(如 香港|HK),exclude-filter 反向排除,exclude-type 依協定類型排除。icon 供 GUI 顯示圖示,hidden: true 在 GUI 裡隱藏該組,disable-udp: true 禁止該組轉發 UDP。

測速欄位。url 預設 http://www.gstatic.com/generate_204,回傳 204 即判定可用;interval 單位為秒,太短耗電、太長反應遲鈍,300 是常見折衷值;timeout 是單次測速逾時;lazy: true(預設)表示組沒人用時不測速;max-failed-times 控制連續失敗多少次判定節點不可用;expected-status 指定期望的 HTTP 狀態碼。

巢狀結構。組的 proxies 裡可以再寫組名,「預設代理 → 自動選擇 → 各節點」的三層結構就是這樣搭起來的;rules 裡引用最外層組名即可。訂閱下發的設定通常已帶好幾層組,手動加節點時往最外層組加,才能全鏈路生效。

proxy-groups:
  - name: 預設代理
    type: select
    proxies:
      - 自動選擇
      - 故障轉移
      - DIRECT
    use:
      - provider-01

  - name: 自動選擇
    type: url-test
    use:
      - provider-01
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50
    lazy: true

  - name: 故障轉移
    type: fallback
    proxies:
      - 香港節點
      - 日本節點
    url: http://www.gstatic.com/generate_204
    interval: 120

  - name: 負載平衡
    type: load-balance
    use:
      - provider-01
    strategy: consistent-hashing
    url: http://www.gstatic.com/generate_204
    interval: 300

  - name: 中繼鏈
    type: relay
    proxies:
      - 入口節點
      - 落地節點

三種自動組的取捨細節——測速擇優、故障轉移、負載平衡各自適合什麼場景——見部落格文章《Clash 策略組類型該怎麼選》。組的設計原則只有一條:少而精,每多一個組都是一份維護成本;組名會被規則引用,改名要連帶改規則。

06規則語法:由上而下,首條命中

規則是分流的核心大腦,比對模型只有一句話:由上而下,首條命中即停。順序就是優先順序;MATCH 無條件命中,必須放在最後一條,它之後的規則永遠不會被執行。

單條規則是三段式:類型,參數,策略,部分類型可再追加第四段 no-resolve。策略可以是策略組名,也可以是內建策略:DIRECT 直連、REJECT 拒絕並回傳錯誤、REJECT-DROP 靜默丟棄、PASS 跳過目前分支繼續比對(主要搭配 SUB-RULES 使用)。

類型參數說明
DOMAIN完整網域精確比對單一網域
DOMAIN-SUFFIX網域後綴比對該網域及其全部子網域
DOMAIN-KEYWORD關鍵字網域包含即命中,慎用,誤判範圍大
GEOSITE分類名稱網域分類庫,如 cn、category-games@cn
IP-CIDR / IP-CIDR6網段依目標 IP 比對
IP-ASNASN 編號依目標自治網域比對
GEOIP國家代碼依目標 IP 所屬地區比對
SRC-IP-CIDR網段依來源 IP 比對
SRC-PORT / DST-PORT通訊埠依來源 / 目標通訊埠比對
PROCESS-NAME程序名稱依發起程序比對
PROCESS-PATH完整路徑依程序路徑比對
RULE-SET規則集名稱引用 rule-providers
AND / OR / NOT子規則邏輯組合,mihomo 特有
SUB-RULES子規則組名稱進入子規則分支
MATCH兜底,必須是最後一條

網域類與 IP 類是分水嶺。網域規則(DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOSITE)直接拿連線裡的網域比對,不需要解析。IP 類規則(IP-CIDR、GEOIP、IP-ASN)需要目標 IP——網域連線走到 IP 規則時,核心被迫先做一次 DNS 解析才能判斷。第四段 no-resolve 可禁止這次解析:網域連線直接跳過該規則,只有純 IP 連線才參與比對。所有 IP 類規則都應該加上 no-resolve,除非明確要依解析結果分流。

GEO 資料。GEOSITE 與 GEOIP 依賴 geosite.dat 與 geoip.dat(或 mmdb)資料檔,geodata-mode: true 切換為 dat 格式;檔案隨核心更新,缺失時對應規則會靜默比對不到,表現為分流失效。

邏輯規則

mihomo 支援 AND、OR、NOT 組合子規則,子規則用雙層括號包裹:

rules:
  - AND,((DOMAIN-SUFFIX,example.com),(PROCESS-NAME,chrome.exe)),預設代理
  - OR,((DOMAIN-KEYWORD,blog),(DOMAIN-SUFFIX,notes.io)),預設代理
  - NOT,((GEOSITE,cn)),預設代理

規則集:rule-providers

量大、更新頻繁的規則交給 rule-providers 外部規則集,rules 裡用 RULE-SET,名稱,策略 引用;behavior 三選一:domain(網域後綴)、ipcidr(IP 段)、classical(經典三段式)。

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

rules:
  - RULE-SET,ad-list,REJECT
  - MATCH,預設代理

程序比對。PROCESS-NAMEPROCESS-PATH 依賴 find-process-mode;Windows 下程序名稱帶 .exe 後綴,macOS 與 Linux 用可執行檔名稱。

排序原則:

  • 精確在前,寬泛在後:DOMAIN 先於 DOMAIN-SUFFIX,後綴先於 GEOSITE。
  • 區域網路與內部網段置頂直連,不進代理。
  • 台灣本地直連收尾用 GEOSITE,cn 加 GEOIP,CN,別逐條列網域。
  • MATCH 永遠放最後,指向主代理組或 DIRECT。
rules:
  # 區域網路與內部網段直連
  - DOMAIN-SUFFIX,local,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  # 程序與應用程式
  - PROCESS-NAME,steam.exe,遊戲加速
  # 網域規則,精確在前
  - DOMAIN,api.example.com,預設代理
  - DOMAIN-KEYWORD,telegram,預設代理
  # 分類庫收尾
  - GEOSITE,category-games@cn,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT,no-resolve
  # 兜底
  - MATCH,預設代理

07覆寫與合併:訂閱更新不丟改動

手動修改訂閱檔案有個死結:訂閱一更新,改動全部丟失。Clash Verge Rev 為此提供三層修改機制,依「改什麼、留不留」分工。

第一層,編輯檔案。設定頁訂閱卡片按右鍵「編輯檔案」,直接改 YAML 原文,儲存即生效,但下次訂閱更新就會被覆蓋。只用於臨時偵錯與想法驗證,驗證完的改動要搬到下面兩層。

第二層,訂閱層級編輯。右鍵「編輯規則」「編輯代理」「編輯代理組」,分別對訂閱的規則、節點、策略組做前插或後插。它綁定目前訂閱、不會被更新覆蓋,是最常用的一層——加一條內部網路直連規則、加一個自建節點,都在這裡完成。

第三層,全局擴充設定。設定頁右上角入口,兩種形態:Merge 用 YAML 宣告合併意圖,Script 用 JavaScript 拿到整個設定物件自由改寫。它作用於所有設定,切換訂閱不會丟失,適合放與訂閱無關的個人基準設定。

Merge:宣告式合併

六個專用鍵控制陣列合併方向,prepend 在前、append 在後;規則前插意味著比訂閱自帶規則更早命中。其餘頂層鍵直接覆蓋原值:mixed-portmode 這類標量值寫什麼就是什麼;dns 這類巢狀區塊按整段替換,覆寫時要把整段寫全,不要只寫一半。

prepend-rules:
  - DOMAIN-SUFFIX,internal.example.com,DIRECT
append-rules:
  - DOMAIN-KEYWORD,download,下載分組
prepend-proxies:
  - name: 自建備用
    type: ss
    server: 203.0.113.10
    port: 8388
    cipher: aes-256-gcm
    password: "your-password"
append-proxy-groups:
  - name: 下載分組
    type: select
    proxies:
      - 自建備用
      - DIRECT
mixed-port: 7897

Script:程式化改寫

需要條件邏輯時用腳本。入口固定為 main(config),參數是合併後的完整設定,回傳值就是交給核心的最終設定:

function main(config) {
  config["mixed-port"] = 7897;
  const extra = {
    name: "自建備用",
    type: "ss",
    server: "203.0.113.10",
    port: 8388,
    cipher: "aes-256-gcm",
    password: "your-password"
  };
  config.proxies = config.proxies || [];
  config.proxies.push(extra);
  (config["proxy-groups"] || []).forEach(function (group) {
    if (Array.isArray(group.proxies)) {
      group.proxies.push("自建備用");
    }
  });
  return config;
}

生效順序固定:訂閱原文 → 訂閱層級編輯(規則/代理/代理組)→ 全局 Merge → 全局 Script → 核心。排錯沿鏈反向查:先看執行時最終生效的設定長什麼樣,再逐層定位問題出在哪一層。

高頻覆寫情境:

  • 內部網域直連:prepend-rules 加 DOMAIN-SUFFIX 規則,前插可保證最先命中。
  • 自建節點注入所有組:Script 遍歷 proxy-groups 統一追加。
  • 統一通訊埠:Merge 裡寫一行 mixed-port。
  • fake-ip-filter 補內部網域:覆寫 dns 整段,把訂閱的 filter 清單抄全再追加。

其他用戶端與直接執行。Clash Plus、FlClash 同樣提供「訂閱 + 本機修改」的機制,思路相同、入口不同;核心直接執行沒有覆寫層,得直接維護原始檔案,建議用 Git 管理歷史版本。多裝置維護同一套設定的方案比較,見部落格文章《Clash 設定多裝置同步的三種方案》

分層排錯 覆寫層報錯與原始檔案報錯要分開看:啟用失敗時,錯誤提示會標明出問題的是哪一層的哪一段,先修那一層,不要動訂閱原文。

08校驗與排錯:從報錯到日誌

啟用失敗先讀報錯訊息。Clash Verge Rev 啟用設定時核心會做完整解析,報錯訊息帶行號與原因;依行號回到檔案,九成問題都能在這一步定位。報錯被截斷時,去日誌頁看完整輸出。

YAML 高頻錯誤,依出現率排序:

  • Tab 縮排:編輯器設定裡把 Tab 轉為空格,全檔案統一用兩個空格。
  • 冒號後缺空格:port:7890 是非法寫法。
  • 密碼含 # 未加引號:# 之後的內容會被當成注釋,密碼被截斷。
  • 清單縮排錯位:- 與父鍵的從屬關係錯亂,節點跑到別的鍵下面。
  • 節點重名:後者覆蓋前者,策略組裡引用的只剩一個。
  • 規則指向不存在的策略名稱:啟用即報 proxy not found,請檢查組名拼寫。

日誌是第二現場。把 log-level 暫時調到 debug,核心日誌頁能看到每條連線命中了哪條規則、走了哪個出站;介面各區塊功能見部落格文章《Clash Verge Rev 介面功能速覽》。排查完記得調回 info。

「改了不生效」依序排查:

  1. 改了檔案,但設定頁沒有重新啟用,核心還在跑舊設定。
  2. 改的是訂閱原文,覆寫層又把它改回去——請查看執行時最終設定確認。
  3. 設定沒問題,但 GUI 連著舊核心行程,請重啟核心或重新連線。
  4. 系統代理或 TUN 沒開,流量根本沒進核心,改什麼都沒用。

通訊埠與區域網路。出現 bind: address already in use 是通訊埠被佔用:換用 mixed-port,或結束佔用的程序。allow-lan 已開但手機連不上:先查電腦防火牆是否放行該通訊埠,再確認兩端在同一網段、填的是電腦的內部網路 IP。

fake-ip 異常。個別應用程式(銀行、政府企業、部分帶防作弊機制的遊戲)對假位址敏感:把網域加進 fake-ip-filter,配置 direct-nameserver,必要時整條規則直連。加完後重新啟用設定即可生效。

TLS 與時間。憑證類報錯先校準系統時間,偏差幾分鐘交握必然失敗;skip-cert-verify 只作臨時排查手段,確認鏈路後請關回 false。

DNS 洩漏與污染。懷疑洩漏時依序查:nameserver 是否全部走可信通道、proxy-server-nameserver 是否已設定、respect-rules 是否符合預期、nameserver-policy 的 geosite 鍵分類名稱是否寫對——分類名稱寫錯會靜默落空,不會報錯。

收尾。仍無頭緒時,依常見問題頁的分類清單逐一排查;用戶端下載與核心說明在下載頁,選型比較在用戶端對比頁

先留一份備份 改設定前先留一份能用的備份。任何一層改壞了,回退到備份重新啟用,比重寫一遍快得多。