DNS 中允许使用哪些字符/值?

DNS 中允许使用哪些字符/值?

当我因为检查 CNAME 记录中的下划线而查看 DNS 的 RFC 时,我发现了这个有趣的讨论和 RFC,其中有有趣的观点:

https://www.ietf.org/mail-archive/web/dnsop/current/msg01449.html

RFC 2181 11. 名称语法:DNS 本身仅对可用于识别资源记录的特定标签施加一个限制。该限制与标签和全名的长度有关。任何一个标签的长度限制在 1 到 63 个八位字节之间。完整域名限制为 255 个八位字节(包括分隔符)。零长度全名定义为表示 DNS 树的根,通常写为并显示为“。”。除了这些限制之外,任何二进制字符串都可以用作任何资源记录的标签。同样,任何二进制字符串都可以用作任何记录的值,这些记录的部分或全部值包含域名(SOA、NS、MX、PTR、CNAME 以及可能添加的任何其他字符串)。DNS 协议的实现不得对可使用的标签施加任何限制。特别是,DNS 服务器不得拒绝为区域提供服务,因为它包含某些 DNS 客户端程序可能不接受的标签。 DNS 服务器可以配置为在加载包含可能被视为可疑的标签的主要区域时发出警告,甚至拒绝加载,但是默认情况下不应发生这种情况。

所以我的问题是 - 如果我理解正确的话,这是否意味着我们可以在 DNS 记录(例如 MX、CNAME 等)中使用类似这样的内容?

如果我们要求:(想象可以是任何二进制字符串)

the?weird?record,___*-+\k8a#$%...domain.ext

这可以返回类似的字符组合(例如二进制字符串)吗?允许吗?

当然,我并不是在问“主机名”规则和“首选”命名约定,而是在问 DNS 中“允许”使用的字符。

答案1

有三件事需要考虑:

  1. RFC 标准 — 您似乎并不关心它,因为您不想了解首选的命名约定等。
  2. 您所使用的 DNS 服务器的实现 — 无论 RFC 如何,您是否可以将二进制数据放入 DNS 命名空间取决于供应商 (BIND、NSD...) 是否在其软件中支持这些字符。为了得到关于此问题的明确答案,您必须阅读他们的文档,或者更有可能浏览他们的源代码。
  3. 您正在使用的 DNS 客户端的实现 - 如果您想在 DNS 名称空间中存储二进制数据,而不是数据 RDATA 记录,则客户端也需要支持这一点。

相关内容