核心原理 · 深度解析

Clash 是怎麼工作的?

從流量入口到規則匹配再到協定出站,把 Clash 的完整代理鏈路拆開講清楚——幫你真正理解規則分流、TUN 透明代理、DNS 防洩漏背後的機制,而不只是會粘貼配置。

一條請求是如何在 Clash 中被處理的?

當你在瀏覽器裡打開一個網址,流量並不是直接發出去的。Clash 在本地監聽一個或多個連接埠,攔截所有出站連接,經過規則引擎判斷後,才決定走「直連」還是「代理出站」。

整個鏈路分為五個階段,每個階段都有 Clash 明確的介入點:

  1. 流量攔截——應用發起連接,系統代理或 TUN 虛擬網卡將流量轉發給 Clash 進程
  2. DNS 解析——Clash 內建 DNS 模組介入,根據配置決定使用 Fake-IP 還是真實 IP 解析
  3. 規則匹配——按照 rules 列表從上到下逐條比對域名、IP、進程名等條件
  4. 策略組調度——命中某條規則後,交給對應策略組(Proxy / DIRECT / REJECT)處理
  5. 協定出站——使用選定節點的協定(SS / VMess / Trojan…)完成加密傳輸

Clash 規則引擎:優先級、匹配類型與執行順序

規則引擎是 Clash 最核心的能力。它按照 rules 列表從第一條到最後一條逐行匹配,第一條命中的規則立刻生效,後續規則不再執行——順序決定一切。

域名類規則

最常用的一類,精確到域名或字尾級別,適合對特定網站做分流。

DOMAINgoogle.comProxy
DOMAIN-SUFFIXgithub.comProxy
DOMAIN-KEYWORDyoutubeProxy
  • DOMAIN:精確匹配,僅命中完整域名
  • DOMAIN-SUFFIX:字尾匹配,同時命中所有子域名
  • DOMAIN-KEYWORD:關鍵詞匹配,域名中含該詞即命中

IP / 地理位置規則

基於目標 IP 地址或 GeoIP 數據庫做判斷,是「國內直連、國外代理」的核心規則。

IP-CIDR192.168.0.0/16DIRECT
IP-CIDR6fe80::/10DIRECT
GEOIPCNDIRECT
  • IP-CIDR:精確匹配 IPv4 子網段
  • IP-CIDR6:精確匹配 IPv6 子網段
  • GEOIP:調用 Country.mmdb 庫查詢歸屬地

進程 / 連接埠規則

按應用進程名或連接埠號做分流,適合針對特定軟體(如開發工具、遊戲客戶端)單獨配置出口。

PROCESS-NAMEchromeProxy
SRC-PORT7890DIRECT
DST-PORT443Proxy
  • PROCESS-NAME:按進程名匹配(macOS / Windows 支持較好)
  • DST-PORT:按目標連接埠匹配,常用於 80 / 443

規則集 RULE-SET

把成百上千條規則封裝進一個遠端訂閱文件,客戶端定期拉取更新,是大型分流方案的標準做法。

# rule-providers 定義規則集
RULE-SETgfwProxy
RULE-SETcn_domainDIRECT
  • 規則集支持 YAML / text 兩種格式
  • 可設置 interval 自動定期更新
  • 社群常用:Loyalsoldier / blackmatrix7 等維護的規則集

規則順序決定分流結果

規則從上到下依次匹配,第一條命中即生效,後續規則不再執行。常見錯誤:把 MATCH,DIRECT 放在 GEOIP 前面,會導致所有流量直連。推薦順序:

  1. 本地 / 私網地址(IP-CIDR 192.168.0.0/16)→ DIRECT
  2. 明確需要代理的域名 / RULE-SET → Proxy 策略組
  3. 明確需要直連的域名 / RULE-SET → DIRECT
  4. GEOIP,CN,DIRECT——IP 歸屬國內則直連
  5. MATCH,Proxy——兜底,未命中的流量走代理

TUN 模式 vs 系統代理:區別與適用場景

Clash 支持兩種接管流量的方式,選錯模式是「某些 App 不走代理」的常見根因:

系統代理模式
TUN 透明代理
原理
在系統中註冊 HTTP/SOCKS5 代理地址,應用主動連接該地址
建立虛擬網卡,在網路層攔截全部 IP 流量
覆蓋範圍
僅支持系統代理設置的應用(瀏覽器、大多數 App)
所有進程的所有出站流量,包括命令行工具、遊戲客戶端
需要權限
普通用戶權限
管理員 / root 權限(建立虛擬網卡)
適合場景
日常瀏覽、簡單代理需求
遊戲加速、命令行工具代理、全局流量接管

TUN 模式配置示意

config.yaml
tun:
  enable: true
  stack: system # or gvisor
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

stack 選項system 使用系統網路棧性能更高,gvisor 用戶態網路棧兼容性更好;Mihomo 內核還支持 mixed 混合模式。

Clash DNS 工作原理:Fake-IP、Redir-Host 與 DNS 防洩漏

DNS 洩漏是代理用戶最容易忽視的安全盲區——你的流量走了代理,但 DNS 查詢卻被明文發給了本地 ISP,暴露你訪問的域名。Clash 內建完整的 DNS 處理模組來應對這個問題。

Fake-IP 模式

推薦

Clash 收到 DNS 請求後,立刻返回一個虛假 IP(如 198.18.x.x),讓應用儘快發起連接;真正的 DNS 解析推遲到節點側完成,避免在本地提前洩漏域名。

1 應用問:google.com 是多少?
2 Clash 返回假 IP 198.18.0.1
3 應用連接該假 IP,Clash 攔截並記錄真實域名
4 節點側重新解析並連接真實伺服器
  • 連接速度更快(無需等待真實 DNS 響應)
  • 防洩漏效果好,域名不經過本地 DNS
  • 與規則引擎配合最流暢

Redir-Host 模式

兼容模式

先在本地完成真實 DNS 解析,把域名解析為真實 IP 後再交給規則引擎做 GEOIP 匹配。兼容性更好,但 DNS 查詢本身可能洩漏給本地 ISP。

1 應用問:google.com 是多少?
2 Clash 向上游 DNS 查詢真實 IP
3 返回真實 IP,規則引擎用 IP 做 GEOIP 判斷
4 按規則決定直連或代理
  • 對特殊網路環境兼容性更好
  • GEOIP 規則匹配更精確(基於真實 IP)
  • DNS 查詢在本地發生,存在洩漏風險

DNS 配置參考

config.yaml — dns 塊
dns:
  enable: true
  enhanced-mode: fake-ip # or redir-host
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 8.8.8.8
    - 114.114.114.114
  fallback: # used when GEOIP != CN
    - tls://1.1.1.1:853
    - https://dns.google/dns-query
  fallback-filter:
    geoip: true
    geoip-code: CN

fallback 配合 fallback-filter:當域名解析到國外 IP 時,自動用加密的 DoT / DoH 伺服器重新解析,防止污染。

Clash 支持的代理協定:原理差異與選型建議

協定決定流量的加密方式和混淆策略。Clash 原生支持多種協定,Mihomo(Clash Meta)內核進一步擴充了對新一代協定的支持。

Shadowsocks(SS)

經典穩定

使用對稱加密(AES / ChaCha20)對流量進行加密,外觀上看起來像隨機數據,能一定程度對抗深度包檢測(DPI)。協定設計簡潔,客戶端支持最廣泛。

加密AES-256-GCM / ChaCha20-Poly1305
傳輸層TCP / UDP
適合場景日常代理,節點廣泛,入門首選

VMess

V2Ray 生態

V2Ray 項目設計的專屬協定,在加密之外加入了時間戳驗證和混淆能力,可配合 WebSocket + TLS 偽裝成 HTTPS 流量,抗封鎖能力強。

加密AES-128-GCM / ChaCha20-Poly1305
傳輸層TCP / WebSocket / gRPC / HTTP/2
適合場景高封鎖環境,搭配 CDN 效果好

Trojan

TLS 偽裝

直接在 TLS 層傳輸代理數據,外觀與正常 HTTPS 完全一致,無需額外混淆層。伺服器端同時提供真實網頁響應,進一步隱蔽代理特徵。

加密TLS 1.3(證書驗證)
傳輸層TCP / WebSocket
適合場景需要 TLS 偽裝,流量特徵最接近 HTTPS

Hysteria2

Mihomo 支持

基於 QUIC(UDP)的新一代高性能協定,在弱網、高丟包環境下表現顯著優於 TCP 協定族。專為高延遲、不穩定網路場景設計。

傳輸層QUIC(基於 UDP)
優勢弱網環境下速度更快,抗丟包能力強
要求需要 Mihomo(Clash Meta)內核

TUIC

Mihomo 支持

同樣基於 QUIC,專注於低延遲和連接複用,0-RTT 握手設計減少首包延遲,適合對響應速度敏感的場景(如遊戲、即時音視訊)。

傳輸層QUIC(UDP)+ 0-RTT
優勢超低首包延遲,連接複用效率高
要求需要 Mihomo(Clash Meta)內核

WireGuard

Mihomo 支持

現代 VPN 協定,代碼量極少、審計簡單,使用 ChaCha20 + Poly1305 加密,內核級實現性能極高。Mihomo 支持將 WireGuard 作為出站協定使用。

加密ChaCha20-Poly1305 / Curve25519
傳輸層UDP
要求需要 Mihomo(Clash Meta)內核

策略組詳解:URL-Test 自動測速、Fallback 故障切換、負載均衡

策略組是規則「打包」和節點「調度」的核心機制。規則命中後,流量不直接交給某個節點,而是交給一個策略組——由策略組決定用哪個節點,實現自動測速、故障切換等能力。

select · 手動選擇

用戶從節點列表中手動挑選當前使用的節點,客戶端通常在介面上直接展示。適合想要精細控制出口的用戶。

type: select
proxies: [HK-01, SG-02, JP-03]

url-test · 延遲自動選優

定期對所有節點發出 HTTP 探測請求,自動選擇響應延遲最低的節點。節點延遲超出 tolerance 閾值時才切換,避免頻繁抖動。

type: url-test
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 50

fallback · 故障自動切換

按順序使用第一個節點,當它無法通過健康檢測時自動切換到第二個,以此類推。適合需要穩定性保障的場景。

type: fallback
url: http://www.gstatic.com/generate_204
interval: 180

load-balance · 負載均衡

多個節點輪流承擔流量,將連接分散到不同節點上,提升整體吞吐量。Mihomo 支持 consistent-hashing 確保同一會話用同一節點。

type: load-balance
strategy: consistent-hashing
url: http://www.gstatic.com/generate_204

Clash 經典內核 vs Mihomo(Clash Meta):該用哪個?

Clash 目前有兩條主要分支,日常使用時經常混稱,但能力差異明顯——尤其是協定支持和 TUN 增強功能。

Clash(經典)

Dreamacro/clash
  • Shadowsocks / VMess / Trojan / SNELL
  • HTTP / SOCKS5 代理
  • Rule / Global / Direct 三種模式
  • Fake-IP / Redir-Host DNS
  • TUN 模式(基礎)
  • Hysteria2 / TUIC / WireGuard
  • 增強 TUN(gVisor / mixed stack)
  • 規則集提供商(rule-providers)進階能力
VS

Mihomo(Clash Meta)

metacubex/mihomo
  • Shadowsocks / VMess / Trojan / SNELL
  • Hysteria2 / TUIC / WireGuard / VLESS
  • Rule / Global / Direct / Script 模式
  • Fake-IP + fallback-filter 增強 DNS
  • 增強 TUN(system / gVisor / mixed)
  • rule-providers 遠端規則集訂閱
  • Sub-Rule 子規則、GeoSite 數據庫
  • 多架構:x86_64 / ARM / MIPS

結論:新用戶直接選擇基於 Mihomo(Clash Meta) 內核的客戶端(如 Clash Verge Rev、Mihomo Party、Clash Meta for Android),能獲得更完整的協定支持與 TUN 能力,無需折衷。經典 Clash 內核的客戶端仍然穩定,但協定生態的持續更新集中在 Mihomo 分支。

核心原理常見問題

Clash 的規則順序為什麼很重要?
規則引擎逐行從上往下匹配,第一條命中即生效、後續不再執行。如果把寬泛的 MATCH 放在前面,會導致下面所有規則永遠不被觸發。合理順序應是:區域網路 → 明確代理域名 → 明確直連域名 → GEOIP → MATCH 兜底。
Fake-IP 會導致某些應用出問題嗎?
少數應用(如部分遊戲、區域網路服務)會對 198.18.x.x 段 IP 做特殊處理導致異常。Clash 提供 fake-ip-filter 配置項,可以把特定域名排除在 Fake-IP 之外,讓它們走正常 DNS 解析。
TUN 模式開啟後系統變慢是為什麼?
TUN 模式攔截所有流量並在用戶態處理,會比直接走內核網路棧多一層開銷。Mihomo 的 system stack 比 gvisor 性能更高;若機器性能不足,可以只對特定應用開系統代理,不開 TUN。
VMess 和 Shadowsocks 哪個更安全?
兩者在加密層面旗鼓相當(均使用 AEAD 加密)。區別在於流量特徵:Shadowsocks 的流量特徵相對簡單;VMess 搭配 WebSocket+TLS 可以完全偽裝成正常 HTTPS,在高強度檢測環境下更不容易被識別和封鎖。
url-test 策略組的測速 URL 有什麼要求?
測速 URL 應該響應快、服務穩定,通常使用 Google 的 http://www.gstatic.com/generate_204(返回 204 空響應)或 http://cp.cloudflare.com/generate_204。建議使用能通過代理訪問的境外地址,避免用國內地址造成誤判。
Country.mmdb 是什麼,多久需要更新一次?
Country.mmdb 是 MaxMind GeoIP2 格式的 IP 歸屬數據庫,GEOIP 規則依靠它把 IP 地址映射到國家代碼。建議每 1-3 個月更新一次,部分客戶端支持自動更新。可從 Loyalsoldier 等社群維護的精化版本獲取更準確的 CN IP 覆蓋。

理解原理之後,下一步:下載並配置 Clash

選擇適合你平台的客戶端,三步完成安裝與訂閱配置,立即體驗智慧分流。