2020 年 DNS 标志日倡议解决碎片和 TCP 支持问题

今天多家大型DNS服务商和DNS服务器厂商将举办联合活动 2020 年 DNS 卖旗日旨在将注意力集中在 决定 问题 处理大型 DNS 消息时存在 IP 碎片。 这是第二次此类活动,去年是“DNS 国旗日” 很专注 正确处理 EDNS 请求。

2020 年 DNS 卖旗日倡议的参与者呼吁将 EDNS 的建议缓冲区大小固定为 1232 字节(MTU 大小 1280 减去标头的 48 字节),以及 翻译 通过 TCP 处理请求是服务器的必备功能。 在 RFC 1035 仅对通过 UDP 处理请求的支持被标记为强制,并且 TCP 被列为可取的,但不是操作所必需的。 新的 RFC 7766 и RFC 5966 明确将 TCP 列为 DNS 正常运行所需的功能。 该倡议建议,在已建立的 EDNS 缓冲区大小不足的情况下,强制从通过 UDP 发送请求过渡到使用 TCP。

提议的更改将消除选择 EDNS 缓冲区大小的混乱,并解决大型 UDP 消息的碎片问题,该问题的处理通常会导致客户端数据包丢失和超时。 在客户端,EDNS 缓冲区大小将保持不变,并且大响应将立即通过 TCP 发送到客户端。 避免通过 UDP 发送大消息还可以解决某些防火墙上丢弃大数据包的问题并允许阻止 攻击 用于毒害 DNS 缓存,基于对分段 UDP 数据包的操作(当拆分为分段时,第二个分段不包含带有标识符的标头,因此可以伪造,为此只需校验和匹配就足够了) 。

从今天开始,参与的 DNS 提供商包括 CloudFlare、Quad 9、Cisco (OpenDNS) 和 Google, 会逐渐改变 其 DNS 服务器上的 EDNS 缓冲区大小从 4096 字节调整为 1232 字节(EDNS 更改将在 4-6 周内进行,并将随着时间的推移覆盖越来越多的请求)。 对不符合新限制的 UDP 请求的响应将通过 TCP 发送。 BIND、Unbound、Knot、NSD 和 PowerDNS 等 DNS 服务器供应商将发布更新,将默认 EDNS 缓冲区大小从 4096 字节更改为 1232 字节。

最终,当访问 UDP DNS 响应超过 1232 字节并且无法发送 TCP 响应的 DNS 服务器时,这些更改可能会导致解析问题。 Google 进行的一项实验表明,更改 EDNS 缓冲区大小实际上对失败率没有影响——缓冲区为 4096 字节时,UDP 请求被截断的数量为 0.345%,TCP 上不可达重试的数量为 0.115%。 对于 1232 字节的缓冲区,这些数字分别为 0.367% 和 0.116%。 将 TCP 支持作为必需的 DNS 功能将导致大约 0.1% 的 DNS 服务器出现问题。 值得注意的是,在现代条件下,如果没有 TCP,这些服务器的运行已经不稳定。

权威 DNS 服务器的管理员应确保其服务器通过网络端口 53 上的 TCP 进行响应,并且该 TCP 端口未被防火墙阻止。 信誉良好的 DNS 服务器也不应发送大于
请求的 EDNS 缓冲区大小。 在服务器本身上,EDNS 缓冲区大小应设置为 1232 字节。 解析器具有大致相同的要求 - 通过 TCP 进行响应的强制能力、在接收到截断的 UDP 响应时强制支持通过 TCP 发送重复请求以及将 EDNS 缓冲区设置为 1232 字节。

以下参数负责设置不同 DNS 服务器中的 EDNS 缓冲区大小:

  • BIND

    选项{
    edns-udp-大小 1232;
    最大 udp 大小 1232;
    };

  • 结DNS

    最大 udp 有效负载:1232

  • 结解算器

    网络缓冲区大小(1232)

  • PowerDNS权威

    udp 截断阈值=1232

  • PowerDNS 递归器

    edns 传出缓冲区大小=1232
    udp 截断阈值=1232

  • 不作承诺

    edns 缓冲区大小:1232

  • NSD

    ipv4-edns-大小:1232
    ipv6-edns-大小:1232

    来源: opennet.ru

  • 添加评论