AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1095769
Accepted
Arvy
Arvy
Asked: 2022-03-10 08:50:53 +0800 CST2022-03-10 08:50:53 +0800 CST 2022-03-10 08:50:53 +0800 CST

具有多个 IP 的 DNS 记录 + 512 字节 UDP 限制

  • 772

我有一个指向单个 IP 的 DNS 记录(例如:test.example.com):

test.example.com IN A 192.0.2.1

工作正常。现在我有 +30 个 IP 来回答它,例如:

teste.example.com IN A 192.0.2.1
teste.example.com IN A 192.0.2.2
(...)
teste.example.com IN A 192.0.2.31

现在它不稳定(“找不到主机”错误)。使用dig我得到一个警告“截断,在 TCP 模式下重试”。经过一番谷歌搜索,我发现一个多IP查询必须不超过512字节才能保证使用UDP,并避免额外的查询(或no-tcp dns客户端或提供者的问题,旧的dns sw, ETC)。

那么,我如何知道在单个 dns 条目中可以拥有多少个 v4 IP 以保证最大 512 字节的 UDP 应答?

或者

是否可以将 ISC 绑定配置为在多 IP 查询中仅返回一个 IP?我知道IP可以循环使用rrset-order { order cyclic; };。

喜欢:

> test.example.com
Server: x.x.x.x
Address: x.x.x.x:53

Name: test.example.com
Address: 192.0.2.6

所以,只有其中之一?谢谢。

domain-name-system
  • 0 0 个回答
  • 355 Views

0 个回答

  • Voted
  1. Best Answer
    Patrick Mevzek
    2022-03-10T09:56:00+08:002022-03-10T09:56:00+08:00

    现在它不稳定(“找不到主机”错误)

    从哪里/如何?

    正如您所注意到的,所有正确设置的解析器都会在他们第一次通过 UDP 查询时获得一个截断标志,然后将切换到 TCP,一切都会好起来的。

    当然,您记得 DNS 是基于 UDP和TCP(与流行的神话相反),因此您需要确保可以通过 TCP 查询您的权威名称服务器,一切都会好起来的。

    经过谷歌搜索,我发现一个多IP查询必须不超过512字节才能保证使用UDP

    这取决于。有时你可以超过 1000。但最重要的是,事情回退到 TCP,所以应该不是问题(也许只是性能上的轻微损失)。

    并避免额外的查询(或无 tcp dns 客户端或提供程序、旧 dns sw 等问题)。

    “无 tcp dns 客户端或提供者”不应该存在,因为它没有任何意义,并且违反了 40 多年前编写的 DNS 规范!或者你有这些案例的具体证据吗?

    不要试图绕过这样的事情。如果存在这些软件,它们就会被破坏,并且会出现大量其他问题,例如 DNSSEC 安全域。

    那么,我如何知道在单个 dns 条目中可以拥有多少个 v4 IP 以保证最大 512 字节的 UDP 应答?

    这通常无法回答(因为取决于名称),但最重要的是,尝试以这种方式优化事物是徒劳的。

    无论如何,您可以轻松地进行计算:

    • UDP 数据包在数据前有 8 个字节的标头(RFC 768)
    • 一个 DNS 数据包,见 RFC 1035,有一个标头(12 个字节),然后是问题(可变数量的字节,见后文),然后是答案(见后文),我们将考虑附加和权限部分为空。

    所以我们已经在 512-8-12 = 492 字节的 DNS 问题 + 答案。

    作为回答,一条A记录将是名称(可变长度)+ 类型(2 个字节)+ 类(2 个字节)+ TTL(4 个字节)+ 长度(2 个字节),然后是数据。因为A数据是 4 个字节(一个 IPv4 地址)。

    问题是名称(可变长度)+ 类型(2 个字节)+ 类(2 个字节)。

    DNS 数据包中的名称具有以下两个属性:

    • 它们被编码为以长度为前缀的标签列表
    • 可能会被压缩,以使给定名称或名称的一部分仅出现一次。

    因此,例如example.com在 DNS 中编码为 7,e,x,a,m,p,l,e,3,c,o,m,0 ,其中每个长度为一个字节,但如果以后需要名称,它将是替换为仅使用 2 个字节的指针。

    如果我们取这个名字:

    • 有问题的名称部分的大小将是:13 个字节,所以问题的总大小:13 + 2 + 2 = 17
    • 在答案中,每个名称都可以是引用问题中名称的 2 个字节的指针,因此答案中的每条记录的长度将是 2 个字节的名称,然后是上面的其余部分,因此是 16 个字节。

    因此,完整的 DNS 数据包的大小为 12(标头)+ 17(问题)+ x 乘以 16,其中 x 是A记录数。

    所以我们必须解决:512 = 8 + 12 + 17 + 16x对于x,它产生x=29了左右。请记住,这是在最好的情况下(没有附加/授权记录,并且完全使用名称压缩)和特定名称(但如果使用压缩,则名称仅在有问题的情况下完整出现一次,因此只有大小发生变化)。

    【另外,对了,别被上世纪遗留的互联网所困;现在 IPv6 应该是标准;AAAA当然,与 IPv4 相比,您在固定大小的 DNS 数据包中放置的记录类型更少:-)]

    是否可以将 ISC 绑定配置为在多 IP 查询中仅返回一个 IP?

    我不这么认为,如果它存在,bind 将如何选择返回哪个 IP?如果您在这里,您可以在区域文件中仅列出一个 IP。或者如果你真的很喜欢这个想法(但你一直在这不会阻止其他问题,因为客户端是越野车,所以你无论如何都试图与无限的山丘作斗争),你可以尝试dnsdist这是一种瑞士军刀,并允许微调。

    PS:还要记住,DNS 有一个扩展,允许一方指定它可以接收的 (UDP) 缓冲区大小。请参阅 RFC 6891。最近dig使用1232的默认设置。您可能有兴趣查看https://kb.isc.org/docs/aa-01219或https://dnsflagday.net/2020/上的 2020 年 DNS 标志日,这正是关于此的。

    • 2

相关问题

  • Solaris DNS

  • resolv.conf 在经过一段时间后被更改

  • 为什么有些网站的网址中没有“www”就无法显示?[关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve