Android 私人 DNS vs DoH App
Android 的私人 DNS 以 DNS over TLS 加密查詢,不需要 App。什麼時候 DoH App 比較好用、兩者如何衝突,以及兩者都解決不了的問題。
如果你搜尋過「Android 加密 DNS」,大概看過兩種答案。一種說:不需要 App,開啟私人 DNS 就好。另一種說:安裝一個做 DNS over HTTPS 的 App。兩種都合理。它們用不同的方式解決同一個問題,也在不同的地方失靈。這份指南說明兩者各自的原理、各自的弱點,以及怎麼選。GreenTunnel 是我們做的,內建 DoH 用戶端,閱讀時請記得這點。
私人 DNS 到底是什麼
Google 在 Android 9 加入了私人 DNS。它通常位於設定 → 網路和網際網路 → 私人 DNS,不過確切路徑依手機品牌而不同。它有三個選項:
- 關閉:查詢以明文送到目前網路指派的 DNS 伺服器。
- 自動:預設值。Android 會試著和網路本身的 DNS 伺服器使用 DNS over TLS,如果那台伺服器支援就用它。如果不支援,查詢仍是明文。這通常稱為伺機模式,在大多數家用和行動網路上,這代表完全沒有加密。
- 私人 DNS 供應商主機名稱:你輸入某個供應商的主機名稱,例如 Google Public DNS 的
dns.google。之後 Android 就會堅持使用那台伺服器。如果連不到,它不會悄悄退回一般 DNS。Google 的公告說,Android 會把網路標示為無法連上網際網路。
DNS over TLS 在 RFC 7858 中標準化,使用專屬的 853 連接埠。這個專用連接埠既是它的優點也是弱點:乾淨精簡,但也很容易被網路辨識並封鎖。
那 Android 裡的 DNS over HTTPS 呢?
這裡有個很多指南都漏掉的細節。2022 年 7 月,Google 宣布透過 Google Play 系統更新,Android 11 以上的裝置在連到支援的知名 DNS 伺服器時,會改用 DNS over HTTP/3 取代 DNS over TLS。首批涵蓋的供應商是 Google 和 Cloudflare。Google 的文章強調,你使用的 DNS 服務不會改變,改變的只有傳輸方式。你還是在同一個私人 DNS 欄位輸入主機名稱。沒有地方可以填任意的 DoH 位址,對其他供應商來說,私人 DNS 仍然是 DNS over TLS。
DoH App 有什麼不同
DoH App,或內建 DoH 用戶端的 VPN App,會透過 Android 的 VPN 介面接管整台裝置的 DNS。每次查詢都包在 HTTPS 裡送到 DoH 伺服器,例如 https://cloudflare-dns.com/dns-query,這種方式定義在 RFC 8484。
- 它使用 443 連接埠。在網路看來,它和其他 HTTPS 連線差不多。為了擋 DNS over TLS 而封鎖 853 連接埠的網路,通常不會動它。
- 伺服器和通訊協定由你選。App 可以同時提供 DoH 和 DoT 供應商,並在之間切換。
- 它可以完全避開網路的解析器。好的用戶端會連到 DoH 伺服器固定的引導 IP 位址,所以就連找到 DNS 伺服器這一步,也不依賴網路的 DNS。
- 它會佔用 VPN 介面。Android 同一時間只允許一個 VPN。DoH App 不能和另一個 VPN App 同時執行。
並排比較
| 私人 DNS(主機名稱) | DoH App | |
|---|---|---|
| 需要另外安裝 App | 否 | 是 |
| 通訊協定 | DNS over TLS,在 Android 11+ 上對部分知名供應商使用 DNS over HTTP/3 | DNS over HTTPS(部分 App 也提供 DoT) |
| 連接埠 | DoT 為 853 | 443 |
| 伺服器被封鎖時 | 在你變更設定前,網路會顯示無法連上網際網路 | 依 App 而定。有些會切換到另一個供應商 |
| 佔用 VPN 介面 | 否 | 是 |
| 可和其他 VPN App 一起用 | 可以,但有下方所述的衝突 | 不行,同一時間只能有一個 VPN |
| 協助應對 HTTPS 中的名稱過濾 | 否 | 只有 App 也具備這項功能時 |
私人 DNS 的弱點
- 封鎖 853 連接埠的網路。有些公司、學校和公共 Wi-Fi 會封鎖它。在主機名稱模式下,網路看起來就像壞了。實際會怎麼呈現,請看網站用行動數據打得開,Wi-Fi 卻不行?
- 依網路而異的怪問題。這個設定是全域的,但網路各不相同。在行動數據上可用的主機名稱,可能在某個特定 Wi-Fi 上失敗。
- 公共 Wi-Fi 的登入頁面。有登入頁面的飯店和咖啡店網路,在你完成登入之前,可能和固定主機名稱處不來。暫時切換成「自動」通常就能解決。
- 「自動」常常沒有加密。大多數 ISP 自己的 DNS 伺服器不提供 DNS over TLS,所以「自動」會悄悄停留在一般 DNS。
DoH App 的弱點
- 它必須一直執行。如果 Android 為了省電把 App 停掉,DNS 保護也會跟著停止。請看讓 VPN 在 Android 上持續執行。
- 它會擋掉其他 VPN。你無法在同一支手機上把它和公司的 VPN 一起使用。
- 它的伺服器可能被依 IP 位址封鎖。如果網路封鎖了 DoH 伺服器的位址,443 連接埠也幫不上忙。能改用其他供應商的用戶端處理得比較好。
衝突:私人 DNS 加上 VPN App
從 Android 10 開始,VPN App 執行時,私人 DNS 主機名稱同樣有效。Google 自己的 Public DNS 說明指出,在 Android 9 上 VPN 會覆蓋私人 DNS,這在 Android 10 已經修正。實際上,這代表如果你設定了主機名稱,再開啟一個有自己 DNS 的 VPN App,Android 會把查詢送到你的私人 DNS 供應商。VPN 的加密 DNS 和它的封鎖清單完全看不到這些名稱。如果那個供應商在目前的網路上被封鎖,所有網站都會打不開。
使用 GreenTunnel 時,請把私人 DNS 設為關閉或自動。這是網站還是被封鎖?中最先要檢查的項目之一。
GreenTunnel 如何處理 DNS
GreenTunnel 是內建加密 DNS 用戶端的本機 VPN。在設定 → DNS 中,你可以從三個供應商中選一個,或選自動:
- Cloudflare,DoH,
https://cloudflare-dns.com/dns-query - Google,DoH,
https://dns.google/dns-query - Quad9,DoT,
dns.quad9.net:853
「自動」會依序嘗試 Cloudflare、Google、Quad9,並持續使用最先回應的那一個。每個供應商都透過內建的引導 IP 連線,所以從不會詢問你 ISP 的 DNS。不支援 DoQ。完整說明請看 DoH 和 DoT 說明。
和只做 DNS 的 App 的差別,在於查詢之後發生的事。GreenTunnel 還會改造 HTTPS 連線的第一個封包,以繞過簡單的名稱過濾,在 Requester 中顯示依 App 的連線,也能用檢測網址測試網站。我們從不收集你查詢的網域。
坦白說明加密 DNS 的限制
加密 DNS,不論透過哪種方式取得,都只能解決一種封鎖:網路偽造或丟棄 DNS 回應。它無法阻止網路讀取 HTTPS 交握中的網站名稱,那需要封包改造或 ECH。它無法突破 IP 封鎖。它不會隱藏你的 IP 位址,你的 ISP 仍然看得到你連到哪些位址。你選擇的 DNS 供應商會取代 ISP 看到你的查詢,所以請選一個你信任其政策的供應商。GreenTunnel 也不是匿名工具。
該用哪一個?
- 只想在正常的網路上加密查詢?使用搭配供應商主機名稱的私人 DNS,簡單又不需要 App。
- 你的網路封鎖 853 連接埠、偽造 DNS 或過濾網站名稱?DoH App 比較適合,最好是也能處理名稱過濾的 App。把私人 DNS 設為「關閉」或「自動」。
- 你已經在用公司的 VPN?繼續用私人 DNS,因為只能執行一個 VPN App。
GreenTunnel 在 Android 和 iPhone 上免費使用,可選購 Premium。在首頁看看它如何運作。
常見問題與解答
Android 私人 DNS 用的是 DoH 還是 DoT?
是 853 連接埠上的 DNS over TLS。自 2022 年的一次 Google Play 系統更新起,Android 11 以上版本對部分有支援的知名供應商改用 DNS over HTTP/3,首批是 Google 和 Cloudflare。你無法輸入自訂的 DoH 位址。
使用 GreenTunnel 時,私人 DNS 要保持開啟嗎?
請設為「關閉」或「自動」。供應商主機名稱會讓 Android 直接把查詢送到該供應商,於是 GreenTunnel 的加密 DNS 和你的封鎖清單都會被略過。
DoH 比 DoT 更有隱私嗎?
兩者對查詢的加密效果一樣好。差別在於多容易被認出和封鎖。DoT 使用專用連接埠,而 DoH 混在 443 連接埠的 HTTPS 流量中。
加密 DNS 能解除所有網站的封鎖嗎?
不能。它只能解決依 DNS 的封鎖。被名稱過濾封鎖的網站需要更多手段,被依 IP 位址封鎖的網站則需要完全不同的路由。
資料來源
- Android Developers Blog,DNS over TLS support in Android P Developer Preview(2018 年 4 月)。
- Google Security Blog,DNS-over-HTTP/3 in Android(2022 年 7 月)。
- Google Public DNS,開始使用(Android 私人 DNS 設定及 Android 9 VPN 說明),2026 年 11 月查閱。
- IETF,RFC 7858: DNS over TLS。
- IETF,RFC 8484: DNS Queries over HTTPS。