我想通过 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 答案吗?
答:是的,它们都是一样的。虽然请注意,我实际上并没有将这些区域加载到 DNS 服务器中进行确认;例如,我在阅读问题时可能错过了一个错字。将它们加载到 DNS 服务器,允许区域传输,然后传输它们——您应该得到完全相同的结果。
细节:
如果您 在 BIND9 手册中选中“Other Zone File Directives”
$ORIGIN
,则默认为您在named.conf
. 主要是您$ORIGIN
在手动编写的文件中使用,例如,为了更容易处理子域($ORIGIN subdmain.domain.com.
然后定义子域的所有记录)。同一部分告诉您这
@
是当前原点的快捷方式。所以把它拼出来是完全一样的。当您连续为同名指定两条记录而不重复名称时,第二条记录只是隐式使用最后一条的名称。引用RFC 1035(称记录所有者的名称):
(顺便说一句:
$ORIGIN
并且@
也在 RFC 中,因此它们应该适用于使用相同区域文件格式的 BIND 以外的服务器。我只是使用 BIND 手册来获取比 1987 年更新的术语。)这些都是“主文件”格式的便利特性——它们与 DNS 有线协议无关。他们甚至无法将文件加载到 BIND 中(如果您已绑定重写区域文件,例如,由于允许 DNS 更新,那么您会发现它将重写文件更接近您的#4)。