mixin 要解的問題:一機多網、多帳戶

進階用戶很少永遠只連一組網路。同一臺筆電週日在家、週一進公司、週三又接到訪客 Wi-Fi,三處的約束不同:家裡可能想開強一點的 TUN 與 DNS 攔截;辦公室要關閉本機虛擬介面,讓公司 VPN 接手路由;公共熱點上又想把 bind-address 收在 127.0.0.1 以免 混合埠意外對外。與此同時,你那份訂閱仍會不斷更新 proxiesproxy-groups 與遠端規則集——你不會想在供應商每次改一個 UUID 就手抄整包。

Clash Meta 系核心(多數發行版也標成 Mihomo)裡的 mixin:,就是讓你把上游大檔當作節點與大型規則的權威來源,再用一小段可審查的本機疊層去調環境專屬的開關。可把它想成只對你看得懂的那幾行做版本管理,而底下上千行是匯入的依賴。遷移若尚未完成,請先把 Clash Meta 核心升級完整指南 讀通;遠端從沒出現過的欄位名,不是 mixin 能憑空修好的。

載入順序:遠端主檔、本機與 mixin 的關係

精確順序因圖殼而異,但「腦內圖像」是共通的:核心先讀一個基底文件(常是訂閱抓下或很大的靜態檔),再依 mixin:(有時加上圖殼提供的前綴/後綴寫法)套用補丁文件,產生執行期實際看到的有效設定。文件若寫「深併合(deep merge)」多半只指對映節點遞迴合併:基底與 mixin 都定義了 tun: 地圖時,子鍵可疊上,同層同鍵則以 mixin 為主。

這行為好懂又兇險:你可以在 mixin 只寫 tun.enable,而不必重貼遠端整段 tun:;但若基底還殘留舊的 dns-hijack 之類欄位,而你的圖殼不會在該層做「整段父節點蓋寫」,執行期就仍可能帶著你遺忘的子鍵。當 rules: 一長串時,更別用 mixin 去遮蓋規則排序本質上的錯——請同步對照 Clash 規則分流最佳實踐

rules:proxies:dns.nameserver陣列是最大驚喜:多數實作會把 mixin 內的整份清單當成覆蓋掉基底整段陣列,而不是幫你依元素串接。若你以為是「在開頭多插三行」,卻在執行中只看到那三行,那多半不是 bug,而是你剛學到你這層合併怎麼處理序列表。部分圖殼有獨立「前綴/後綴」編輯器;拿不準時,請匯出合併後的有效 YAML對讀。

用語: 社群常把各種本機小補丁都叫成「mixin」;在 YAML 裡 mixin 常是特定頂層鍵。圖殼上可能寫成合併、補丁、profile 覆寫,但落盤的拼字要符合該圖殼與你使用的核心建置。

mixin: 的寫法:地圖、清單與常見雷點

最保守起步:mixin 只改聽入埠日誌等級,表面積小、出錯一眼就看得到;熟悉後再往 tun:dns: 與有意的 rules: 置換延伸。實務上 mixin: 內的結構,應與你要影響的根層欄位同形;若圖殼是「在訂閱內外各放一塊再合併」,語意一樣,差別在檔名與 GUI 從哪裡讀寫。

mixin:僅聽入埠與日誌(示意 YAML)
mixin:
  mixed-port: 7890
  bind-address: '127.0.0.1'
  log-level: debug

若要調 dns: 又不想把供應商整段 dns 貼到筆記,請在 mixin 內明確寫出要覆寫的巢狀鍵,並搭配 Clash Meta DNS 詳細步驟 釐清 fake-ipfallback 的互動;遠端基底裡已經自我矛盾的解析策略,不是 mixin 能遮住的。

mixin:巢狀 dns(示意;清單可能整段置換)
mixin:
  dns:
    enable: true
    listen: '127.0.0.1:1053'
    enhanced-mode: fake-ip
    nameserver:
      - https://1.1.1.1/dns-query

上例在許多圖殼中會讓 dns.nameserver 變成「只剩這一筆 DoH」。若遠端本來寫了四顆可輪替解析器、本機卻在 mixin 寫一顆,等於**主動刪減冗餘**。要「加法」行為,優先採圖殼與核心設計好的機制:例如 rule-providers 配一段精簡的 rules:、或圖殼的前綴專用槽,別指望兩段陣列會自動 union

實測路線:家裡與辦公室兩套覆寫

常見實作:一組遠端主檔,兩份極短的本機片段(例如 mixin-home.yamlmixin-office.yaml)用 dotfiles 管;啟動腳本或圖殼的「設定檔切換」在同一訂閱上選用哪一塊合併。值得拆開的差異常包含 tun.enabletun.stackdns.listenallow-lanexternal-controller 綁定位址,以及公司分拆隧道時,把內部網段走 DIRECT 的幾行規則。

家裡可照 TUN 模式深度解析 開 TUN、auto-route、以及較積極的 DNS 處理;辦公室則多數要關 TUN,讓公司 VPN 裝自己的介面、不必跟 Clash 爭奪預設路由,改以保守的系統代理或單一應用層走 SOCKS。這種切換在 mixin 面向上常是一兩個欄位的事——前提是你合併後有重載核心;不少人「家裡能跑、帶進公司不對」,其實是舊行程握著前一天的「有效檔」。

每個場景的底線寫在 mixin,而不是圖殼上隨手摟一下、下個月無法還原的勾選。訂閱健康(換網址、清壞快取)請參 訂閱與節點維護指南, 避免 mixin 其實在幫一個已過期遠端揹黑鍋。

兩份訂閱不必整包複製、但要懂命名衝突

有人同時用兩家供應商:遊戲要低延遲、串流帳戶在另一邊,或分司法轄區兩包節點。仍可以不複製幾十 MB 的 YAML:若遠端產生器本來就支援多個 proxy-providers 網址,就讓兩家都在基底;若只能動本機,就在 mixin 加第二段 provider 區塊。之後兩叢集怎麼接進遠端已寫好的 proxy-groups,或在本機 mixin 用不撞名的群組去引用,都是設計重點。

最忌名稱碰撞:本機在 mixin 定義的 Auto 若與遠端同名,合併後是重複錯誤、靜默覆寫、還是兩併一,取決於圖殼與驗證。建議在確認前用獨特名稱(如 LOCAL-AUTOLAB-FALLBACK)降低歧義。出站端的 url-test、fallback 語意若本來寫歪,mixin 也救不了——請複習 策略組、url-test 與 fallback 實配步驟

圖殼「合併」面板 vs 手改 config.yaml

多數桌機圖殼把「訂閱主檔」與「本機合併/補丁」分頁顯示:前者週期更新、後者持久。UX 關鍵是搞清楚哪一窗對每個欄位擁有真相。直接手改下載的遠端檔很脆——下次訂閱一刷新就被覆寫;改合併窗較能長存,卻有時較不直觀。除錯時請**一定**從圖殼匯出有效設定來對讀。

若匯出裡看得到你的 mixin 原句,卻在 tun: 底下找不到預期子鍵,這多半指向合併沒走通或欄位不被該建置接納。挑客戶端時,是否誠實呈現合併層很重要,可參 如何選擇適合自己的 Clash 用戶端

若要用 Web UI 或 REST 驗證,請用 mixin 把 external-controllersecret 綁在安全的本機位址。硬體可搭配 external-controller 與 secret 本機綁定專文; 兩行 mixin 常就足以把面板上鎖、每機一 token。

profile.store-selected 與重載後還在的狀態

mixin 屬靜態 YAML 疊層,但實務上還有執行期狀態:各策略組最後手選的節點、規則集快照、寫在磁碟的 GEO 資料。Meta 系核心在 profile: 下宣告 store-selected 之類的持久方針;設成 true 可跨重啟記住手動選的出站,mixin 裡有再多群組也仍可以「日常只指一顆主節點」。

等於 mixin。若你改 mixin 把某個 proxy-groups 改名,而圖殼的狀態庫還指著舊名,可能出現空選或意外回退,直到清快取或圖殼寫的狀態路徑重設。大改結構後,按文件做一次「全退再啟+刪圖殼快取可接受路徑」的冷重啟,在 Windows / macOS / Linux 各包裝上位置不盡相同。

看起來沒覆寫成功:自檢清單

在回報「覆寫沒生效」前,可照這幾步把人為因素先排除,每一步對應一個常見誤解:

  1. 執行中的核心有沒有真的重載? 有圖殼能局部熱重載、有的要完整關停再啟;不確定就整個結束圖殼再開。
  2. 匯出有效 YAML,與本機 mixin 內文 diff。 匯出缺你的欄位,要嘛合併沒發生、要嘛欄位名與你這版建置不相容。
  3. 縮排與字元。 圖殼編輯器若靜默吞了 YAML 錯誤,mixin 可能從沒被解析;看圖殼的診斷/日誌主控台。
  4. 陣列是否被整段替換。 有效檔的 rules: 突然變短,常是你以為在「前綴」其實整段被蓋了;改用前綴槽或 rule-providers 分工。
  5. mixin 內有沒有重複鍵。 多份同名鍵常是「最後一個贏」;你在 UI 改 A、讀的卻是 B 時,症狀就像時靈時不靈。
  6. 跨層依賴。 只開 TUN 卻不對齊 DNS 攔截,會以為是 mixin 搞壞解析——TUN 與 DNS 文一起對讀最省時間。
合規提醒: 僅在你有權限的裝置與帳戶上使用設定疊層。公司裝置可能禁止自架隧道或分拆;即使技術上可行,仍須遵從內部資安與可接受使用政策。

可貼上再刪的範例

下段不是放諸四海皆準的最佳解;只示範「週末除錯」常見的家裡覆寫:收斂聽入、啟 TUN 並在文字上明確寫 dns-hijack 語彙、日誌先開細。實戰前請把 secret、埠、介面名稱改成你的環境,並以圖殼文件核對 tun 欄位是否仍正確拼法。

mixin — home overlay pattern (YAML)
mixin:
  mixed-port: 7890
  bind-address: '127.0.0.1'
  allow-lan: false
  log-level: debug
  external-controller: '127.0.0.1:9090'
  secret: 'rotate-me'

  profile:
    store-selected: true

  tun:
    enable: true
    stack: mixed
    auto-route: true
    auto-detect-interface: true
    dns-hijack:
      - 'any:53'

  dns:
    enable: true
    listen: '127.0.0.1:1053'
    ipv6: false
    enhanced-mode: fake-ip
    fake-ip-range: 198.18.0.1/16

  rules:
    - 'DOMAIN-SUFFIX,corp.example,DIRECT'
    - 'IP-CIDR,10.0.0.0/8,DIRECT'
    - 'MATCH,GLOBAL'

特別注意範例裡的 rules::在許多圖殼,這等於把遠端整條規則鏈換掉。實務上在搞懂前可先刪去這一段,或把要加的規則改放圖殼提供的前綴槽;故意寫一個帶 MATCH,GLOBAL 的尾行,是為了逼你自問:最後的 MATCH 到底應由遠端還是 mixin 主導。

結語

Clash Meta 的 mixin 讓你沿用一份整理過的遠端主檔,卻仍保留本機對聽入、隧道、DNS 形狀與各網路例外的小控制權。地圖當成可協商的疊層、陣列先當成會整包覆寫、拿不準就匯出有效檔、結構改完再刻意重啟。比起每週另存一份供應商上千行 YAML,一個二十行左右的 mixin 更好審、更好進 Git,也更容易在「只某一個 Wi-Fi 怪怪的」時對症下藥。

相較黑箱一鍵包,一個圖文並茂的 Meta 系客戶端加上一層小小 mixin,多花一點初次設定,換成往後在 DNS、TUN、路由交錯時更冷靜的除錯體驗。→ 立即免費下載 Clash,開啟流暢上網新體驗,先讓合併流程與你實際的「帶筆電搬家」敘事一致,而不只是學會怎麼匯入節點。