config.yaml 結構總覽
一份完整的配置檔案由幾個頂層欄位組成,理解這張表之後,後面每一節展開的都是其中某一個欄位的詳細寫法:
| 欄位 | 作用 |
|---|---|
port / socks-port | 本地 HTTP / SOCKS5 代理埠 |
allow-lan | 是否允許區域網裝置連線本機代理 |
mode | 執行模式:rule(按規則分流)、global(全域性代理)、direct(全域性直連) |
log-level | 日誌詳細程度:silent / error / warning / info / debug |
external-controller | RESTful API 監聽地址,配合面板類使用者端使用 |
dns | DNS 分流與防外洩相關配置 |
proxies | 本地手寫的節點列表(訂閱節點不需要寫在這裡) |
proxy-groups | 策略組定義 |
proxy-providers | 遠端節點提供者(訂閱連結的底層機制) |
rule-providers | 遠端規則集提供者 |
rules | 最終生效的分流規則列表,從上到下逐條匹配 |
config.yaml(或其中的 proxies/rules 片段)併合併到本地配置,理解了這份結構,手動排查訂閱問題會容易很多。
代理協議引數詳解
如果需要手動新增節點(而不是完全依賴訂閱),下面是幾種主流協議在 proxies 欄位下的核心引數:
Shadowsocks
核心欄位是 cipher(加密方式,如 aes-256-gcm、chacha20-ietf-poly1305)與 password;部分節點還會附帶 plugin(如 obfs 或 v2ray-plugin)用於流量混淆。
VMess
需要 uuid 與 alterId(新版通常為 0),cipher 常見為 auto;若節點開啟了 TLS,還需要填寫 tls、servername(即 SNI)等欄位。
Trojan
核心欄位是 password 與 sni,Trojan 預設強制使用 TLS 偽裝為正常 HTTPS 流量,因此 sni 是否與證書域名匹配會直接影響可用性。
Hysteria2
基於 QUIC 協議,核心欄位是 password 與 up / down(上傳/下載頻寬提示值),在弱網或高延遲線路上通常比傳統 TCP 協議更穩定。
WireGuard
欄位風格與前面幾種不同:需要 private-key、對端 public-key,以及 ip(本機在 WireGuard 內網中的地址),配置較為底層,一般由節點提供方直接給出完整片段。
點開檢視幾種協議的欄位示例
proxies:
- name: "ss-node"
type: ss
server: example.com
port: 443
cipher: aes-256-gcm
password: "your-password"
- name: "trojan-node"
type: trojan
server: example.com
port: 443
password: "your-password"
sni: example.com
- name: "hy2-node"
type: hysteria2
server: example.com
port: 443
password: "your-password"
up: "50 Mbps"
down: "200 Mbps"
規則語法完全參考
規則格式統一為 規則型別,匹配內容,目標策略,從上到下逐條匹配、命中即停。下面是常用規則型別的完整列表:
| 規則型別 | 匹配物件 | 示例 |
|---|---|---|
DOMAIN | 完全匹配的域名 | DOMAIN,ad.example.com,REJECT |
DOMAIN-SUFFIX | 域名字尾 | DOMAIN-SUFFIX,google.com,PROXY |
DOMAIN-KEYWORD | 域名中包含的關鍵字 | DOMAIN-KEYWORD,youtube,PROXY |
DOMAIN-REGEX | 正則表示式匹配域名 | DOMAIN-REGEX,^ad\d+\.com$,REJECT |
GEOIP | IP 歸屬地(配合 GeoIP 資料庫) | GEOIP,CN,DIRECT |
IP-CIDR / IP-CIDR6 | IPv4 / IPv6 地址段 | IP-CIDR,192.168.0.0/16,DIRECT |
SRC-IP-CIDR | 發起請求的本機源 IP 段 | SRC-IP-CIDR,192.168.1.100/32,DIRECT |
SRC-PORT / DST-PORT | 源埠 / 目標埠 | DST-PORT,22,DIRECT |
PROCESS-NAME | 發起請求的程序名(分應用代理的底層機制) | PROCESS-NAME,com.app.id,PROXY |
RULE-SET | 引用一個 Rule Provider 規則集 | RULE-SET,reject,REJECT |
MATCH | 兜底規則,匹配所有未命中的流量 | MATCH,PROXY |
DOMAIN-REGEX 或大型 RULE-SET 放在明顯不會命中的位置之前,會拖慢每一次請求的匹配速度。
Provider 機制:Proxy Provider 與 Rule Provider
Provider 是 Clash 管理「遠端、可自動更新」資源的統一機制——訂閱連結背後其實就是一個 Proxy Provider,規則集背後就是一個 Rule Provider,兩者都支援定期自動拉取更新,無需手動替換檔案。
proxy-providers:
my-sub:
type: http
url: "https://example.com/api/v1/subscribe?token=xxx"
interval: 3600
health-check:
enable: true
url: http://www.gstatic.com/generate_204
interval: 300
rule-providers:
reject:
type: http
behavior: domain
url: "https://example.com/rules/reject.txt"
path: ./rules/reject.txt
interval: 86400
其中 interval 控制自動更新週期(單位秒),health-check 讓使用者端定期對 Provider 下的節點批次測速,behavior 則告訴使用者端規則集裡的內容是域名列表(domain)、IP 段(ipcidr)還是完整規則(classical)。
策略組高階引數
除了基礎的 type 和 proxies,策略組還有幾個值得了解的進階引數:
lazy—— 為url-test/fallback組開啟後,只有在實際被使用時才後臺測速,減少空閒時的資源佔用;tolerance—— 延遲容差(毫秒),新節點延遲只有比當前節點低於這個值才會觸發切換,避免因測速抖動頻繁切換節點;strategy(僅load-balance組)—— 負載均衡策略,常見為consistent-hashing(同一目標地址固定走同一節點,適合需要會話保持的場景)或round-robin(依次輪詢);disable-udp—— 停用該策略組下節點的 UDP 轉發,部分節點或線路對 UDP 支援不佳時可以關閉。
DNS 高階配置
DNS 配置除了開關防外洩,還可以精細控制解析行為:
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5
- 119.29.29.29
fallback:
- https://1.1.1.1/dns-query
- https://8.8.8.8/dns-query
nameserver-policy:
"geosite:cn": [223.5.5.5, 119.29.29.29]
fallback-filter:
geoip: true
geoip-code: CN
enhanced-mode: fake-ip 是最常見的模式,使用者端給每個域名分配一個虛擬 IP 再在代理層還原真實域名,相容性最好;nameserver-policy 可以按域名歸屬分別指定用哪組 DNS 解析,fallback-filter 則用來判斷某次解析結果是否「像是」被汙染,從而決定要不要改用 fallback 列表重新查詢。
TUN 模式引數詳解
TUN 模式的核心引數如下:
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
stack 決定虛擬網絡卡的實現方式,system 相容性最好,gvisor/mixed 在部分場景下效能更好;auto-route 開啟後用戶端會自動接管系統路由表,auto-detect-interface 讓使用者端自動識別當前使用的物理網絡卡,避免手動指定;dns-hijack 用於強制接管走 UDP 53 埠的 DNS 請求,防止應用繞過系統 DNS 設定直接查詢。
外部控制與 RESTful API
設定 external-controller 後,Clash 會在指定地址上開放一套 RESTful API,配合儀表盤類使用者端可以即時檢視連線、切換節點、查詢延遲等,而不需要重啟使用者端。
external-controller: 127.0.0.1:9090
secret: "your-strong-secret"
secret 並保證 external-controller 只監聽本機地址(127.0.0.1),如果繫結到 0.0.0.0 又沒有設定金鑰,相當於把代理控制權限暴露給整個網路。
效能與安全建議
- 優先使用
RULE-SET引用規則集,而不是把成百上千條DOMAIN-SUFFIX平鋪在rules裡,前者匹配效率更高、維護也更方便; - 把訪問頻率最高、最明確的規則放在
rules列表靠前的位置,減少平均匹配次數; - 非必要不要把
log-level設為debug長期執行,詳細日誌會持續佔用磁碟和記憶體; external-controller一律設定secret,多裝置/多平臺之間不要複用同一個金鑰;- 策略組的測速間隔不宜過短,幾十秒到幾分鐘一次足夠及時發現節點異常,過於頻繁反而增加節點側壓力和本機資源佔用;
- 自定義覆寫的規則和策略組建議單獨存放備份,訂閱更新或重灌使用者端後可以快速找回。
常見問題
為什麼改了配置檔案不生效?
大多數使用者端需要手動點選「重新載入配置」或重啟使用者端才會應用改動;如果是透過訂閱管理的配置,直接編輯本地檔案可能會在下次自動更新時被覆蓋,建議改用覆寫功能。
RULE-SET 和直接寫規則有什麼區別?
效果上是一樣的,區別在於維護方式:RULE-SET 是一份可以遠端更新的獨立檔案,規則內容變化時不需要重新匯入整份配置;直接寫在 rules 裡的規則修改後必須手動改動配置檔案本身。
fake-ip 和 redir-host 模式該怎麼選?
fake-ip 相容性和速度都更好,是目前的主流選擇;redir-host 透過修改 DNS 返回結果實現,某些依賴真實 IP 做校驗的應用可能會異常,僅在 fake-ip 模式下遇到明確相容性問題時再考慮切換。
external-controller 埠被佔用怎麼辦?
修改 external-controller 裡的埠號為其他未被佔用的埠即可,常見預設埠是 9090;也可以用系統命令檢視該埠被哪個程序佔用後再決定是否關閉。
策略組一直測速失敗怎麼排查?
先確認測速地址(url 欄位)本身能否被節點訪問到,部分測速地址在特定網路環境下會被攔截;也可以換用其他公開的連通性測試地址,或檢查節點本身是否已經失效。
可以同時使用多個 Rule Provider 嗎?
可以,rule-providers 支援定義任意多個規則集,在 rules 列表裡按需透過 RULE-SET 名稱分別引用即可,順序仍然遵循從上到下逐條匹配的規則。