停止使用易易于低DNS TTLS

2021-03-30 00:29:32

DNS Latency是具有优质在线体验的关键组件。为了最小化DNS延迟,仔细选择DNS服务器和匿名化继电器发挥着重要作用。但最小化延迟的最佳方法是避免发送无用的查询以开始。

这就是为什么DNS被设计成一个人以来是一个巨大的可缓存协议。个别记录最初由区域管理员设置的时间为直播,并且解压器使用此信息将这些记录保留在内存中,以避免不必要的流量。

缓存高效?几年前的快速学习表明有改善的空间。今天,我想采取新的外观现状。

为此,我修补了加密的DNS服务器,以存储响应的原始TTL,定义为每个传入查询的最小TTL。这使我们能够概述现实世界交通的TTL分布,而且还占个人查询的普及。将修补的版本留下了几个小时。

生成的数据集由1,583,579(名称,QType,TTL,TTL,时间戳)组成。这是整体TTL分布(X轴是TTL以秒为单位):

除了86400(主要用于SOA记录)的距离可忽略不计的凹凸外,TTL在低范围内很明显。让我们放大:

好吧,1小时以上的TTL是统​​计上微不足道的。让我们专注于0-3600范围,然后:

DNS反应的一半具有1分钟或更少,三分之三的TTL或更少有5分钟。

但等等,这实际上更糟糕。这些是由权威服务器定义的TTL。但是,从客户端解析器(例如路由器,本地缓存)检索TTL,可以获得每秒上游解析器递减的TTL。

因此,平均而言,客户端可以在需要新查询之前使用缓存条目是原始TTL的一半。

也许这些非常低的TTL只影响罕见的查询,而不是流行的网站和API。让我们来看看:

判决:这真的很糟糕。它已经糟糕了,它变得更糟。 DNS缓存已成为无用的旁边。使用ISP的DNS解析器(由于原因很好),较少且较少的人,增加的延迟变得更加明显。

城市传奇基于DNS的负载平衡取决于TTLS(它没有 - 由于Netscape Navigator,客户端从RR集中选择一个随机IP,如果它们无法连接,则透明地尝试另一个)

管理员希望立即应用更改,因为它可能需要更少的计划工作。

作为DNS或Load Balancer管理员,您的职责是有效地部署配置人员询问,而不是快速制作网站和服务。

我不包括在该列表中“for failover”,因为这变得越来越少。如果意图是将用户重定向到不同的网络只是为了在绝对地显示所有其他一切都在火灾时显示失败鲸鱼页面,则可能是可以接受超过1分钟的延迟。

此外,1分钟的TTL意味着如果授权DNS服务器超过1分钟,则没有人能够使用更长的依赖性服务。如果原因是配置错误或黑客,则冗余不会有助于帮助。另一方面,具有合理的TTL,良好的客户端将继续使用先前的配置,并且可能永远不会受到影响。

CDNS和负载平衡器主要是责备低TTL,特别是当它们将CNAME记录与短TTL组合时,具有短(但独立)TTL的记录:

$钻生raw.githubusercontent.comraw.githubusercontent.com。 9在cname github.map.fastly.net.github.map.fastly.net。 20在151.101.128.133github.map.ffectly.net中。 20在151.101.192.133github.map.fastly.net中。 20在151.101.0.133github.map.ffectly.net中。 20在151.101.64.133中

只要CNAME或任何记录到期时,需要发送新的查询。它们都有30秒的TTL,但不相位。实际平均TTL为15秒。

可是等等!这更糟糕。某些解析器在这种低TTL-CNAME +低TTL记录情况下表现得非常糟糕:

这是Level3的解析器,我认为正在运行绑定。如果您继续发送该查询,则返回的TTL将始终为1.基本上,Raw.githubuserContent.com将永远不会缓存。

$钻devetPortal.firefox.com @ 1.1.1.1detectportal.firefox.com。 25中的CNAME DetectPortal.Prod.mozaws.net.dettectportal.prod.mozaws.net。 26在cname detectportal.firefox.com-v2.edgesuite.net.detectportal.firefox.com-v2.edgesuite.net。 10668在cname a1089.dscd.akamai.net.a1089.dscd.akamai.net。 10在104.123.50.106a1089.dscd.akamai.net中。 10在104.123.50.88中

不少于3个CNAME记录。哎哟。其中一个有一个体面的TTL,但它完全没用。其他CNAMES具有60秒的原始TTL,AKAMAIN.NET名称具有20秒的最大TTL,并且均未相位。

$练习1-courier.push.apple.com @ 4.2.2.21-courier.push.apple.com。 1253在cname 1.courier-push-apple.com.akadns.net.1.courier-push-apple.com.akadns.net。 1在cname gb-courier-4.push-apple.com.akadns.net.gb-courier-4.push-apple.com.akadns.net。 1在17.57.1​​46.84gb-courier-4.push-apple.com.akadns.net中。 1在17.57.1​​46.85中

与Firefox相同的配置,并且在使用Level3的旋转变压器时,TTL大部分时间都会粘在1个。

$ miver client.dropbox.com @ 8.8.8.8client.dropbox.com。 7在cname client.dropbox-dns.com.client.dropbox-dns.com中。 59在162.125.67.3 $钻client.dropbox.com @ 4.2.2.2client.dropbox.com。 1在cname client.dropbox-dns.com.client.dropbox-dns.com中。 1在162.125.64.3中

seafebrowing.googleapis.com的TTL为60秒。 Facebook名称有60秒的TTL。并且,从客户端的角度来一次,这些值应该减半。

使用名称,查询类型,TTL和时间戳最初存储,我写了一个脚本,模拟了通过缓存解析器进行的1.5亿查询,以便估计由于过期的缓存条目而发送的查询。

47.4%的查询是在现有的,缓存的条目过期后进行的。这是不合理的。

X轴是设置的最小TTL。原始TTL高于此值的记录不受影响。

y轴是由已经缓存的条目的客户端制作的查询的百分比,但是制作了一个新的查询,缓存的条目已过期。

只需设置5分钟的最小TTL,查询数量从47%降至36%。设置15分钟的最小TTL使得所需查询的数量降至29%。最小TTL为1小时使其降至17%。这是一个重要的差异!

如何更改任何服务器端,但具有客户端DNS缓存(路由器,本地解析器和缓存...)设置最小TTL?

所需查询的数量通过设置5分钟的最小TTL为47%至34%,达到15分钟,最小值15分钟,最小1小时为1小时。 40分钟可能是一个甜蜜的地方。

当然,服务可以切换到新的云提供商,新服务器,新网络,要求客户端使用最新的DNS记录。并且具有合理低的TTL有助于使过渡无摩擦。但是,没有人搬到新的基础架构将希望客户在1分钟内使用新的DNS记录,5分钟或15分钟。设置40分钟的最小TTL而不是5分钟不会阻止用户访问该服务。

但是,它会通过避免不需要的查询来急剧减少延迟,并提高隐私和可靠性。

当然,RFC说,应备受尊重TTL。但现实是DNS已变得非常低效。

如果您是操作权威DNS服务器,请重新访问TTL。你真的需要这些要被嘲笑吗?

当然,使用低DNS TTL的有效原因有效。但不是75%的DNS流量,即使它大多是不可变的。

如果由于任何原因,您真的需要使用低DNS TTL,也确保缓存在您的网站上不起作用。出于同样的原因。

如果您使用本地DNS缓存(如DNSCrypt-Proxy)允许设置最小TTL,请使用该功能。这没关系。什么都不会发生。将该最小TTL设置为40分钟(2400秒)和1小时之间的内容。这是一个完全合理的范围。