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拉伸运行未绑定版本1.6.0 (手册和引用的文档在这里没有什么不同)。
我们已经测试了以下三个变体
/etc/unbound/unbound.confunbound-checkconfsystemctl 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.这是有意义的,因为同一个域名的一个条目必须是足够的,并且它似乎验证了对于两种编写域名的方法(带/不带点),未绑定具有相同的处理方式。
这两种方法都有效,但是在未绑定的情况下定义私有域名的正确语法是什么?域名是否应该以圆点结尾?结尾的点是有用的还是没有意义的?一个不必要的或缺失的点会有什么影响?
发布于 2022-11-10 16:35:36
这个问题很古老,但对我来说仍然是搜索中的第一个条目,所以我觉得值得一试。
底线:在这种情况下,以及在其他大多数情况下,domain.example (没有尾随.)和domain.example. (使用训练.)之间并没有实际的区别。因此,两者都是正确的。
现在长话短说。这个答案--也是从2018年开始这里唯一的其他评论--是从规范的内容出发的,2018年对OP的评论也是如此。虽然RFC与Unbound使用域名的方式之间可能存在语义上的差异,但这将偏离规范,很可能被认为是一个bug。
RFC 10343.1节定义了域名的核心语法:
当用户需要键入域名时,每个标签的长度被省略,标签由点(".")分隔。由于完整的域名以根标签结尾,这将导致以点结尾的打印形式。我们使用这个属性来区分:
相对名称要么相对于已知的来源,要么与用作搜索列表的域列表相对应。
注意最后一句:除非定义了“用作搜索列表的域列表”,否则没有尾随点的名称将被视为相对于“众所周知的起源”-i.e.,名称层次结构的根。对于公共DNS,DNS根对应于根区;私有名称层次结构很少偏离此约定。
出于实际目的,这意味着没有尾随.的完全限定域名(FQDN)几乎总是相对于名称层次结构的根来考虑,这相当于相同的“绝对”域。因此,domain.example == "domain.example相对于根“== domain.example.。
什么时候不同的表述会有影响呢?当您处理的是域名的片段而不是FQDN时。在这种情况下,您应该省略期间,并考虑在FQDN上使用句号。如果运行example.com. (请注意句点;根服务器向您发送*.example.com流量)并希望将east.example.com.设置为子域,则east是子域;east.是顶级域(TLD) .east。
再说一遍:规范就是这么说的。检查您正在配置的工具的文档,就像往常一样。规范还有其他方面,特别是DNS压缩,其中引入了一些额外的语义。如果您没有真正解析或生成DNS连接协议中的消息,则可以忽略这些消息。
希望这能完全回答这个问题。我希望这对某人有帮助。
https://serverfault.com/questions/899757
复制相似问题