我想通过 Ansible 构建绑定区域文件。为了决定如何构建 jinja2 模板,我需要知道这些区域配置是否有任何差异:
1.)好的老式方法:
$ORIGIN foo.bar.
@ IN SOA dns.foo.bar. hostmaster.foo.bar. (
2018111601
3H
1H
604800
86400)
86400 IN NS ns01.foo.bar.
86400 IN NS ns02.foo.bar.
www IN A 10.0.0.1
-
2.) 如果区域名称已经是 foo.bar,我是否必须指定 $ORIGIN?
来自named.conf:
zone "foo.bar" in{
type master;
file "zones/foo.bar";
};
来自区域/foo.bar:
@ IN SOA dns.foo.bar. hostmaster.foo.bar. (
2018111601
3H
1H
604800
86400)
86400 IN NS ns01.foo.bar.
86400 IN NS ns02.foo.bar.
www IN A 10.0.0.1
-
3.) 分割顶点并多次使用“@”
$ORIGIN foo.bar.
@ IN SOA dns.foo.bar. hostmaster.foo.bar. (
2018111601
3H
1H
604800
86400)
www IN A 10.0.0.1
@ 86400 IN NS ns01.foo.bar.
@ 86400 IN NS ns02.foo.bar.
-
4.) 不使用“@”占位符
foo.bar. IN SOA dns.foo.bar. hostmaster.foo.bar. (
2018111601
3H
1H
604800
86400)
foo.bar. 86400 IN NS ns01.foo.bar.
foo.bar. 86400 IN NS ns02.foo.bar.
$ORIGIN foo.bar.
www IN A 10.0.0.1
-
我总是想要这个作为答案:
$ dig foo.bar ANY +noall +answer
foo.bar. 1784 IN SOA dns.foo.bar. hostmaster.foo.bar. 2018121401 10800 3600 604800 86400
foo.bar. 86384 IN NS ns01.foo.bar.
foo.bar. 86384 IN NS ns02.foo.bar.
$ dig www.foo.bar +short
10.0.0.1
问题:
- 所有变体都会产生相同的 DNS 答案吗?
答案1
答:是的,它们都是一样的。但请注意,我实际上并未将这些区域加载到 DNS 服务器中进行确认;例如,我在阅读问题时可能漏掉了一个拼写错误。将它们加载到 DNS 服务器,允许区域传输,然后传输它们 — 您应该得到完全相同的结果。
细节:
如果你检查 “其他区域文件指令”在 BIND9 手册中,
$ORIGIN
默认为您在 中指定的区域named.conf
。主要是您在手动编写的文件中使用$ORIGIN
,例如,以便更轻松地处理子域($ORIGIN subdmain.domain.com.
,然后定义子域的所有记录)。同一部分告诉您这
@
是当前原点的快捷方式。所以拼写出来是完全一样的。当您在一行中为同一个名称指定两个记录而不重复名称时,第二个记录只是隐式使用最后一个记录的名称。去引用RFC 1035(它调用记录的名称所有者):
最后两种形式代表 RR。如果 RR 的条目以空白开头,则假定该 RR 由最后声明的所有者拥有。如果 RR 条目以 <domain-name> 开头,则所有者名称将被重置。
(顺便说一句:$ORIGIN
和@
也在 RFC 中,因此它们应该适用于使用相同区域文件格式的 BIND 以外的服务器。我只是使用 BIND 手册来获取比 1987 年更新的术语。)
这些都是“主文件”格式的便利功能——它们与 DNS 有线协议无关。它们甚至无法将文件加载到 BIND 中(如果您已绑定重写区域文件,例如,由于允许 DNS 更新,那么您会发现它将重写文件更接近您的 #4)。