Clash 設定檔通常使用 YAML 撰寫,會將監聽連接埠、運作模式、DNS、代理節點、策略群組與分流規則放在同一份文件中。欄位排列順序通常不影響核心讀取,但依照「基礎參數 → DNS → 節點 → 策略群組 → 規則」的順序撰寫,更容易找出引用關係與縮排錯誤。
本文以 Clash for Windows 0.20.39 常見設定結構,以及 mihomo v1.19 系列的設定語意為參考。不同核心支援的協定、TUN 參數與 DNS 擴充欄位不完全相同。修改訂閱產生的設定前,建議先另存本機副本,避免下次更新訂閱時覆蓋手動修改的內容。
YAML 語法與頂層結構
縮排、清單與鍵值
YAML 使用空格表示層級,不能用 Tab 取代縮排。常見做法是每層縮排 2 個空格。冒號後要保留一個空格,清單項目則以短橫線開頭。節點、策略群組與規則位於不同的頂層鍵下,層級只要錯一格,就可能導致整份檔案無法載入。
port: 7890
mode: rule
proxies:
- name: "範例節點"
type: ss
server: 203.0.113.10
port: 443
proxy-groups:
- name: "節點選擇"
type: select
proxies:
- "範例節點"
- DIRECT
rules:
- MATCH,節點選擇
port: 7890 是一組鍵值;proxies: 後方是清單;每個以 - name: 開頭的項目都是一個節點物件。包含冒號、井字號、星號,或容易被判讀為布林值的名稱,最好加上引號。例如將節點名稱寫成 "HK: 01",可避免冒號被當成映射分隔符。
常見解析錯誤
- 縮排不一致:常見提示包括
did not find expected key、mapping values are not allowed。 - 重複鍵:檔案中出現兩個頂層
dns:時,不同解析器可能拒絕載入,也可能只保留後一個。 - 清單漏寫短橫線:
rules、proxies與策略群組中的proxies都是清單。 - 名稱不完全相符:
香港選擇與香港選擇是兩個字串,結尾空格也會導致策略群組引用失敗。 - 註解截斷內容:井字號通常表示註解開始。密碼或名稱包含
#時,應使用引號。
連接埠、區域網路與運作模式欄位
檔案開頭通常是入站監聽與基礎運作參數。以下範例分別為 HTTP、SOCKS5 與混合代理設定連接埠。實際使用時不必同時開啟三種連接埠,桌面用戶端最常使用的是 mixed-port。
port: 7890
socks-port: 7891
mixed-port: 7892
allow-lan: false
bind-address: "*"
mode: rule
log-level: info
ipv6: false
external-controller: 127.0.0.1:9090
secret: "change-this-controller-secret"
三種代理連接埠有什麼差異
port:HTTP 代理連接埠。應用程式必須支援 HTTP 代理設定。socks-port:支援 SOCKS4、SOCKS4a 或 SOCKS5 的範圍取決於核心,常見用戶端會以 SOCKS5 使用。mixed-port:同一個連接埠可接收 HTTP 與 SOCKS 請求,常用值為7890或7892。
同一個 IP 與連接埠不能同時由兩個程式監聽。如果日誌出現 address already in use 或 bind: Only one usage of each socket address,應先檢查連接埠是否被舊的 Clash 程序、其他代理工具或本機開發服務佔用。Windows 可在終端機執行 netstat -ano | findstr :7890,找出對應的 PID。
allow-lan 與 bind-address
allow-lan: false 表示不向區域網路裝置提供代理入口。改為 true 後,手機或其他電腦可以將代理伺服器填寫為目前電腦的區域網路位址,例如 192.168.1.20:7890。此時也要允許 Windows 防火牆放行對應連接埠。
bind-address 決定監聽位址。僅供本機使用時,綁定 127.0.0.1 會更明確;需要區域網路存取時,可依核心支援狀況使用 * 或指定網卡位址。只修改 allow-lan 不代表其他裝置一定能連線,防火牆、訪客網路隔離與路由器 AP 隔離也可能阻擋存取。
mode、log-level 與控制連接埠
mode: rule:依照rules從上到下比對,是日常使用的主要模式。mode: global:將流量統一交給全域策略群組,適合短時間測試節點連通性。mode: direct:直接連線,不經過代理節點,適合排查代理是否為故障來源。log-level:常見值包括silent、error、warning、info與debug。排查問題時可暫時使用debug,完成後恢復為info,避免日誌過於密集。external-controller:提供控制 API,常見的本機位址為127.0.0.1:9090。設定secret後,控制面板連線時必須帶上相同金鑰。
DNS 段落:監聽器、解析器與增強模式
DNS 段落決定網域名稱的解析方式。它不僅會影響規則比對,也會影響 TUN 模式下的網域接管。常見的基礎結構如下:
dns:
enable: true
listen: 127.0.0.1:1053
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "localhost.ptlogin2.qq.com"
- "+.msftconnecttest.com"
default-nameserver:
- 223.5.5.5
- 1.1.1.1
nameserver:
- https://dns.alidns.com/dns-query
- tls://1.1.1.1:853
fallback:
- https://dns.google/dns-query
fallback-filter:
geoip: true
geoip-code: CN
enable、listen 與 default-nameserver
enable 控制內建 DNS 模組。listen 是 DNS 服務的監聽位址,範例使用本機 UDP/TCP 連接埠 1053。如果其他本機 DNS 程式已佔用該連接埠,日誌會顯示監聽失敗。
default-nameserver 主要用於解析 DoH、DoT 等上游伺服器本身的網域名稱,也常稱為引導 DNS。為避免循環依賴,這裡通常填寫可直接存取的 IP 位址,而不是另一個必須先解析的網域名稱。
nameserver、fallback 與策略解析
nameserver 是主要解析器,可以是一般 DNS 位址,也可以是 DoH 或 DoT 位址。fallback 與 fallback-filter 是經典 Clash 設定中常見的備援解析結構。mihomo 也支援 nameserver-policy、proxy-server-nameserver、direct-nameserver 等細分欄位,可依網域規則或代理節點的解析用途選擇不同上游。
不要將「寫了多個 DNS」理解成所有請求都會同時採用全部結果。核心會依據欄位語意、過濾條件與回應結果選擇解析路徑。遇到網域可以解析但網站無法開啟時,應同時查看 DNS 日誌、規則命中情況與節點連線,不能只根據瀏覽器錯誤判斷。
fake-ip 與 redir-host
fake-ip:先為網域名稱回傳保留位址範圍內的映射位址,再由核心將連線還原至網域名稱。這有助於透明代理保留網域資訊,常見位址池為198.18.0.1/16。redir-host:先取得真實 IP,再依解析結果處理連線。部分區域網路裝置、舊版軟體或特殊驗證環境,與此模式的相容性更直接。fake-ip-filter:讓區域網路網域、連線檢測網域或不適合使用 Fake IP 的網域回傳真實結果。過度擴大過濾範圍,會削弱 Fake IP 辨識網域的效果。
proxies:單一代理節點欄位
proxies 儲存手動定義的節點。訂閱通常會自動產生這一段。不同協定所需欄位各異,但每個節點至少要有唯一名稱、協定類型、伺服器位址與連接埠。
proxies:
- name: "SS-HK-01"
type: ss
server: hk.example.net
port: 443
cipher: aes-128-gcm
password: "example-password"
udp: true
- name: "VMess-JP-01"
type: vmess
server: jp.example.net
port: 443
uuid: 11111111-2222-3333-4444-555555555555
alterId: 0
cipher: auto
tls: true
servername: jp.example.net
network: ws
ws-opts:
path: /gateway
headers:
Host: jp.example.net
通用欄位與協定欄位
name:節點在策略群組中的引用名稱,必須逐字相符。名稱重複會導致選擇結果不明確,應保持唯一。type:協定類型,例如ss、vmess、trojan。mihomo 還支援更多協定,能否使用取決於目前的核心。server與port:伺服器網域名稱或 IP,以及連接埠。連接埠通常是 1 至 65535 的整數,寫成含空格的字串可能導致驗證失敗。udp:宣告節點是否啟用 UDP 轉發。它不會讓本身不支援 UDP 的協定或伺服器自動取得這項能力。tls、servername或sni:控制 TLS 與伺服器名稱。欄位名稱會因協定與核心版本而異,不能機械式地複製到所有節點。skip-cert-verify:跳過憑證驗證會降低連線身分驗證能力。遇到憑證錯誤時,應優先核對系統時間、SNI、憑證網域名稱與伺服器設定。
節點能出現在清單中,只代表 YAML 已成功解析,不表示連線參數正確。驗證資訊錯誤通常會表現為握手失敗;伺服器位址無法解析會顯示 DNS 錯誤;WebSocket 路徑或 Host 不一致,通常會表現為連線建立後立即中斷。排查時應在用戶端開啟「日誌」,並暫時將等級切換為 debug,再針對單一節點發起延遲測試。
proxy-providers 與 proxy-groups
節點提供器 proxy-providers
proxy-providers 可以從本機檔案或遠端位址載入一組節點。與直接將所有節點寫入 proxies 相比,提供器更適合將節點來源與策略群組結構分開管理。
proxy-providers:
provider-main:
type: http
url: "https://example.com/subscription"
path: ./providers/provider-main.yaml
interval: 3600
health-check:
enable: true
interval: 600
url: https://www.gstatic.com/generate_204
interval: 3600 表示每 3600 秒檢查一次更新;健康檢查的 interval: 600 表示每 10 分鐘執行一次測試。提供器下載失敗時,應檢查訂閱位址是否可存取、系統時間、代理啟動階段是否存在循環依賴,以及儲存路徑是否可寫入。
策略群組的類型與引用
proxy-groups:
- name: "節點選擇"
type: select
proxies:
- "自動選擇"
- "故障轉移"
- DIRECT
use:
- provider-main
- name: "自動選擇"
type: url-test
use:
- provider-main
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 80
- name: "故障轉移"
type: fallback
use:
- provider-main
url: https://www.gstatic.com/generate_204
interval: 300
select:由使用者手動選擇節點、內建策略或其他策略群組。url-test:定期測試候選節點,並選擇測試結果較低的可用項目。延遲測試值是向測試位址發出請求所需的時間,不等同於所有網站的實際下載速度。fallback:依候選順序使用可用節點,目前節點無法使用時切換至後續節點。load-balance:依核心支援的策略在多個節點間分配連線,適合明確了解工作階段一致性需求的情境。proxies:直接列出節點名稱或策略群組名稱;use:引用一個或多個 proxy-provider。
tolerance: 80 表示延遲差距在 80 毫秒以內時,自動選擇群組不必頻繁切換。數值過小可能導致節點因輕微網路波動而反覆變更;數值過大則可能繼續保留明顯變慢的節點。家用寬頻可從 50 至 100 毫秒開始調整。
rules 與 rule-providers:分流的比對順序
rules 決定連線交給哪個策略群組。規則會由上到下比對,命中第一條後就停止繼續檢查,因此越具體的規則通常越靠前,最後再放兜底規則。
rules:
- DOMAIN,api.example.com,節點選擇
- DOMAIN-SUFFIX,example.net,節點選擇
- DOMAIN-KEYWORD,stream,自動選擇
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,節點選擇
常見規則類型
DOMAIN:只比對完整網域名稱,例如api.example.com。DOMAIN-SUFFIX:比對指定網域及其子網域,例如example.net。DOMAIN-KEYWORD:依網域中的關鍵字比對,範圍較寬,關鍵字太短容易造成誤判。IP-CIDR:比對 IPv4 網段;IPv6 通常使用IP-CIDR6。GEOIP:依目標 IP 的地理資料庫結果比對。資料庫版本會影響結果,不能將它等同於網域所屬地區。MATCH:最終兜底。經典設定中也常見FINAL,實際支援情況應以目前核心為準。
no-resolve 用於避免某些 IP 規則為了比對而額外觸發網域解析。它不是所有規則都需要的通用後綴。若將 MATCH 放在第一行,後續規則永遠沒有機會命中;若規則引用不存在的策略群組,載入時可能直接報錯,也可能在處理連線時顯示找不到策略。
規則提供器 rule-providers
rule-providers:
private-network:
type: http
behavior: ipcidr
format: yaml
url: "https://example.com/rules/private-network.yaml"
path: ./ruleset/private-network.yaml
interval: 86400
rules:
- RULE-SET,private-network,DIRECT
- MATCH,節點選擇
behavior 必須與規則集內容相符,常見值包括 domain、ipcidr 與 classical。將網域規則集宣告為 ipcidr,會導致內容無法正確解析。mihomo 的規則集還涉及 format;遠端檔案採用 YAML、文字或二進位格式時,必須填寫對應值。
TUN 段落與透明代理參數
TUN 模式會建立虛擬網路介面,用於接管未單獨設定代理的應用程式流量。它與系統代理不是同一個入口。常見的 mihomo 設定如下:
tun:
enable: true
stack: mixed
dns-hijack:
- any:53
- tcp://any:53
auto-route: true
auto-detect-interface: true
strict-route: false
stack:常見值包括system、gvisor與mixed,實際支援範圍取決於核心版本與平台。dns-hijack:將指定連接埠的 DNS 請求交由核心處理。範例接管 UDP 與 TCP 的 53 連接埠請求。auto-route:自動寫入所需路由。Windows 上啟用失敗時,應檢查用戶端權限、虛擬網卡,以及其他 VPN 軟體建立的路由。auto-detect-interface:自動辨識預設出口網卡,適合在 Wi-Fi 與有線網路間切換的裝置。strict-route:採用更嚴格的路由限制,可能改善防漏效果,也可能影響區域網路、虛擬機器或特定企業網路。
啟用 TUN 後出現「瀏覽器能開、遊戲斷網」或「無法存取區域網路裝置」時,應依序檢查執行權限、路由表、DNS 接管、區域網路網段直連規則與其他 VPN。不要同時開啟多個會建立預設路由的網路工具。Windows 上也可以執行 route print,查看預設路由與介面優先順序。
一份易讀的最小設定與排錯流程
以下結構省略了真實驗證資訊,但保留從入口到規則的完整引用鏈。檢查設定時,可以從最後一行的策略群組反向追蹤:規則引用「節點選擇」,「節點選擇」引用「範例節點」,「範例節點」則包含伺服器參數。
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver:
- 223.5.5.5
nameserver:
- https://dns.alidns.com/dns-query
proxies:
- name: "範例節點"
type: ss
server: 203.0.113.10
port: 443
cipher: aes-128-gcm
password: "replace-with-valid-password"
udp: true
proxy-groups:
- name: "節點選擇"
type: select
proxies:
- "範例節點"
- DIRECT
rules:
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,節點選擇
依錯誤類型逐層檢查
- 檔案無法載入:先檢查 Tab、縮排、冒號、引號與重複鍵。此時不要先測試節點,因為核心尚未成功讀取設定。
- 設定已載入但策略群組為空:檢查
proxies是否包含節點、use的提供器名稱是否正確,以及 provider 檔案是否下載成功。 - 節點測試失敗:核對 server、port、驗證欄位、TLS 名稱與傳輸參數,再檢查伺服器網域是否能夠解析。
- 只有部分網站無法開啟:查看連線日誌中的規則命中情況、目標網域、策略群組與實際節點,確認規則順序是否將流量提前送往 DIRECT 或 REJECT。
- 系統代理有效但其他程式未經代理:確認程式是否遵循系統代理;若不遵循,再評估 TUN,不要透過重複新增寬泛規則來掩蓋入口問題。
- 更新訂閱後修改內容消失:將本機 DNS、TUN 或規則調整移至用戶端支援的覆寫或合併設定中。
欄位相容性與維護建議
Clash for Windows 0.20.39 使用的 Clash 核心設定,與持續更新的 mihomo 設定並不完全等價。較新的訂閱可能包含舊核心不認識的協定、規則集格式或 DNS 欄位。遇到 field not found、unsupported proxy type 這類錯誤時,應先確認用戶端實際呼叫的核心及版本,而不是只看介面名稱。
日常維護可以將設定分成三類:訂閱負責節點,規則提供器負責可更新的規則集,本機覆寫負責連接埠、DNS 與 TUN。這樣既能減少手動合併,也能讓問題落在明確區域。每次修改只處理一個主題,例如先修改 DNS 並重新載入,確認解析正常後再啟用 TUN。
設定檔的核心關係並不複雜:入站連接埠接收流量,DNS 提供網域資訊,規則決定策略群組,策略群組選擇節點,節點建立遠端連線。沿著這條鏈檢查,比反覆切換節點或一次替換整份 YAML 更容易找到具體欄位。