mihomo/DNS · · 約 17 分鐘閱讀

Clash Meta(mihomo)裡 DNS over HTTPS(DoH)怎麼設?與 fake-ip 對齊的 Windows/macOS 指南(2026)

你已經在設定檔裡開著 fake-ip,也理解「規則要在網域名稱這一層被看見」對分流有多重要——下一步最容易卡住的反而是把 DNS over HTTPS(DoH) 接進來之後:解析路徑上游出口fake-ip-filternameserver-policy 任一處對不齊,就會冒出「看得到節點卻上不了特定站」「同一個網域名稱忽快忽慢」「QUIC/HTTP3 怪怪的」這類碎片化症狀。本篇以 Clash Meta/mihomo 真寫得進去的 YAML 片段為骨架,並分別整理 WindowsmacOS:怎麼讓系統/瀏覽器真的把問題丟回本機監聽、而不是半途偷跑去公共 DoH。背景知識可先複習本站 Fake-IP 與 redir-host 以及 HTTPS SNI Sniffer 兩篇,再把今天的 DoH/介面對齊當「補上最後一圈扣環」來做就好。

1. fake-ip+DoH:你要對齊的是哪三段接力

在多數圖形客戶端的日常模型裡,fake-ip並不是「騙過全世界」,而是一個為了把資料連線拉回可被規則理解的主機名而存在的中繼:應用程式先拿到一個198.18.0.0/15(或你自己改寫的)虛構位址,再在本機發起資料連線;代理核心才在對應的 TLS/HTTP/QUIC/Sniffer 脈絡下去判斷要命中誰。DoH只是把「對外查紀錄」改成走 HTTPS/HTTP2/HTTP3 上的解析 API,對責任邊界而言,它比傳統 UDP/TCP53更不透明一些:許多問題會先在上游出口對端供應商路由那裡顯現,而不是一眼就看出來。

因此你要對齊的其實是三段:A. 桌面應用程式到底把問題丟到哪裡——系統resolv.conf視角、Wi‑Fi 介面順序或瀏覽器級安全 DNS;(B. 本機 Clash/mihomo 監聽與dns區塊是否真的啟動、對外是否有策略一致的出口可走 DoH);以及C. 規則與 sniffing 發生的時間點是否在過寬的MATCHGEOIP之後才把流量送走。本篇把(B)寫成可貼的 YAML 骨幹,把(A)拆成 Windows/macOS 兩條照表操課路徑,把(C)回指到你在 sniffer 與優先序上已經付出的心力。

若你公司網路強制HTTP 檢查透明代理,DoH 可能表現得與家用網路完全不同;請在資安政策允許範圍內驗證,避免把家用指南硬套在受管控網段。

2. YAML:啟用 dns、寫進 DoH upstream

以下片段示範結構常見欄位,請依你的訂閱模板、核心版本與機場慣例微調;重點是:nameserver裡出現https://tls://(DoT)時,要同時檢查該上游是否能在你當前出口下成功握手,否則 fake-ip 再漂亮也只是一層糖衣。

dns:
  enable: true
  # listen address; match your GUI / stack
  listen: '0.0.0.0:1053'
  ipv6: false
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  use-hosts: true

  # Primary resolvers (DoH examples)
  nameserver:
    - https://1.1.1.1/dns-query#🇭🇰-Group
    - https://dns.google/dns-query#🇭🇰-Group

  # Resolvers used when proxy path is required / isolated
  proxy-server-nameserver:
    - https://1.1.1.1/dns-query

  # Plain UDP/TCP as emergency fallback (optional)
  fallback:
    - tls://1.1.1.1:853
    - 8.8.8.8
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4

上面#🇭🇰-Group只是示意「把 DoH 查詢出口綁在特定策略組」這件事在社群模板裡常出現;實際命名請替換成你檔案裡真的存在的proxy-groups條目。proxy-server-nameserver則用在「需要讓解析走代理管道」或 GUI 幫你隔離的場景,兩者混用時務必以日誌確認不是重複查詢或互相打架。

若訂閱作者已提供proxy-groups與完整的rules,切勿把我們的片段整段覆蓋掉;比較穩健的做法是「只合併你要的dns:鍵值」並用本地覆寫檔維護,以免更新訂閱時被沖掉。需要重新理解策略組語意時,可回到你慣用的 GUI(例如 FlClashClash Verge RevMihomo Party)閱讀實際生效檔,而不是只看遠端下載下來的原始文字。

3. fake-ip-filter 與 nameserver-policy(避免誤分流)

fake-ip-filter處理的是「這些名稱我希望保留真實 IP」:常見包含區網主機、某些STUN/VoIP、或機場入口本身;漏列時並不一定會立即爆炸,但會在跨網段印表機區網影音裝置這類題目上以「莫名其妙的逾時」出現。nameserver-policy則是讓「這家網域的紀錄交給哪一套 upstream」可被明講——對跨國/多出口的訂閱尤其關鍵,因為EDNS Client Subnet視角會影響你拿到的CDN Anycast結果,而 CDN 結果又會回頭影響你以為「節點壞掉」的那些表面現象。

dns:
  # ...same as previous block...
  fake-ip-filter:
    - '*.lan'
    - '*.local'
    - 'time.*.com'
    - 'time.*.gov'
    - 'time.*.apple.com'
  nameserver-policy:
    'geosite:cn':
      - https://doh.pub/dns-query
      - https://dns.alidns.com/dns-query
    '+.google.com':
      - https://dns.google/dns-query#🇭🇰-Group

實務上geosite/geolocation 類資料集是否齊備,取決於你訂閱是否附上對應的RULE-SET來源路徑;若缺資料卻硬寫,核心會在日誌裡提醒你載入不到規則。遇到這種情境寧可退一步,先用字面DOMAIN-SUFFIX把真的會用到的主機名列清,再等你有餘裕整理規則集。

規則與 DNS「誰先誰後」的快速心智圖

  • 解析階段的policy決定的是「你去哪問紀錄」;命中哪個出站節點是另一個維度的決策。
  • 資料連線階段的rules決定的是「這條流要直連還是送到哪個策略組」;Sniffer 則嘗試把 IP 還原成主機名以提升命中品質。
  • 因此「DNS 看起來正確但網站打不開」時,請避免只盯著上游;同時打開連線日誌看 SNI/DOMAIN 命中。

4. Windows:介面順序/127.0.0.1 與安全 DNS

Windows 11/10,路徑用語會隨版本微調,但骨架不變:開啟設定 → 網路和網際網路,進入你正在使用的介面(Wi‑Fi 或乙太網路),展開DNS 伺服器指派為手動,優先填入Clash 核心的 DNS 監聽位址(常見寫法為127.0.0.1;埠號若由系統轉送或由客戶端另行橋接,請以 GUI 顯示為準)。若你有多張虛擬介面(公司 VPN、Hyper‑V 預設交換器、額外防火牆產品),請在「介面優先順序」層級確認目前工作階段真的會先問到本機,而不是被某張卡搶走。

接著處理瀏覽器:Microsoft EdgeGoogle Chrome的「使用安全 DNS」若指向 Cloudflare/Google/自訂供應商,會繞過你剛寫進系統的127.0.0.1,表現為「只有瀏覽器怪怪的」這種難題。對照細節可延伸閱讀本站Windows/Chrome/Edge/系統 Proxy 對照篇;在調校 DoH/fake-ip 這條鏈路的黃金實驗窗裡,我會建議先手動改成關閉供應商模式使用目前服務提供者,把變數壓到我們能解釋的集合,確認沒問題再決定是否恢復瀏覽器級強化。

PowerShell/WSL/容器工具鏈而言,請記得它不是「自動繼承你在 GUI 打勾的全部設定」:WSL有自己的resolv.conf視角與發行版預設;建置環境請交叉閱讀你正在用的開發環境部落格或直接以Resolve-DnsNamenslookup驗證該行程實際把查詢送到哪裡。這也是為何很多「規則我寫了但套件管理員仍像直連 ISP」的情境,並不是YAML沒套用,而是該工具的 DNS 視角壓根不是 Windows 桌面上你看到的那張介面。

5. macOS:服務順序、Profiles、本機監聽

macOS桌面,許多進階使用者會直接用系統設定 → 網路 → 詳細資訊 → DNS加入127.0.0.1,或在企業環境交由 MDM下發的描述檔處理。無論來源為何,重點仍是「系統對一般應用程式的預設查詢會不會先落到本機」。若你同時啟用iCloud Private Relay、第三方防火牆、或公司 VPN 自帶的 DNS 覆寫,請注意它們可能在不同服務順序下各自插入自己的解析器;症狀常常不是完全失敗,而是間歇性切換到另一個上游,讓你以為節點品質在「跳動」。

另外一個在 Mac 上很常遇到的題目是HTTP3/QUIC嗅探的互動:瀏覽器嘗試走更快的傳輸路徑時,有些規則還在舊的客戶端假設上,於是出現「看影片延遲但下載小檔案沒事」這種切片化症狀。把Sniffer規則優先序調整到合理範圍通常比全面關閉新協定更現實;細節仍建議回到Sniffer 專文對照你核心版本支援的欄位。

若你平常用Surge/Little Snitch類工具觀察連線,請把它們視為「第二個真相來源」而不是互斥:它們能幫你看出某個行程是否直接連到443上的公共 DoH,但是否要攔截涉及個人風險與公司政策範圍,請自行衡量。本文只強調:任何落在「Clash/系統對齊路徑之外」的 DoH,都可能讓 fake-ip 的診斷變得難以重現。

6. 驗證與對照:用什麼證據判斷接好了

把 DoH 與 fake-ip 當成「工程變更」而不是「改改感覺變快」會省很多時間:① 在客戶端打開DNS 日誌或 debug 級輸出,確認查詢確實命中你寫的 upstream,而不是靜默 fallback 到某個你沒察覺的備援。② 以終端機工具對同一主機名跑兩輪解析,對照是否穩定回到 fake-ip 範圍內的位址/或 filter 規則內的真實位址——兩種答案都要能解釋。③ 在連線紀錄裡找對應時間戳是否出現一致的 SNI/DOMAIN 命中,並檢查是否被過寬的GEOIP提前接管。

④ 對照訂閱更新本身:若你在拉遠端設定檔時就出現 TLS 握手卡住,問題多半不是「fake-ip 哲學有錯」,而是更新這條鏈路的出口與時間窗;可先暫換網路,或保守調整proxy-groups,避免也把訂閱更新丟進你正在實驗、命中率還不穩的策略組。⑤ 準備最小重現資料:主機名、發生時間、客戶端版本,以及對應的日誌片段——當你要在論壇或社群發問時,這會明顯降低被泛泛猜題的比例。

健康的懷疑:如果「只要把上游從 DoH A 換成 DoH B 就立刻好」這種現象只發生在跨境路由,通常表示你的瓶頸在出口與 RTT,而不是 fake-ip 本身壞掉;此時就算回到 redir-host 也不一定能神奇修復。

7. 常見問題

我需要為了 DoH 額外開 TUN 嗎?不一定。TUN處理的是「哪些行程會被整張介面級路由覆蓋」,而DoH upstream處理的是「查紀錄走哪一個 HTTPS 終端」。兩者有交集,但不必然要綁在一起:若你已能確定問題行程會對127.0.0.1上的監聽發查詢,先把上游與 filter 對齊通常就很有感;若症狀集中在「這個程式不吃系統 DNS/Proxy」,再評估TUN 或程式自建代理連接埠

fallback 為什麼會讓人覺得「外洩」或「規則亂跳」?通常來自過濾條件跟你實際網路拓樸不一致:例如誤判「污染」「假應答」而把查詢丟進另一條路徑,或上游太慢觸發連鎖 fallback。解法不是盲目刪掉 fallback,而是請日誌明確交代是哪個判定觸發了切換

我可以同時保留瀏覽器 DoH,又讓系統指向 Clash 嗎?技術上可以並存,但不利於除錯觀察窗會被切成兩套解析路徑,因而很難判讀規則命中究竟從何而來。學習與對齊階段我會建議先手動關閉瀏覽器級 DoH,把變數壓縮到你能在日誌裡解釋的範圍。

寫在最後

DNS over HTTPS並不是花俏口號——它讓你在區域網路 DNS 不可靠紀錄容易被注入的干擾環境裡,仍有一條走 TLS 的查詢路徑;但只要與fake-ip策略組分流Sniffer以及桌面的多重介面優先順序疊在一起,問題就會長得像「玄學」。把本篇三段接力在白板上畫清楚,再用日誌證據逐項劃掉可疑分支,你就能把表面的「玄學感」拉回可拆解的工程步驟。

這也是為什麼許多強調「一鍵連線就好」的品牌 VPN/簡易代理,到了開發者的桌面會顯得力不從心:不是它們沒有效率,而是它們往往掩蓋規則層級的觀察口,也缺少像 mihomo/Clash Meta 這樣能細緻對待 YAML覆寫多訂閱並存策略的空間。FlClashClash Verge RevMihomo Party 這類圖形客戶端又把「日誌、DNS、嗅探開關、TUN、系統代理」收斂到同一張面板,對需要長期對照紀錄的人來說,維護成本會顯著低於只靠系統級 VPN Profile 賭運氣。

若你希望沿用同一個安裝包完成訂閱匯入、DoH/fake-ip 對齊、以及必要時進一步開啟TUN來涵蓋不聽話的程式,請從本站下載頁取得最新用戶端與對應平台教學,先把基底跑穩再在 YAML 細修。→ 立即免費下載 Clash,開啟流暢上網新體驗

依主題相關度匹配的延伸閱讀,涵蓋同分類下的實戰配置文章。