![降低 Route 53 上不存在主机名的计费成本](https://linux22.com/image/784357/%E9%99%8D%E4%BD%8E%20Route%2053%20%E4%B8%8A%E4%B8%8D%E5%AD%98%E5%9C%A8%E4%B8%BB%E6%9C%BA%E5%90%8D%E7%9A%84%E8%AE%A1%E8%B4%B9%E6%88%90%E6%9C%AC.png)
在本计费周期的第 5 天,我的 Route 53 区域已收到超过 3300 万个针对我最近删除的特定主机的请求。并且相关的 DNS 记录也被删除了。
我原本以为我不会因为查询不存在的主机记录而被收费,但根据计费仪表板,我确实被收费了。自从删除以来,查询数量已经翻了一番。一些初始查询日志和调查表明,有客户端针对这个已删除的主机名发出了许多冗余请求。
如果您感兴趣的话,这个主机是作为 STUN 协议的开放公共服务器运行的,用于引导 WebRTC 和 VOIP 呼叫。运行这个公共服务器的计费成本已经失控了。所以我把它移到了一个新的 IP 地址和新的主机名。我最近了解到一些其他知名的公共服务将 DNS 地址硬编码到他们的代码和示例文档中。
今晚,我重新添加了一个伪造的 A 和 AAAA 记录,该记录解析为 127.0.0.1(或 ::1),TTL 为 4 天。这可能会使重复请求的任何代码停止(尽可能多地)询问,并将条目缓存在下游 DNS 服务器中。但过多和冗余的 DNS 查询一直是一个代价高昂的问题,我从未能够解决。多年来,我一直在处理和缓解主机服务上的 DDOS 攻击,但我从未理解如何通过防火墙阻止 Route 53 客户端发出冗余请求。
理想的解决方案是 Route 53 会简单地忽略对已删除主机名的请求(并且不会向我收取费用)。
我有什么选择?
答案1
与删除记录相比,您当前的解决方案是返回具有本地主机 IP 地址和很长的 TTL 的有效响应,这确实是一种解决方案。
Amazon Route 53 的(当前)官方文档陈述并建议另一种方法
当 Route 53 响应对于具有 NXDOMAIN 或 NODATA 响应(否定响应)的 DNS 查询,将按标准查询的费率收费。(请参阅 Amazon Route 53 定价中的“查询”)。如果您担心负面响应的成本:
增加 SOA 记录的 TTL 值(默认设置为 900 秒)
增加 SOA 记录中的最小生存时间 (TTL) 值(默认为 86400 秒(= 24 小时))
这应该会增加 Route 53 发出的 DNS 响应(特定 DNS 记录不存在、NXDOMAIN 和/或 NODATA 响应将被缓存(在支持负缓存的适当解析器中))的时间。这应该会减少您需要支付费用的请求数量。
SOA 记录包含以下元素:
最短生存时间 (TTL)。此值有助于定义递归解析器应缓存来自 Route 53 的以下响应的时间长度:
恩斯域 不存在具有 DNS 查询中指定的名称(例如 example.com)的任何类型的记录。也不存在 DNS 查询中指定的名称(例如 zenith.example.com)的子记录。
没有数据至少存在一条具有 DNS 查询中指定的名称的记录,但是这些记录均不具有 DNS 查询中指定的类型(例如 A)。
当 DNS 解析器缓存 NXDOMAIN 或 NODATA 响应时,这被称为负缓存。
负缓存的持续时间是下列值中较小者:
- 此值 — SOA 记录中的最小 TTL。在示例中,该值为 86400(一天)。
- SOA 记录的 TTL 值。
当 Route 53 响应对于具有 NXDOMAIN 或 NODATA 响应(否定响应)的 DNS 查询,将按标准查询的费率收费。(请参阅 Amazon Route 53 定价中的“查询”)。如果您担心负面响应的成本,一种选择是更改 SOA 记录的 TTL、SOA 记录中的最小 TTL(此值)或两者。请注意,增加这些适用于整个托管区域的负面响应的 TTL 可能会产生积极和消极的影响:
...