这个区域语法有什么区别吗?

这个区域语法有什么区别吗?

我想通过 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)。

相关内容