Dns
這個區域語法有什麼區別嗎?
我想通過 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)。