文章目錄

手機開網頁時,要先透過 DNS 把網址轉換成 IP 位址,而 Android 手機預設使用 Wi-Fi 路由器或電信業者提供的 DNS。Android 9 起內建的「私人 DNS」可以讓手機改用 Google、Cloudflare 這類公共 DNS,只要填入提供者的主機名稱,Wi-Fi 與行動網路就會一起改用這台 DNS,查詢也一律經過 DNS over TLS 加密。和 Windows 修改 DNS 要在每個網路連線分別填 IP 位址不同,私人 DNS 整支手機只要設定一次。
測試環境是 Samsung Galaxy S8(Android 9、One UI 1.0),瀏覽器是 Chrome。
設定私人 DNS
在 Samsung 手機上,依序開啟「設定」、「連接」、「更多連線設定」,就會在 VPN 下方看到「私人 DNS」,下方的小字是目前的設定:

點開私人 DNS 會看到三個選項,要改用公共 DNS 時選第三個。三個選項的差別在於手機用哪一台 DNS,以及查詢有沒有加密:
| 選項 | 使用的 DNS | 查詢加密 |
|---|---|---|
| 關 | 路由器或電信業者提供的 DNS | 不加密 |
| 自動 | 路由器或電信業者提供的 DNS | 那台 DNS 支援時才加密 |
| 私人 DNS 提供者主機名稱 | 填入的 DNS 提供者 | 一律加密,連不上時不會改用原本的 DNS |
依 Android 官方的說明,Android 9 預設是「自動」,我這支 S8 原本則是「關」。選擇「私人 DNS 提供者主機名稱」後,在輸入框填入主機名稱,再按「儲存」。主機名稱要照提供者公布的寫法完整輸入,不能填 8.8.8.8 這類 IP 位址:

Google 與 Cloudflare 公布給 Android 使用的主機名稱如下,兩個我都設定過:
| 提供者 | 主機名稱 | 官方說明 |
|---|---|---|
| Google Public DNS | dns.google |
Android 9 以上的設定方式 |
| Cloudflare | one.one.one.one |
Android 的設定方式 |
儲存後回到「更多連線設定」,私人 DNS 下方會從「關」變成剛才填的主機名稱,就像第一張圖的 dns.google。
確認已經生效
填入 Cloudflare 的 one.one.one.one 時,可以用手機的瀏覽器打開 one.one.one.one/help,「Connected to 1.1.1.1」與「Using DNS over TLS (DoT)」都顯示 Yes,就代表手機已經透過加密連線使用 Cloudflare 的 DNS:

我也關掉 Wi-Fi 改用行動數據再開一次這一頁,DoT 同樣顯示 Yes。Google 沒有提供類似的檢查頁,填 dns.google 時只能確認私人 DNS 下方顯示 dns.google,而且網頁都能正常開啟。
設定後無法上網
主機名稱打錯或那台 DNS 連不上時,手機不會改用原本的 DNS,網路會整個無法使用。我把 dns.google 故意打成 dns.gogle,狀態列的 Wi-Fi 圖示就出現警告,Wi-Fi 頁面目前連線的網路下方也顯示「網際網路可能無法使用」:

這時回到私人 DNS 修正主機名稱的拼字,或改回「關」並儲存,網路就會恢復。
總結
Android 改用公共 DNS 時,在私人 DNS 選擇「私人 DNS 提供者主機名稱」並填入提供者公布的主機名稱,就能讓 Wi-Fi 與行動網路一起改用加密的 DNS。實測在 Galaxy S8 填入 Cloudflare 的主機名稱後,檢查頁在 Wi-Fi 與行動數據下都顯示 DoT 為 Yes。
