DNS over HTTPS 配置指南:瀏覽器、Windows 與 macOS 的 DoH 設定
DNS over HTTPS(DoH)把域名查詢裝進 HTTPS 請求裡發給解析伺服器,路上的裝置看不到、也改不了你查了哪個域名。瀏覽器裡開啟一個開關就能用;想讓整臺電腦都走 DoH,Windows 11 有系統設定,macOS 要裝一個描述檔案。配完以後,到 cdnping 的 IP 與環境檢測 看一下 DNS 洩漏結果,就能確認它是否真的生效。
DoH 能防什麼,防不了什麼
傳統 DNS 走 UDP 53 埠,明文傳輸。同一個網路裡的路由器、運營商裝置都能看到查詢內容,也能偽造應答,也就是常說的 DNS 劫持和汙染。DoH 把查詢放進 443 埠的 HTTPS 連線,帶來三點變化:
- 查詢內容加密,中間裝置看不到你查的域名;
- 應答受 TLS 保護,中途無法篡改;
- 解析伺服器由你指定,不再預設使用 DHCP 下發的那一個。
下面幾種常見誤解,容易讓人高估 DoH 的效果:
| 誤解 | 實際情況 |
|---|---|
| 開了 DoH 就匿名了 | 目標網站依然看得到你的出口 IP,DoH 只管解析這一步 |
| 別人看不到我訪問了哪個網站 | TLS 握手裡的 SNI 通常仍是明文,連線的目標 IP 也是可見的 |
| 解析伺服器不知道我查了什麼 | 它全都知道。DoH 只是把信任從運營商轉給了你選的 DoH 服務商 |
| 瀏覽器開了,整臺電腦都安全 | 瀏覽器的 DoH 只管瀏覽器,終端、IDE、命令列工具仍走系統 DNS |
| 越遠的公共 DNS 越好 | 國內站點的 CDN 按解析器位置排程,海外解析器可能把你分到較遠的節點 |
最後一條對國內開發者影響最直接。Cloudflare 公開說明 1.1.1.1 不向權威伺服器傳送 EDNS Client Subnet(ECS),國內 CDN 只能按解析器出口的位置來判斷你在哪,結果可能是訪問國內站點反而變慢。所以選 DoH 服務商時,要先想清楚自己主要訪問哪些站點。
常用的公共 DoH 地址有哪些
| 服務商 | DoH 模板地址 | 對應 IP(系統級配置時需要) |
|---|---|---|
| 阿里公共 DNS | https://dns.alidns.com/dns-query | 223.5.5.5、223.6.6.6 |
| 騰訊 DNSPod | https://doh.pub/dns-query | 1.12.12.12、120.53.53.53 |
| Cloudflare | https://cloudflare-dns.com/dns-query | 1.1.1.1、1.0.0.1 |
https://dns.google/dns-query | 8.8.8.8、8.8.4.4 |
阿里也接受 https://223.5.5.5/dns-query 這種直接寫 IP 的形式。用 IP 形式的好處是,連線 DoH 伺服器本身不需要先做一次明文解析。
配置之前,可以先用 curl 確認本機能連通這些 DoH 服務(curl 7.62 及以上支援 --doh-url):
# 用指定的 DoH 服務解析域名,再發起請求;成功會返回 HTTP 狀態行
curl --doh-url https://dns.alidns.com/dns-query -sI https://cdnping.org | head -1
curl --doh-url https://cloudflare-dns.com/dns-query -sI https://cdnping.org | head -1
# 檢視 Cloudflare 的 JSON 格式應答,便於對比解析結果
curl -s -H 'accept: application/dns-json' \
'https://cloudflare-dns.com/dns-query?name=cdnping.org&type=A'
某個地址超時或失敗,就說明你當前的網路到它不通,換一個再試,不要硬配。
Chrome、Edge、Firefox 怎麼開啟 DoH
瀏覽器級 DoH 改起來最快,也最容易撤銷,適合先試一試。
Chrome
- 位址列開啟
chrome://settings/security。 - 在“高階”裡找到“使用安全 DNS”,開啟開關。
- 選擇“自定義”,填入模板地址,例如
https://dns.alidns.com/dns-query。
如果開關是灰色、提示“由組織管理”,說明裝置裝了企業策略,或者 Chrome 檢測到了家長控制等環境。這種情況應當聯絡管理員,不要自己去繞。
Edge
- 開啟
edge://settings/privacy,在“安全性”部分找到“使用安全的 DNS 指定如何查詢網站的網路地址”。 - 開啟開關,選擇“選擇服務提供商”。
- 從下拉選單裡選,或者直接輸入模板地址。
不同版本的 Edge 選單名稱略有差別,在設定頁頂部搜尋“DNS”最快。
Firefox
- 開啟
about:preferences#privacy,滾動到“DNS over HTTPS”。 - 有三檔:預設保護、增強保護、最大保護。
- 增強保護:DoH 失敗時回退到系統 DNS;
- 最大保護:只走 DoH,失敗就報錯,不回退。
- 在“選擇提供商”裡選“自定義”,填入模板地址。
想要排查得乾淨,可以選“最大保護”,這樣任何一次查詢都不會悄悄回退到明文。日常使用選“增強保護”就夠了,公司內網域名也還能正常解析。
Windows 11 怎麼配置系統級 DoH
Windows 11 的 DoH 是繫結在 DNS 伺服器 IP 上的:先填 IP,再為這個 IP 指定 DoH 模板。
圖形介面
- 設定 → 網路和 Internet → WLAN(或乙太網)→ 點進當前連線 → 硬體屬性。
- 找到“DNS 伺服器分配”,點“編輯”,改成“手動”,開啟 IPv4。
- 首選 DNS 填
223.5.5.5,“DNS over HTTPS”選擇“開啟(手動模板)”,模板填https://dns.alidns.com/dns-query。 - 備用 DNS 用同樣方法填
223.6.6.6。用 IPv6 的話,IPv6 部分也要一併配置,否則 IPv6 查詢仍然是明文。 - 儲存後,連線詳情裡的 DNS 伺服器旁會顯示“(加密)”。
1.1.1.1、8.8.8.8 這類地址在 Windows 內建的已知列表裡,可以選“開啟(自動模板)”。阿里和騰訊的地址一般需要手動填模板,或者先用下面的命令登記。
命令列(管理員 PowerShell)
# 登記阿里 DoH,並禁止回退到明文 UDP
Add-DnsClientDohServerAddress -ServerAddress 223.5.5.5 `
-DohTemplate https://dns.alidns.com/dns-query `
-AllowFallbackToUdp $False -AutoUpgrade $True
Add-DnsClientDohServerAddress -ServerAddress 223.6.6.6 `
-DohTemplate https://dns.alidns.com/dns-query `
-AllowFallbackToUdp $False -AutoUpgrade $True
# 檢視已登記的 DoH 伺服器
Get-DnsClientDohServerAddress
# 把當前網絡卡的 DNS 設為這兩個地址("WLAN" 換成你的網絡卡名,可用 Get-NetAdapter 檢視)
Set-DnsClientServerAddress -InterfaceAlias "WLAN" -ServerAddresses 223.5.5.5,223.6.6.6
# 清快取,讓新配置立刻生效
Clear-DnsClientCache
-AutoUpgrade $True 的作用是:只要系統 DNS 是這個 IP,就自動改走 DoH。也可以用 netsh dns show encryption 檢視同樣的資訊。
macOS 怎麼用描述檔案開啟 DoH
macOS 11 起系統支援加密 DNS,但設定裡沒有開關,需要安裝一個 .mobileconfig 描述檔案。下面的模板可以直接用,儲存為 alidns-doh.mobileconfig:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>DNSSettings</key>
<dict>
<key>DNSProtocol</key>
<string>HTTPS</string>
<key>ServerURL</key>
<string>https://dns.alidns.com/dns-query</string>
<key>ServerAddresses</key>
<array>
<string>223.5.5.5</string>
<string>223.6.6.6</string>
</array>
</dict>
<key>PayloadDisplayName</key>
<string>AliDNS DoH</string>
<key>PayloadIdentifier</key>
<string>local.doh.alidns.dns</string>
<key>PayloadType</key>
<string>com.apple.dnsSettings.managed</string>
<key>PayloadUUID</key>
<string>8C1A6C55-3B7E-4F4B-9E0A-2D6B1F0C7A11</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</array>
<key>PayloadDisplayName</key>
<string>AliDNS DoH</string>
<key>PayloadIdentifier</key>
<string>local.doh.alidns</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>4E2D9B70-6A1F-4C83-B5D2-91F0E3A7C428</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>
安裝步驟:
- 終端執行
plutil -lint alidns-doh.mobileconfig,輸出OK表示格式沒問題。兩個PayloadUUID可以用uuidgen換成你自己的。 - 雙擊檔案,系統會提示“已下載描述檔案”。
- 開啟“系統設定 → 隱私與安全性 → 描述檔案”(部分版本在“通用 → 裝置管理”),點選安裝。
- 到“系統設定 → 網路 → 過濾條件”或“VPN 與過濾條件”裡,確認 DNS 項已啟用。
想換成 Cloudflare 或 Google,只需改 ServerURL 和 ServerAddresses。刪除描述檔案就能還原。來路不明的描述檔案不要裝,它能改的遠不止 DNS。
怎麼確認 DoH 生效:用 /ip 檢查 DNS 洩漏
設定頁顯示已開啟不代表所有查詢都走了 DoH,要看實際有哪些解析器在替你查詢。按下面的順序檢查:
- 開啟 cdnping IP 與環境檢測,等檢測跑完,看 DNS 洩漏一項。
- 看列出的解析器歸屬:配的是阿里,就應該看到阿里的節點;配的是 Cloudflare,就應該是 Cloudflare。如果出現本地運營商的解析器,說明還有查詢繞過了 DoH。
- 對照 WebRTC 洩漏和多出口檢測:開著代理的話,DNS、WebRTC、各站點看到的出口應當互相一致。原理可以看 DNS 洩漏與 WebRTC 洩漏。
- 只在瀏覽器裡開了 DoH 時,換另一個沒開 DoH 的瀏覽器再測一次,就能看出瀏覽器級和系統級的差別。
- 需要發給同事或貼到 issue 裡時,用 /ip 的“生成結果圖”匯出一張帶水印的圖片,匯出前開啟“隱藏 IP”,出口地址就不會出現在圖裡。/ip 的指紋在本地計算,不會上傳。
常見的不一致和原因:
| 現象 | 可能原因 | 處理 |
|---|---|---|
| 仍出現運營商解析器 | 瀏覽器 DoH 回退到了系統 DNS,或只配了 IPv4 | Firefox 改成最大保護;Windows 補上 IPv6 配置 |
| 出現代理服務商的解析器 | 代理客戶端接管了 DNS | 這是代理的設定決定的,到客戶端裡調整 |
| 國內站點明顯變慢 | 海外 DoH 導致 CDN 排程到較遠節點 | 換成阿里或騰訊的 DoH,或按域名分流(見 分流的原理) |
| 公司內網域名解析失敗 | 內網域名只在公司 DNS 上有記錄 | 內網環境關閉 DoH,或按管理員要求配置 |
換了 DoH 以後,訪問速度變了嗎
換 DoH 服務商會影響 CDN 排程,最終連到哪個節點、快不快,需要實測。cdnping 首頁測速 會在瀏覽器裡測 15 個 AI 模型 API 和 9 個公共前端 CDN 的“首次連線”(含 DNS 與 TLS 握手)和“往返”,測試物件裡也有 AGI Plan(AGI Plan 是 cdnping 的商業合作方)。DoH 換前、換後各測一次,主要看“首次連線”的變化。前端 CDN 怎麼選,可以參考 CDN 速度榜 和 國內如何選擇公共 CDN。
建議的上手順序:先在一個瀏覽器裡開 DoH,用 /ip 確認沒有洩漏;再決定要不要配系統級;最後用首頁測速對比國內和海外 DoH 對常用站點的影響。