先分清兩頁的分工。教學頁是快速上手主線:裝用戶端、匯入訂閱、選模式、驗證連線,跟著做就能跑通。本頁是查閱手冊,不講操作順序,只講 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-port 與 tproxy-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 異常網路裡「能連但打不開」的常見解法。
| 欄位 | 典型取值 | 說明 |
|---|---|---|
| port | 7890 | HTTP 代理埠 |
| socks-port | 7891 | SOCKS5 代理埠 |
| mixed-port | 7897 | 混合埠,HTTP 與 SOCKS 共用,建議使用 |
| redir-port / tproxy-port | 7892 / 7893 | Linux 透明代理專用,桌面留空 |
| allow-lan | false | 是否允許區域網路裝置連入 |
| bind-address | * | allow-lan 開啟時的監聽位址 |
| mode | rule | rule / global / direct 三選一 |
| log-level | info | silent / error / warning / info / debug |
| ipv6 | false | 是否允許 AAAA 解析與 IPv6 出站 |
| external-controller | 127.0.0.1:9090 | 核心 API 監聽位址 |
| secret | 空 | API 存取金鑰,非本機監聽時必填 |
| profile.store-selected | true | 記住手動選擇的節點 |
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.5 | UDP 53 | 明文查詢,最快,可能被竊聽 |
| tls://dns.alidns.com | DoT | TLS 加密通道 |
| https://doh.pub/dns-query | DoH | HTTPS 加密,可走 443 |
| quic://dns.alidns.com | DoQ | QUIC 傳輸,低延遲 |
| dhcp://en0 | DHCP | 取網卡 DHCP 下發的 DNS |
策略解析。nameserver-policy 依網域指派解析器,鍵可以是具體網域、geosite: 分類或 rule-set: 規則集——台灣本地網域走電信業者 DoH、其餘走可信境外 DoH,都靠這一段表達。舊欄位 fallback 已棄用,mihomo 中由 nameserver-policy 取代,遷移時依「哪類網域用哪組伺服器」重寫。
其餘開關。respect-rules: true 讓境外解析器本身也依規則出站,需搭配 proxy-server-nameserver 使用。use-hosts 與 use-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
排錯線索。網頁「能連但打不開」、開啟極慢、解析到錯誤地區,先看 DNS:在日誌裡依網域查解析路徑,確認它走進了哪一組解析器、拿到了什麼結果,再回頭改對應的欄位。
04代理節點欄位:proxies 陣列
proxies 是陣列,一個元素代表一個節點。所有節點共用四個基礎欄位:name、type、server、port;其餘欄位由 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-key 與 short-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-password。up、down 單位為 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
欄位核對方法:節點連不上時,依 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-ASN | ASN 編號 | 依目標自治網域比對 |
| 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-NAME 與 PROCESS-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-port、mode 這類標量值寫什麼就是什麼;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。
「改了不生效」依序排查:
- 改了檔案,但設定頁沒有重新啟用,核心還在跑舊設定。
- 改的是訂閱原文,覆寫層又把它改回去——請查看執行時最終設定確認。
- 設定沒問題,但 GUI 連著舊核心行程,請重啟核心或重新連線。
- 系統代理或 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 鍵分類名稱是否寫對——分類名稱寫錯會靜默落空,不會報錯。
收尾。仍無頭緒時,依常見問題頁的分類清單逐一排查;用戶端下載與核心說明在下載頁,選型比較在用戶端對比頁。