在 DNS 区域文件中指定 $ORIGIN 指令时,如果您指定的是 FQDN(完全限定域名),则根据定义,它应该以尾随点结尾(例如,$ORIGIN example.com.
而不是$ORIGIN example.com
)。这是有道理的,因为尾随点明确地表明“com”或其他顶级域是 DNS 根的子域(具有空白名称或“”,并通过点与顶级域分隔)。
但是在 BIND 配置文件(现代版本中称为 named.conf)中,区域名称的标记没有尾随点,如下所示:
zone "example.com" IN {
type master;
file "master.example.com";
}
值得注意的是,如果区域文件中未指定 $ORIGIN 指令,则 BIND 会隐式假定 $ORIGIN 为在 named.conf 文件中指定的区域名称。根据我的观察,BIND 似乎在从区域名称中假定 $ORIGIN 时将尾随的点添加到 $ORIGIN。
我的问题是,为什么您指定区域名称时不带尾随点?为什么上面的区域名称不指定为zone "example.com."
?“example.com”在技术上不是区域名称的模糊标识符吗?
答案1
这其实并没有什么歧义。定义区域时,引号之间的字符串是区域。如果它完全按照您提供的字符串来处理,那么尾随的点实际上并不是必需的。
尾部点实际上只在区域文件内有用。通过自动添加$ORIGIN
到文件中的任何条目,它可以让您免于不断反复输入区域名称。如果您确实需要使用 FQDN,例如指向外部域的 CNAME,则只需添加点即可。