DNS配置精要:常见故障模式与避坑指南

23 阅读7分钟

DNS是关键基础。常见风险有微中断、配置错误、投毒和DDoS攻击,它们严重影响系统可用性及性能。本系列后续将探讨如何有效监控DNS。

译自:How To Get DNS Right: A Guide to Common Failure Modes

作者:Sheldon Pereira

这是由两部分组成的系列文章的第一部分。

如果你曾花费时间诊断故障或性能问题,你就会知道,当一切似乎都无效时,“问题可能出在 DNS”。域名系统(DNS)仍然是数字连接的支柱,它默默地支持着每一次网络交易、应用程序调用和最终用户体验。

每一次点击、应用和交易都依赖于 DNS。它将名称转换为地址,以便用户可以访问你的服务。

虽然 DNS 的基础知识广为人知,但监控和故障排除这一关键层需要持续的警惕和高级工具。这个由两部分组成的系列文章将探讨为什么 DNS 问题如此难以察觉,然后展示如何从用户的角度监控、测试和验证 DNS 性能。

DNS 风险概览

DNS 在将用户引导至其预期目的地方面发挥着至关重要的作用。由于大多数组织依赖外部 DNS 提供商,他们通常对服务的整体可达性、性能以及记录的实时安全性知之甚少。了解主要的故障模式将帮助你决定要监控什么。

1. 微中断

微中断会短暂地阻止用户解析域名。它们可能持续几分钟到一小时,并且只影响特定区域或网络。任播(Anycast)是一种将查询导向多个地理分布服务器的路由方法,它可能会掩盖底层问题,因为节点即使在某些路径或站点不健康时也可能继续播发其边界网关协议(BGP)路由。常见原因包括:

  • 数据中心或接入点(pop)中断。
  • 网络之间的路由或连接事件。
  • 服务器性能饱和。
  • 突发期间导致超时的容量限制。
  • 仅影响特定用户群体的 ISP 特定路由或数据包丢失问题。

对于用户来说,这看起来像是随机的网站加载失败,然后重试时体验正常。对于运营团队来说,如果没有持续的分布式测试,很难重现这些问题。

2. 配置错误

配置错误是解析失败的常见根本原因。以下是一些影响较大的示例:

  • 顶层域(apex)的 CNAME 记录 CNAME(Canonical Name)记录创建别名,允许你使用不同的域名变体将用户指向网站上的相同位置。例如,help.mystore.comsupport.mystore.com 都可以将访问者引导到同一目的地。虽然 CNAME 记录通常用于为现有 A(地址)记录创建别名(称为 CNAME 的所有者记录),但它们不应配置为顶层域。此限制的存在是因为 CNAME 记录与其所有者和目标记录的交互方式。CNAME 通过将查询指向目标记录的 DNS 记录来替换与其所有者关联的所有 DNS 记录。当顶层域同时存在 A 记录和 CNAME 时,会发生冲突:顶层 A 记录不能同时是 CNAME 所有者和其目标。这种冲突会导致解析失败。

    例如,www.ggle.com 可以使用 CNAME 指向 google.com,但 google.com 本身不应是 CNAME,因为它代表顶层域。

  • 缺失的粘合记录(glue records) A 记录将网站的域名或子域名链接到 IPv4 地址,允许用户访问正确的服务器。大多数网站使用单个 A 记录,尽管实施轮询负载均衡的大型网站可能会为同一名称配置多个 A 记录。

    粘合记录是与相应名称服务器(NS)记录配对的 A 记录,因此名称服务器具有 IP 地址。这使得服务器能够解析其自身的完全限定域名。如果没有粘合记录,诸如委托、动态 DNS 更新和正常查询解析之类的操作可能会遇到问题或彻底失败。

    粘合问题通常仅在名称服务器位于被委托的区域内(例如 example.com 的 ns1.example.com)时发生;为外部名称服务器添加粘合记录是不必要的,并且本身可能成为配置错误。

  • 不正确的 TTL 值 DNS 生存时间(TTL)值定义了响应在缓存中保留的时间。设置不当可能导致近乎即时的缓存查找和必须遍历互联网才能获得新答案的慢速查询之间的差异。缓存响应的时间应根据你的环境特性来指导。高度动态的系统如果使用 24 小时 TTL 将会遇到问题,因为记录更改过于频繁,而更静态的环境可能不需要 5 分钟的 TTL,甚至可以通过增加 TTL 获得性能优势。过长的 TTL 还会减慢故障切换或切换速度,因为解析器可能会继续提供陈旧的 IP 地址。

  • 跛脚委托(Lame delegation) 域名通常要求使用至少两个名称服务器。当发出查询时,每个响应的名称服务器可以是正确授权的,也可以是“跛脚的”,这意味着它被列为授权,但实际上并不持有该域的授权区域数据。为了避免跛脚委托并确保可靠解析,请配置每个名称服务器,使其正确授权与该域关联的适当区域。跛脚委托通常发生在父区域中的 NS 记录列出了不再托管该区域的服务器时,导致这些服务器返回非授权响应。

3. DNS 投毒

DNS 投毒,也称为缓存投毒或欺骗,是指攻击者注入伪造的 DNS 数据,使解析器缓存并提供恶意答案。配置错误和缺乏验证会增加暴露风险。当受影响的解析器将恶意答案提供给互联网服务提供商、家庭路由器和设备缓存时,投毒可能会向下游传播。结果是流量被重定向到恶意主机、网络钓鱼网站或中间人基础设施。

  • 攻击者在 DNS 投毒攻击中篡改 DNS 记录 域名系统安全扩展(DNSSEC)是防御缓存投毒最强的手段,因为它允许解析器验证 DNS 记录是否经过数字签名且未被篡改。

4. 拒绝服务(DoS)攻击

攻击者可能试图通过向特定 URL 发送过多的请求来使其网络资源不可用,这被称为拒绝服务(DoS)攻击。这会用虚假流量淹没服务,挤占合法用户并导致严重的减速或完全中断。

分布式拒绝服务(DDoS)攻击采用相同的思路,但依赖互联网上数千台受感染的机器或僵尸网络来大规模地使服务离线。最近的一个变种使用基于 memcaching 的技术来进一步放大 DDoS 流量。

  • 放大 DDoS 攻击 在放大攻击中,攻击者利用小的查询触发更大的响应。通过重复发送这些轻量级请求,他们迫使 DNS 或其他服务返回不成比例的重型回复,迅速耗尽目标的带宽和资源。
  • 反射 DDoS 攻击 在反射攻击中,攻击者发送大型、伪造的查询,这些查询看起来源自受害者的 IP 地址。然后受害者收到过大的响应并被流量淹没,而递归名称服务器和权威服务器也可能因放大的负载而紧张。

业务影响

DNS 问题会降低可用性并降低性能。它们还会破坏依赖于名称解析的安全控制。症状包括错误率升高、结账放弃、登录失败、API 客户端卡住以及电子邮件误路由。由于 DNS 位于所有其他服务之前,因此问题会跨服务成倍增加。

接下来是什么

既然你已经了解了 DNS 失败的原因,下一步就是学习如何在用户发现这些情况之前检测它们。本系列的第二部分将解释如何通过反映真实用户体验的测试来监控 DNS 的性能、完整性和弹性。