安卓私人 DNS 与 DoH 应用对比
Android 的私人 DNS 用 DNS over TLS 加密查询,无需安装应用。什么时候 DoH 应用更好用,两者如何冲突,以及两者都解决不了的问题。
如果你搜索过“安卓加密 DNS”,你大概见过两种答案。一种说:不需要应用,打开私人 DNS 就行。另一种说:装一个做 DNS over HTTPS 的应用。两种都有道理。它们用不同的方式解决同一个问题,也在不同的地方失灵。本指南解释两者各自的原理、各自的短板,以及如何选择。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 应用有什么不同
DoH 应用,或者带 DoH 客户端的 VPN 应用,会通过 Android 的 VPN 接口接管整台设备的 DNS。每次查询都在 HTTPS 中传输到 DoH 服务器,例如 https://cloudflare-dns.com/dns-query,这一方式由 RFC 8484 定义。
- 它使用 443 端口。在网络看来,它和其他 HTTPS 连接差不多。为阻止 DNS over TLS 而封锁 853 端口的网络,通常不会管它。
- 你可以选择服务器和协议。应用可以同时提供 DoH 和 DoT 服务商,并在它们之间切换。
- 它可以完全避开网络的解析器。好的客户端会连接 DoH 服务器的固定引导 IP 地址,所以就连找到 DNS 服务器这一步也不依赖网络的 DNS。
- 它要占用 VPN 接口。Android 同一时间只允许一个 VPN。DoH 应用不能和另一个 VPN 应用同时运行。
并列对比
| 私人 DNS(主机名) | DoH 应用 | |
|---|---|---|
| 需要额外应用 | 否 | 是 |
| 协议 | DNS over TLS,在 Android 11+ 上对部分知名服务商使用 DNS over HTTP/3 | DNS over HTTPS(部分应用也提供 DoT) |
| 端口 | DoT 为 853 | 443 |
| 服务器被封锁时 | 在你更改设置之前,网络显示无法访问互联网 | 取决于应用。有些会切换到另一个服务商 |
| 占用 VPN 接口 | 否 | 是 |
| 可与其他 VPN 应用共存 | 可以,但有下文所述的冲突 | 不可以,同一时间只能有一个 VPN |
| 帮助应对 HTTPS 中的名称过滤 | 否 | 仅当应用也具备这项功能时 |
私人 DNS 的短板
- 封锁 853 端口的网络。一些单位、学校和公共 Wi-Fi 会封锁它。在主机名模式下,网络就会看起来坏掉了。具体表现请看网站用移动数据能打开,用 Wi-Fi 却不行?
- 因网络而异的怪问题。这个设置是全局的,但网络各不相同。一个在移动数据上能用的主机名,可能在某个特定的 Wi-Fi 上失败。
- 公共 Wi-Fi 的登录页面。带登录页面的酒店和咖啡馆网络,在你完成登录之前,可能与固定主机名配合不好。暂时切换到“自动”通常就能解决。
- “自动”往往没有加密。大多数运营商自己的 DNS 服务器不提供 DNS over TLS,所以“自动”会悄悄停留在普通 DNS 上。
DoH 应用的短板
- 它必须一直运行。如果 Android 为了省电停止了这个应用,DNS 保护也会随之停止。请看让 VPN 在 Android 上保持运行。
- 它会挡住其他 VPN。你不能在同一部手机上把它和工作用的 VPN 一起使用。
- 它的服务器可能被按 IP 地址封锁。如果网络封锁了 DoH 服务器的地址,443 端口也帮不上忙。能退回到另一个服务商的客户端处理得更好。
冲突:私人 DNS 加 VPN 应用
从 Android 10 开始,VPN 应用运行时,私人 DNS 主机名同样生效。Google 自己的 Public DNS 说明指出,在 Android 9 上 VPN 会覆盖私人 DNS,这一点在 Android 10 中被修复。实际上,这意味着如果你设置了主机名,然后打开一个有自己 DNS 的 VPN 应用,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 连接,所以从不向你的运营商 DNS 查询。不支持 DoQ。完整说明见 DoH 和 DoT 详解。
与纯 DNS 应用的区别在于查询之后发生的事。GreenTunnel 还会改造 HTTPS 连接的第一个数据包以绕过简单的名称过滤,在 Requester 中显示按应用的连接,并能用检测网址测试某个网站。我们从不收集你查询的域名。
坦白说明加密 DNS 的局限
加密 DNS,无论通过哪种方式获得,都只能解决一种封锁:网络伪造或丢弃 DNS 应答。它无法阻止网络读取 HTTPS 握手中的网站名称,那需要数据包改造或 ECH。它无法突破 IP 封锁。它不会隐藏你的 IP 地址,你的运营商仍然能看到你连接了哪些地址。你选择的 DNS 服务商会代替你的运营商看到你的查询,所以请选择一个你信任其政策的服务商。GreenTunnel 同样不是匿名工具。
该用哪一个?
- 只想在正常的网络上加密查询?使用带服务商主机名的私人 DNS,简单且不需要应用。
- 你的网络封锁 853 端口、伪造 DNS 或过滤网站名称?DoH 应用更合适,最好是同时能处理名称过滤的应用。把私人 DNS 设为“关闭”或“自动”。
- 你已经在用工作 VPN?继续使用私人 DNS,因为只能运行一个 VPN 应用。
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。