為什麼雙棧下會「以為仍走代理/仍洩漏」
雙棧網路同時提供 IPv4 與 IPv6。許多應用程式在Happy Eyeballs 類策略下會同時嘗試兩種位址,並更快採用其中一條成功路徑。若你只調整了「IPv4 世界裡的 Clash 規則」,但系統或應用仍優先建立 IPv6 連線,體感就會是「明明開了代理,測速或網站仍顯示電信商 IPv6」或「只有部分服務怪」。
另一個常見混淆點是DNS 洩露與出口 IP 顯示:測試站顯示的是「查詢從哪裡出發」還是「TCP/UDP 連線從哪裡出去」,敘事不同。雙棧下若 AAAA 被解析到可直連的 IPv6,而應用又選了 IPv6,那麼即使 IPv4 路徑已被 TUN 納管,你仍可能看到「像沒走代理」的結果。接下來我們用可重現的順序:先定義你希望「哪一層 IP 被使用」,再對齊 DNS 與規則,最後用洩露測試驗證。
先釐清:IPv4 與 IPv6 誰先被選中
在改 YAML 之前,先回答三個問題:(1)系統目前是否偏好 IPv6?(2)目標站是否有 AAAA?(3)Clash 的 TUN 是否同時處理 IPv6 流量?。若你在日誌裡看到連線以 :: 開頭的位址,或客戶端顯示 IPv6 相關路由,就要把「IPv6 路徑」納入同一張除錯圖,而不是只盯 198.18.0.0/15 這類 Fake-IP 區段。
與 TUN 模式深度解析 一文對照:TUN 會改寫路由表與 DNS,但作業系統層仍可能保留 IPv6 全域位址;路由器若開啟 DHCPv6 或 SLAAC,終端也會拿到電信商 IPv6。Clash 無法「魔法式」消除物理上存在的 IPv6,只能透過關閉/停用或把流量納入同一套路由決策來達成一致體感。
作業系統或路由器:關閉或偏好 IPv4(實測步驟)
若你的目標是強制 IPv4 優先或暫時關閉 IPv6以便驗證,請在同一台機器上依序操作並記錄前後差異(以下為常見路徑,實際選單名稱依版本而異):
- Windows:在網路介面內容中取消勾選「Internet Protocol Version 6 (TCP/IPv6)」,或於登錄檔設定 DisabledComponents(進階使用者);變更後重啟網路服務或整機重開,再測一次。
- macOS:系統設定 → 網路 → 選介面 → 詳細資訊 → 關閉 IPv6 或「僅連結本機」;或暫時於
networksetup調整(需管理員權限)。 - Linux(桌面):NetworkManager 中將 IPv6 設為「忽略」或停用;伺服器則可透過 sysctl/介面設定關閉。
- 路由器:若家裝閘道發放 IPv6,終端會一直拿到電信商 IPv6;可在閘道關閉 IPv6 或改為單一棧,與 區網分享與閘道 專文情境可一併思考。
Clash:TUN、堆疊與 IPv6 相關設定思路
不同核心與 GUI 對 TUN、stack、網路堆疊與是否處理 IPv6的命名不同,但使用者目標一致:讓應用程式送出的連線,無論 IPv4 或 IPv6,都走同一套規則引擎。若你發現只有 IPv4 進入隧道,請檢查客戶端是否提供「啟用 IPv6」「TUN 處理 IPv6」或等價選項;若未啟用,系統會繞過隧道直接走系統 IPv6 路由。
設定檔層級上,常見會見到 tun 區塊與 inet4_addr/inet6_addr、或路由相關欄位;請務必對照你所用的核心版本文件,因為欄位名稱會隨版本演進。若調整後出現「無網路」或路由衝突,可與 關閉代理後無網路與 TUN 清理 一文交叉排查,避免殘留舊路由。
tun:
enable: true
# stack: system | gvisor | mixed
# inet6_addr: fdfe:dcba:9876::1/64
# Some builds expose separate IPv6 toggles in the GUI.
DNS:AAAA、雙棧與 dns: 區塊對齊
當上游解析回傳 AAAA,應用可能選 IPv6 出站;若你希望「在特定威脅模型下」出口一致,就要讓解析結果與路由決策說同一個故事。Clash Meta/Mihomo 的 dns: 區塊(nameserver、fallback、fake-ip-filter)細節見 Clash Meta DNS 設定;在雙棧情境下,請額外注意:部分國內直連域名若解析出境外 IPv6,可能與預期不符。
實務上可採用分段驗證:先用 dig/nslookup 分別查 A 與 AAAA,再對照 Clash 日誌中實際選用的位址;若發現 Fake-IP 與區網/路由器情境衝突,可延伸閱讀 Fake-IP 與區網/路由器。瀏覽器 DoH 若仍指向公共解析器,也會繞過你為 Clash 設計的鏈;測試DNS 洩露時請暫時關閉瀏覽器 DoH 做對照。
直連規則:GEOIP、MATCH 與國內流量
許多範本使用 GEOIP,CN 或規則集標記「國內站直連」。在雙棧下,若規則只覆蓋 IPv4 而 IPv6 走另一條預設策略,仍會出現「部分流量像繞過直連意圖」的體感。請檢查 rules: 順序是否過寬;寬規則若放在細粒度規則之前,會長期遮擋預期命中。撰寫與排序邏輯可對照 規則分流最佳實踐。
MATCH 或最終策略決定「其餘流量」的預設出口;若你希望僅在 IPv4 世界使用代理,而 IPv6 關閉或另行處理,請在變更 MATCH 前先完成上一節的系統/路由器 IPv6對照實驗,否則容易陷入「改規則無感、其實根本沒走到那條規則」。
rules:
- DOMAIN-SUFFIX,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
# Order matters: put specific rules before broad ones.
洩露測試與對照實驗
洩露測試建議用固定流程:同一瀏覽器、同一組 Clash 開關、同一時間只改一個變因。常見步驟包括:(1)開啟/關閉 TUN;(2)開啟/關閉系統 IPv6;(3)開啟/關閉瀏覽器 DoH;(4)在 Clash 日誌觀察連線是 IPv4 還是 IPv6。若測試站顯示的 DNS 伺服器與預期不符,請回到 dns: 與系統 DNS 是否一致;若顯示的出口 IP 不符,請先確認連線實際使用的位址族,再調整規則或停用 IPv6。
命令列使用者可用 curl -4 與 curl -6 分別強制走 IPv4/IPv6 對照(實際參數依平台與 curl 版本為準)。這能快速驗證「問題是否只發生在某一棧」。
常見誤判與除錯順序
- 把電信商 IPv6 當成「代理失敗」:實際是應用走了未納管隧道的 IPv6 直連。
- 把 Fake-IP 當 DNS 洩漏:應先確認查詢是否仍由本機核心處理,見 Fake-IP 與 Meta DNS 說明。
- 規則改很多卻無感:可能是客戶端未用 TUN、或 IPv6 未進同一決策;可對照 如何選擇 Clash 客戶端 與各平台權限。
- 與 VPN/公司網路疊加:多層虛擬介面並存時,路由優先級難以直覺預測,建議暫時只保留 Clash 做對照。
自檢清單
- 系統與路由器是否仍發放 IPv6?是否需要暫時關閉做對照?
- TUN 是否設定為同時處理 IPv4/IPv6(依客戶端與核心能力)?
dns:是否與系統 DNS、瀏覽器 DoH 收斂?AAAA 結果是否符合預期?rules:順序是否過寬?GEOIP/直連規則是否涵蓋你關心的位址族?- 洩露測試是否在「單一變因」下重複驗證?
- 變更後若異常斷網,是否已檢查路由殘留與 TUN 清理流程?
結語
Clash IPv6 與雙棧議題的本質,是把「解析、位址族選擇、路由規則」放在同一條敘事裡:只改其中一層,往往得到「看似隨機」的體感。透過關閉或約束 IPv6、對齊 DNS 與直連規則,再用洩露測試固定方法驗證,你能把問題從「感覺還在洩」收斂成「哪一層沒對齊」。
相較於依賴模糊的一鍵描述,願意為自己的網路環境畫一張 IPv4/IPv6 路徑圖,長期回報是:當電信商或路由器調整雙棧策略時,你能用同一套檢查順序快速定位,而不是重裝客戶端碰運氣。
→ 立即免費下載 Clash,開啟流暢上網新體驗,用可維護的 DNS 與規則設定,搭配清楚的雙棧對照實驗,把出口與解析敘事握在可核對的步驟裡。