unbound.conf 服务器选项“private-domain”——域名是否以点结尾?

unbound.conf 服务器选项“private-domain”——域名是否以点结尾?

unbound.conf用于配置未绑定,一个缓存 DNS 解析器。文档1.6.8 版本说明:

Server Options
    private-domain: <domain name>
        Allow this domain, and all its subdomains to contain private
        addresses. Give multiple times to allow multiple domain names
        to contain private addresses. Default is none.

我们在 Debian Stretch 中运行未绑定的 1.6.0 版本(手册页和引用的文档在这里没有区别)。

我们测试了以下三个变体,间隔如下

  • 編輯/etc/unbound/unbound.conf
  • 检查unbound-checkconf
  • 重启systemctl restart unbound.service
  • 监控未绑定的日志文件。

变体 1(以点结尾):

private-domain: domain.example.

变体 2(不以点结尾):

private-domain: domain.example

变体 3(按给定顺序):

private-domain: "domain.example. domain.example"

对于所有三种变体,unbound-checkconf返回:

unbound-checkconf: no errors in /etc/unbound/unbound.conf

在变体 3 中,我们在日志文件中发现:

debug: ignoring duplicate private-domain: domain.example.

这是有道理的,因为同一个域名的一个条目就足够了,并且它似乎验证了 unbound 对两种域名书写方式(带/不带点)都有相同的处理。

两种方法都有效,但在 unbound 中定义私有域名的正确语法是什么?域名应该以点结尾吗?结尾的点有用还是无意义?不必要的点或缺失的点会有什么影响?

答案1

这个问题很古老,但它仍然是我搜索中出现的第一个条目,因此在我看来,它值得尝试回答。

domain.example底线:在这种情况下,以及在大多数其他情况下, (无尾随.)和domain.example.(有训练)之间没有实际区别.。因此两者都是正确的。

现在来谈谈长答案。:) 这个答案——也是这里目前唯一的其他评论,来自 2018 年——源自规范的内容,就像 2018 年对 OP 的评论一样。虽然 RFC 和 Unbound 使用域名的方式之间可能存在语义差异,但这将是对规范的偏离,很可能被视为错误。

RFC 1034 第 3.1 节域名的核心语法定义如下:

当用户需要输入域名时,每个标签的长度将被省略,标签之间用点(“。”)分隔。由于完整的域名以根标签结尾,因此打印形式以点结尾。我们使用此属性来区分:

  • 代表完整域名的字符串 (通常称为“绝对”)。例如“poneria.ISI.EDU”。

  • 表示不完整域名起始标签的字符串,应由本地软件使用本地域的知识进行补充(通常称为“亲属”)。例如,ISI.EDU 域中使用的“poneria”。

相对名称要么相对于众所周知的来源,要么相对于用作搜索列表的域列表。

请注意最后一句:除非定义了“用作搜索列表的域列表”,否则没有尾随点的名称将被视为相对于“众所周知的来源”——即名称层次结构的根。对于公共 DNS,DNS 根对应于根区;私有名称层次结构很少偏离这一惯例。

从实际角度来看,这意味着不带尾随的完全限定域名 (FQDN).几乎总是应被视为相对于名称层次结构的根,这相当于相同的“绝对”域。因此,domain.example== “domain.example相对于根” == domain.example.

不同的表述何时会产生影响?当你处理碎片域名而不是 FQDN。在这种情况下,您应该省略句点,并考虑在 FQDN 上使用句点。如果您运行example.com.(请注意句点;根服务器会*.example.com向您发送流量)并希望设置east.example.com.为子域,east则是子域;east.是顶级域 (TLD) .east

再次强调:这是规范中的内容。像往常一样,请检查您正在配置的工具的文档。规范中还引入了一些其他语义,特别是 DNS 压缩。如果您实际上没有在 DNS 有线协议中解析或生成消息,则可以忽略这些语义。

希望这能完全回答这个问题。我希望这对某些人有帮助。

相关内容