菜单
中文 (简体)

AdGuard 成为世界第一个 DNS-over-QUIC 解析器

AdGuard DNS 是首个支持新 DNS-over-QUIC 协议的公共 DNS 解析器。首先我们为大家讲一下什么是 DNS-over-QUIC(简称为 DoQ)。然后我们再来说其与其他协议相比有什么优劣之分,以及如何设置它

以防万一您需要温习一些知识,包括什么是 DNS,如何用它增强线上隐私保护,请您查看大约两年前撰写的这篇文章

什么是 QUIC?

以了解 DNS-over-QUIC 的复杂特点,首先要知道什么是 QUIC。QUIC 是较新传输层的网络协议。现在大家可能在想:“Ok,是在和我开玩笑吗?”。简单地说,QUIC 担任(一个或几个)服务器与客户端之间传输数据包的协议。也有其他能做到这一点的方式(其他协议)。您应该听说过近几年在网上风靡的老旧 TCP。

与 TCP 相比,QUIC 有更好的速度、稳定性,提供更优加密。此协议是近年开发的,而不是诞生于电子技术的“史前时代”,这意味着它可以解决一些可能之前从未被注意的重要问题。我为大家举几个例子为何 QUIC 优于其前辈。

队首阻塞

上述已提到过,在很长一段时间内,我们使用 TCP 传输层协议和其他运行在 TCP 之上的协议包括 TLS、SSL、HTTP 等协议。您应该至少看过某几个缩写,因为我们其实已使用很久,而且它们运行得不错。但关键在于,它们只在稳定宽带连接的较完美情况下才有效率。一出门在荒野使用 4G、LTE 和移动数据,您就会遇到问题比如弱信号、连接速度很慢或其他问题。连现代标准,比如 5G,都帮不了您,而城市里总会有信号弱的地方,比方说,电梯。

由于不断有这种问题,我们开始对它们习以为常,我们用“网络不良”解释页面加载很慢或文件无法下载。但为什么呢?让我们介绍一下队首阻塞(Head-of-line blocking)问题。使用 TCP 时,数据包是一批一批地发送给对方。倘若由于弱信号有一个数据包被丢失,那么数据会像纸牌屋一样完全崩溃。剩下的数据包都将无法被处理。您能做的,只能是希望传输过程不会出现问题,或等待被丢失的数据包重新发送。

在 TCP 之上,如果有一个数据包丢失,其他必须等待。

QUIC 的出现允许数据包不需要“排队”而是被收到后立即就被处理。如果由于弱信号,第一个数据包丢失,其他数据包还是会立即被处理。

在 QUIC 之上,第一个数据包丢失,其他数据包还是会立即被处理

连接迁移

我们已经习惯网上每一台设备使用其独一无二的 IP 地址来相互识别。事实上,也确实是这样。但设想一下普通人的一天,比如我的一天。每天早上我都会离开舒适温暖的家(和其稳定的 Wi-Fi)去上班。我的手机一无法连接家里的路由器,它就会从 Wi-Fi 自动切换成 4G。我的手机 IP 地址也会改,全部活动连接也会断开。在地铁上我重新打开浏览器以继续阅读一篇文章。浏览器需要重新建立到网站和到在 AdGuard Home 运行我的 DoH 服务器的连接。该过程是需要时间的,但是我可能很快就会失去耐性。等我到了办公室,连接 Wi-Fi,上述的故事又会反复出现。

QUIC 考虑到了这几点。 当您使用 QUIC 时,您的手机能够从一个 IP 地址切换为另一个 IP 地址,这就是所谓连接迁移(Connection Migration),而这不会对用户造成任何影响。当然整个流程更复杂。QUIC 允许您的连接保留对端点地址的所有更改,不仅对 IP 地址(比如说对端口的更改也是如此)。您就可以更容易搜索您所喜欢的主题。

DNS-over-QUIC

现在我们就进入到了关键。DNS-over-QUIC 是利用 QUIC 传输层协议的优点并依靠它以发送 DNS 请求的 DNS 协议。目前 DoQ 尚处于开发阶段,但这不会妨碍我们进行实验。

为何不是 DNS-over-HTTPS

事情到这里就更加复杂了:从一方面来说,由于后来要增加在 QUIC 之上建立的 HTTP/3 协议,所以 DNS-over-HTTPS 也需要支持 QUIC。于是关于这一点,又会衍生出一个新的问题:我们为什么需要使用 DoQ 呢?

事实上有几种原因,但它们都源自于 HTTP 不是传输层协议的问题。HTTP 是为其他原因创造的。如果使用它作为传输层协议,这会引起很多不必要的风险。特别是在私密区。使用 HTTP 以发送 DNS 请求会导致下列结果:

  • HTTP cookies
  • 其他 HTTP 消息头(HTTP headers)(包括 Authentication, User-Agent, Accept-Language)
  • 给预谋犯更多机会
  • Tracking using ETag

每一个问题可以在客户端的 DoH 级被解决,但是现在有各种不同的客户端:浏览器、操作系统,不少其他软件,但无法对每一个客户端都提供量身定做的解决方案。

AdGuard DNS-over-QUIC

我们很高兴在公共 DNS 解析器当中成为第一个将目前 DNS-over-QUIC 特点应用于我们的 DNS 服务器。我们将为您提供第一个体验它的机会!目前最简单体验它的方式就是使用我们的移动应用:适用于安卓的 AdGuard适用于 iOS 的 AdGuard

在适用于安卓的 AdGuard 上使用 DoQ

  • 打开应用。然后请您打开菜单
  • 请前往设置 > DNS 过滤并开启它
  • 从可用的列表中选择任何一个 AdGuard DNS 服务器
  • 服务器类型下列选择 DNS-over-QUIC(实验性的)

在适用于 iOS 的 AdGuard 上使用 DoQ

  • 打开应用,切换为保护标签
  • 开启 DNS 保护并打开其菜单
  • DNS 服务器选择任何可用的 AdGuard DNS 服务器
  • 在可用的协议中选择 DNS-over-QUIC(实验性的)

想了解更多吗?

那么您将收到更多信息!如您想深入了解 DoQ 并多采取一些行动,这里有很多实用的链接:

  • dnslookup —— 使用 DNS 请求的程序效用。其支持所有流行协议:DoH, DoT, DoQ, DNSCrypt。
  • AdGuard Home —— 想使用自己的 DoQ 服务器吗?没问题!AdGuard Home 的最近更新支持 DoQ。如您的 AdGuard Home 作为公共服务器,您可以设置加密
  • dnsproxy —— 如果对您来说,AdGuard Home 太复杂,您只想使用简单的 forwarder,那么可以选择 dnsproxy。这也是支持 DoH、DoT、DoQ 和 DNSCrypt 的 DNS 代理。
  • DnsLibs —— 想将 DoQ 应用在您的应用程序里吗?那么您可以使用我们用于 AdGuard 产品的 DnsLibs(C++ 类库)。
喜欢这篇文章吗?