01核心概念:核心、客戶端與設定檔
核心與客戶端是兩層東西
Clash 生態由兩層組成。底層是核心:一個命令列程式,負責監聽本機連接埠、接收應用程式流量、依規則比對後轉發到對應的代理伺服器或直連出口。目前生態的主流核心是 mihomo(即 Clash Meta 分支),它在原版 Clash 核心封存後持續維護,擴充了出站協定、規則集與 TUN 堆疊,詳見部落格《mihomo 核心與原版 Clash 有什麼區別》。
上層是圖形客戶端:Clash Plus、Clash Verge Rev、FlClash 這些名稱各異的應用程式,本質都是核心的「駕駛艙」——負責匯入訂閱、切換節點、開關系統代理與 TUN、顯示日誌與連線。理解這一點後很多疑問會自動消解:不同客戶端的功能差異主要在介面與封裝,分流能力取決於核心;換客戶端不需要換訂閱,設定檔對任何核心相容的客戶端都通用。
設定檔的三大區塊
核心的全部行為由一份 YAML 設定檔(通常叫 config.yaml,客戶端裡稱 Profile)決定。無論檔案多長,骨架都是三塊:
- 入站與全域參數:監聽連接埠、區域網路存取開關、執行模式、日誌等級、DNS 設定。
- proxies 與 proxy-groups:節點清單(每個節點是一台代理伺服器的位址、連接埠、協定與憑證)和代理群組(把節點依策略編組,供規則引用)。
- rules:分流規則清單,決定每條連線走哪個代理群組。
這三塊的邊界值得記牢:出問題時先判斷症狀落在哪一塊,排查範圍立刻縮小三分之二。連接埠衝突、區域網路裝置連不上屬於第一塊;節點全部逾時、測速一直轉圈屬於第二塊;某個網站走錯出口、該直連的卻繞了一圈屬於第三塊。後面第八章的故障對照表就是按這個思路組織的。
一份最小可讀的全域參數段長這樣:
mixed-port: 7890 # HTTP 與 SOCKS5 合一的混合入站連接埠
allow-lan: false # 是否允許區域網路裝置接入
mode: rule # rule / global / direct 三種執行模式
log-level: info # silent / error / warning / info / debug
external-controller: 127.0.0.1:9090 # 本機 API 控制連接埠
其中 mixed-port 是最常被問到的欄位:它同時接受 HTTP 與 SOCKS5 兩種協定的連線,所以瀏覽器、命令列工具、下載器填同一個連接埠都能用,不必像早年那樣分別設定 port 與 socks-port。allow-lan 打開後,同一區域網路的手機、電視盒子把代理指向這台機器的內網位址即可共享分流,但也意味著任何能存取該網段的裝置都能借用你的代理,在公共網路下不要開啟。external-controller 預設只監聽 127.0.0.1,把它改成 0.0.0.0 會把控制介面暴露到區域網路,必須同時設定 secret 密語。
高頻名詞速查
| 名詞 | 含義 |
|---|---|
| 節點(Proxy) | 一台代理伺服器的連線資訊:位址、連接埠、協定、加密與憑證。 |
| 代理群組(Proxy Group) | 依策略組織的節點集合,如手動選擇、自動測速、故障轉移。 |
| 訂閱(Subscription) | 機場提供的 URL,存取後回傳一份完整設定檔,節點變動時重新抓取即可同步。 |
| Profile | 客戶端裡對「一份設定檔」的稱呼,可同時儲存多份並隨時切換。 |
| 延遲測試 | 客戶端向測試位址發出請求測量往返耗時,反映連線可用性而非頻寬。 |
| 規則集(Rule Set) | 把大量同類規則打包成外部檔案,設定裡一行引用,支援定期更新。 |
| GEO 資料 | GeoIP / GeoSite 資料庫,提供「依國家 IP 段」「依站點分類網域」的批量比對能力。 |
02選客戶端:平台矩陣與取捨
先看平台,再看偏好
選客戶端的第一個限制是作業系統。下表與下載中心的收錄一致,每格依推薦順序排列:
| 平台 | 推薦順序 | 備註 |
|---|---|---|
| Windows | Clash Plus → Clash Verge Rev → FlClash → Clash Nyanpasu | Clash for Windows 已停止維護,僅作封存 |
| macOS | Clash Plus → Clash Verge Rev → FlClash | ClashX Meta 已停止維護,僅作封存 |
| Android | Clash Plus → Clash Meta for Android → FlClash → Surfboard | 均以 VpnService 實作 |
| iOS | Clash Plus(App Store) | 商店直接取得,官網 clashplus.io |
| Linux | Clash Verge Rev → FlClash | 伺服器情境可直接執行 mihomo 核心 |
Clash Plus 是全平台首推:五個平台介面與操作邏輯一致,換裝置不用重新學習,內建 mihomo 核心,訂閱匯入、TUN、規則分流開箱可用。Clash Verge Rev 在桌面端提供更細緻的設定能力,覆寫腳本、外部控制、核心切換都有入口,適合願意讀文件的使用者。FlClash 以 Flutter 構建,一套介面橫跨桌面與 Android,偏好極簡操作可以選它。Clash Nyanpasu 是 Windows 上另一個 Verge 系分支,介面風格不同,功能面接近。Clash Meta for Android 是 Android 上最貼近核心原生行為的客戶端;Surfboard 則相容 Clash 設定格式,作為 Android 備選。
03安裝:五平台逐一過一遍
Windows
從下載中心 Windows 區取得安裝包,雙擊執行,依照嚮導選擇安裝目錄即可。兩個常見卡關點:一是 SmartScreen 提示「已保護你的電腦」,這是系統對新發布安裝包的預設攔截,點「其他資訊 → 仍要執行」繼續;二是安裝完成後找不到視窗——Clash 系客戶端啟動後預設收進工作列系統匣,點系統匣裡的貓圖示喚出主介面。若計畫使用 TUN 模式,首次啟動時同意客戶端申請的服務安裝或系統管理員授權,後面第七章會用到。
macOS
下載 .dmg 映像檔,開啟後把應用程式圖示拖入 Applications 資料夾。注意區分晶片版本:Apple Silicon(M 系列)與 Intel 對應不同安裝包,下載頁已分開標註。首次開啟如提示「無法驗證開發者」,到「系統設定 → 隱私權與安全性」頁面底部點「仍要打開」,或對應用程式圖示按右鍵選「打開」再確認一次。客戶端申請安裝輔助服務(用於接管系統代理與 TUN)時輸入密碼放行。
Linux
桌面發行版推薦 .deb 包,Debian / Ubuntu 系直接安裝:
# 檔名以實際下載為準
sudo apt install ./clash-verge-rev_amd64.deb
# 或使用 dpkg,再補齊依賴
sudo dpkg -i ./clash-verge-rev_amd64.deb
sudo apt -f install
安裝後從應用程式選單啟動。TUN 模式需要授予核心 CAP_NET_ADMIN 能力或以服務方式執行,客戶端設定裡通常有一鍵「服務模式」入口。無桌面的伺服器環境跳過 GUI,直接使用 mihomo 核心,見第九章。
Android
從下載中心 Android 區取得 APK,安裝時依系統提示允許「來自此來源的應用程式」。首次點擊連線,系統會彈出 VPN 連線請求對話框——這是 VpnService 機制的標準授權,確認後狀態列出現鑰匙圖示,表示流量已進入客戶端。部分中國大陸品牌系統的背景管控較為激進,建議同時把客戶端加入省電白名單與自動啟動允許清單,否則鎖定畫面一段時間後代理會被系統回收,細節見部落格《Clash Android 客戶端使用要點》。
iOS
iOS 透過 App Store 取得 Clash Plus,在下載頁 iOS 區有商店直達連結與官網 clashplus.io。安裝後首次啟動同樣會請求新增 VPN 設定,到「設定 → 一般 → VPN 與裝置管理」可以看到對應描述檔。訂閱匯入與節點切換的操作邏輯與桌面版一致,後續章節的概念全部通用。
04訂閱匯入與設定管理
訂閱連結是什麼
訂閱是一個 HTTPS 位址,由服務商產生,內容是隨節點變動即時更新的完整設定檔。客戶端「匯入訂閱」做的事就是:請求這個位址 → 把回傳的 YAML 存成一份 Profile → 設為目前生效設定。因此訂閱連結等同於帳號憑據,不要貼到公開場合,也不要在截圖裡裸露。
匯入與更新
- 在服務商用戶中心複製訂閱連結,注意選擇 Clash 或 mihomo 格式(部分面板對不同核心輸出不同內容)。
- 開啟客戶端的 Profile / 設定頁,貼上連結,點匯入。清單中出現新項目並顯示流量、到期時間(若面板提供)即成功。
- 點選該項目設為啟用。之後節點清單、代理群組、規則全部來自這份設定。
- 設定自動更新間隔(常見 24 小時)。服務商更換節點位址後,本地不更新就會出現「全部逾時」。
還有一類容易忽略的情況:訂閱本身可用,但客戶端顯示的到期時間或流量資料是空的。這些資訊來自服務商在 HTTP 回應標頭裡附帶的 subscription-userinfo 欄位,並非所有面板都會下發,缺失不影響節點使用,不必當成故障處理。反過來,如果流量數字長期不動,通常是客戶端拿的是本地快取——手動點一次更新即可刷新。
本地設定與多 Profile 管理
除了訂閱,客戶端也支援新建空白 Profile 或匯入本地 YAML 檔案,適合自架伺服器使用者與想完全掌控規則的人。多份 Profile 之間是互斥切換關係:同一時刻只有一份生效,切換即整體替換連接埠、節點、規則三塊。常見管理策略是「訂閱一份 + 本地實驗一份」:日常用訂閱,折騰規則時切到本地副本,改壞了隨時切回去。訂閱每次更新會覆蓋遠端內容,直接改訂閱 Profile 的變動會遺失——持久化客製化要用第九章的覆寫機制。Profile 結構的完整說明見部落格《Clash 設定檔是什麼》。
05代理模式與系統代理
三種執行模式
設定裡的 mode 欄位有三個值。rule(規則):每條連線依 rules 清單逐條比對,命中什麼走什麼,是日常推薦模式——中國大陸網站直連、其他地區走代理,互不干擾。global(全域):跳過規則,所有流量進同一個代理群組,僅用於暫時排查「是不是規則沒比對對」。direct(直連):全部流量不走代理,相當於保留客戶端在線但讓路。切換入口在客戶端主介面,通常是三個並排的選項。
系統代理在做什麼
開啟「系統代理」開關時,客戶端向作業系統註冊一個 HTTP/SOCKS 代理位址,預設是 127.0.0.1:7890(即上文 mixed-port 的混合連接埠)。瀏覽器和多數遵守系統代理設定的應用程式,會主動把流量投遞到這個連接埠。它的局限也在「主動」二字:命令列工具、部分遊戲與舊應用程式不讀取系統代理設定,流量不會經過核心——這類情境交給第七章的 TUN 模式。
驗證連線是否生效
連線後用兩步確認。第一步看客戶端連線面板:存取任意網站,面板出現新連線紀錄且標註了命中規則與出口,說明流量確實進來了。第二步用命令列明確指定代理測試:
# 透過本機混合連接埠發出請求,能收到回應標頭即連線可用
curl -x http://127.0.0.1:7890 -I https://www.cloudflare.com
如果直連正常、走代理逾時,依次檢查:節點是否可用(換一個節點重試)、訂閱是否過期、本地防火牆是否攔截了客戶端。
06規則分流:讓每條連線各行其道
規則如何比對
rules 清單自上而下逐條比對,命中即停。每條規則由「類型, 比對值, 目標策略」組成,目標策略可以是某個代理群組,也可以是內建的 DIRECT(直連)與 REJECT(拒絕)。清單末尾必須有一條 MATCH 兜底,接住所有前面漏掉的流量。常用規則類型如下:
| 類型 | 比對對象 | 範例 |
|---|---|---|
| DOMAIN | 網域完全相等 | DOMAIN,api.example.com,PROXY |
| DOMAIN-SUFFIX | 網域後綴 | DOMAIN-SUFFIX,youtube.com,PROXY |
| DOMAIN-KEYWORD | 網域包含關鍵字 | DOMAIN-KEYWORD,google,PROXY |
| IP-CIDR | 目標 IP 段 | IP-CIDR,192.168.0.0/16,DIRECT |
| GEOIP | IP 所屬國家 | GEOIP,CN,DIRECT |
| RULE-SET | 外部規則集檔案 | RULE-SET,streaming,PROXY |
| MATCH | 兜底,比對一切 | MATCH,PROXY |
順序敏感是新手最常踩的坑:把 GEOIP,CN,DIRECT 放在某條海外網域規則之前,而該網域恰好解析到中國大陸 CDN 時,連線會提前命中直連。原則是精確規則在前,範圍規則在後,MATCH 永遠最後。
代理群組的四種策略
規則的目標一般不是單個節點而是代理群組,群組內策略決定實際出口:select 手動選擇,介面上點誰走誰;url-test 定期向測試位址測延遲,自動選最快節點;fallback 依清單順序取第一個可用節點,前面的掛了自動順延;load-balance 把連線分散到多個節點。一段可直接套用的組合:
proxy-groups:
- name: PROXY
type: select
proxies: [AUTO, HK-01, JP-01, US-01]
- name: AUTO
type: url-test
url: https://www.gstatic.com/generate_204
interval: 300
proxies: [HK-01, JP-01, US-01]
rules:
- DOMAIN-SUFFIX,openai.com,PROXY
- RULE-SET,streaming,PROXY
- GEOIP,CN,DIRECT
- MATCH,PROXY
日常把 PROXY 群組停在 AUTO 上自動測速,需要固定地區(比如串流媒體解鎖)時手動切到對應節點。挑節點的四個維度——延遲、倍率、地區、協定——完整分析見部落格《Clash 節點怎麼選》。
規則寫多了會遇到維護成本問題:上千行網域清單塞進設定檔既難讀也難更新。這時改用 rule-providers 引用遠端規則集,設定裡只留一行 RULE-SET,規則內容由核心按 interval 定期拉取,社群維護的分類清單(廣告、串流媒體、境內網域)可以直接複用。規則集分 domain 與 ipcidr 兩種 behavior,類型寫錯會導致整個規則集比對不到任何流量,是個靜默失敗,設好後務必在日誌裡確認載入條數不為零。
另一個常見需求是「某個應用程式單獨走某地區節點」。做法不是改代理群組,而是新增一個只服務它的策略群組,再用精確規則指向這個群組:這樣後續調整只影響這一條鏈路,不會牽動全域。反之,如果發現某類流量需要一直排除在代理之外(例如企業內網網域、支付閘道),寫 DOMAIN-SUFFIX,內網網域,DIRECT 並把它放在所有代理規則之前,比事後除錯要省事得多。
DNS 與 Fake-IP
分流正確的前提是網域資訊不遺失。mihomo 的 dns 區段支援兩種模式:redir-host 真實解析後依 IP 比對,fake-ip 用保留網段虛構回應、在建立連線時還原真實網域,後者顯著降低解析延遲並避免 DNS 污染干擾分流。部分依賴真實 IP 的應用程式(區域網路發現、某些遊戲平台)需要寫進 fake-ip-filter 排除,完整機制見部落格《Fake-IP 模式運作原理詳解》。
07TUN 模式:接管系統全部流量
原理與適用情境
TUN 模式讓核心建立一塊虛擬網路卡,並把系統預設路由指向它——所有應用程式的流量在網路層被截取,不再依賴應用程式是否遵守系統代理設定。命令列工具、遊戲客戶端、UWP 應用程式這些「不認系統代理」的流量,在 TUN 下全部進入規則引擎。兩種方式的差異:
| 維度 | 系統代理 | TUN 模式 |
|---|---|---|
| 覆蓋範圍 | 遵守代理設定的應用程式 | 全部應用程式與系統行程 |
| 權限要求 | 一般使用者 | 系統管理員 / 服務模式 / root 能力 |
| UDP 支援 | 取決於應用程式 | 原生完整 |
| 實作層 | 應用層投遞 | 網路層虛擬網路卡 |
開啟步驟
- 先滿足權限前提:Windows 在客戶端設定裡安裝服務模式(或以系統管理員身分執行);macOS 同意輔助服務授權;Linux 啟用客戶端的服務模式或為核心賦予網路管理能力。
- 在客戶端設定中開啟 TUN 開關。Verge 系客戶端建議同時關閉系統代理開關,避免雙重接管。
- 確認 DNS 劫持已啟用,否則應用程式直連系統 DNS 會繞過分流。
對應的設定區段(客戶端 GUI 開關本質就是寫這些欄位):
tun:
enable: true
stack: system # system / gvisor / mixed
auto-route: true # 自動接管預設路由
auto-detect-interface: true
dns-hijack:
- any:53 # 劫持所有發往 53 連接埠的 DNS 查詢
08日常維護與故障排查
關於 stack 的三個取值:system 使用作業系統自帶的網路堆疊,效能最好、相容性取決於系統實作;gvisor 在使用者態實作一套完整 TCP/IP 堆疊,相容性最穩,代價是多一點 CPU 開銷;mixed 折衷,TCP 交給系統、UDP 走 gvisor。桌面端預設 system 即可,遇到 UDP 不通、遊戲連不上房間時改成 mixed 或 gvisor 再試。關閉 TUN 後如果出現完全斷網,通常是虛擬網路卡異常結束導致路由表殘留,重啟客戶端或手動停用再啟用一次實體網路卡即可恢復。
三樣東西要保持更新
訂閱:開自動更新,間隔 24 小時內;服務商公告更換節點後手動更新一次立即生效。客戶端與核心:維護中的客戶端會隨版本更新核心,新協定與修復都依賴它,升級前留意更新說明裡是否有設定欄位變更。GEO 資料與規則集:GeoIP / GeoSite 資料庫和 RULE-SET 引用的外部檔案都有更新機制,客戶端設定裡通常提供「更新 GEO 資料」按鈕,規則比對結果與預期不符時先更新再排查。
兩個日常觀察視窗
日誌頁:把 log-level 暫時調到 debug 可以看到每條連線的比對過程,定位「這條流量到底命中了哪條規則」最直接;定位完調回 info,避免日誌刷屏耗資源。連線面板:即時列出活躍連線的目標、命中規則、出口節點與流量,發現某應用程式走錯出口時,從這裡取得它的目標網域,再回設定裡補一條精確規則。
故障對照表
| 症狀 | 優先排查 |
|---|---|
| 所有節點全部逾時 | 訂閱過期或節點整體更換 → 更新訂閱;本機時間偏差過大也會導致交握失敗 |
| 延遲正常但網頁打不開 | DNS 問題 → 啟用 fake-ip 或更換 nameserver;檢查是否命中 REJECT 規則 |
| 部分應用程式不走代理 | 該應用程式不遵守系統代理 → 切 TUN 模式;Android 檢查分應用程式代理清單 |
| 啟動時回報連接埠被佔用 | 7890 / 9090 被其他程式佔用 → 改 mixed-port 或退出衝突程式 |
| 訂閱更新失敗 | 瀏覽器直接開啟訂閱連結驗證;客戶端內可暫時切直連模式再更新 |
| Android 背景一段時間後斷線 | 系統省電機制回收 → 加入省電白名單與自動啟動允許清單 |
09進階路線:從會用到精通
覆寫:讓客製化在訂閱更新後存活
訂閱每次更新都會整體覆蓋 Profile,直接改檔案的客製化活不過下一次更新。正確做法是覆寫(Merge / Override):在客戶端裡維護一份獨立的補丁,每次訂閱更新後自動疊加到設定上。典型用法是追加自己的規則、固定 DNS 段、強制開啟 TUN 欄位。Clash Verge Rev 還支援 JavaScript 腳本覆寫,可以按條件批量改寫節點與代理群組,適合規則量大的使用者。
外部控制 API 與 Web 面板
核心透過 external-controller 開放一套 RESTful API,客戶端介面本身就是它的使用者。你也可以直接呼叫:
# 查看目前設定
curl http://127.0.0.1:9090/configs
# 切換某個 select 群組的出口節點
curl -X PUT http://127.0.0.1:9090/proxies/PROXY \
-d '{"name": "HK-01"}'
配合 external-ui 欄位可以掛載 Web 控制面板,在瀏覽器裡管理執行中的核心——這是路由器與伺服器情境的標準操作方式。
無介面環境直接執行核心
伺服器、軟路由、NAS 上不需要 GUI,從下載中心核心區取得對應架構的 mihomo 二進位檔(AMD64 / ARM64 / ARMv7 / MIPS 等),把設定放到指定目錄後啟動:
# -d 指定設定目錄,目錄內放 config.yaml 與 GEO 資料
./mihomo -d /etc/mihomo
# 配合 systemd 常駐執行,開機自動啟動
sudo systemctl enable --now mihomo
區域網路裝置把閘道或代理指向這台機器,即可全家共享同一套分流規則。
在多台裝置上跑同一套規則時,建議把設定檔放進版本管理:每次改動提交一次,出問題可以直接比對上一版差異,比憑記憶回滾可靠。憑證類欄位(訂閱連結、節點密碼、API secret)不要一起提交到公開儲存庫,用單獨的本地檔案儲存並在覆寫階段注入。
推薦的進階閱讀順序
- Profile 結構入門與多設定管理——把第四章的設定骨架吃透。
- 節點選擇四維度——建立自己的選節點流程。
- Fake-IP 運作原理——理解 DNS 層發生了什麼。
- mihomo 與原版核心差異——知道手裡的工具邊界在哪。
- 動手實踐:用覆寫維護一份自己的規則補丁,再在一台閒置裝置上部署純核心。走完這五步,本手冊的九章內容就真正變成了你自己的知識。