Dns

這個區域語法有什麼區別嗎?

  • December 19, 2018

我想通過 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(稱記錄所有者的名稱):

最後兩種形式代表 RR。如果 RR 的條目以空白開頭,則假定 RR 歸最後聲明的所有者所有。如果 RR 條目以 <domain-name> 開頭,則所有者名稱將被重置。

(順便說一句:$ORIGIN並且@也在 RFC 中,因此它們應該適用於使用相同區域文件格式的 BIND 以外的伺服器。我只是使用 BIND 手冊來獲取比 1987 年更新的術語。)

這些都是“主文件”格式的便利特性——它們與 DNS 有線協議無關。他們甚至無法將文件載入到 BIND 中(如果您已綁定重寫區域文件,例如,由於允許 DNS 更新,那麼您會發現它將重寫文件更接近您的 #4)。

引用自:https://unix.stackexchange.com/questions/489817