如何從主要區域引用另一個 DNS 條目 (BIND 9)
我有兩個子區域可以說:
zone "first.com" { type master; file "/etc/bind/zones/first.com.primary";}; zone "second.com" { type master; file "/etc/bind/zones/second.com.primary";};
首先我定義
$TTL 300 @ IN SOA ns1.org.com. postmaster.org.com. ( 2022050902 ; serial 14400 ; refresh 1800 ; retry 604800 ; expire 86400 ) ; minimum @ IN NS ns1.org.com. subdomain IN A 127.0.0.1
第二個我想先參考
$TTL 86400 @ IN SOA ns1.org.com. postmaster.org.com. ( 2019032601 ; serial 14400 ; refresh 1800 ; retry 604800 ; expire 86400 ) ; minimum @ IN NS ns1.org.com. @ IN CNAME subdomain.first.com. www IN CNAME @ localhost IN A 127.0.0.1 loopback IN CNAME localhost
那可能嗎?
CNAME
記錄指定記錄左側的名稱是右側名稱的CNAME
別名-適用於所有類型的 DNS 記錄,而不僅僅是記錄。粗體字是導致問題的原因,因為“所有記錄類型”還包括區域和記錄。A``SOA``NS
您正在嘗試在該記錄所在的區域
CNAME
的頂點使用記錄。所以以完全合格的形式寫成,你的第一個說:second.com``SOA``CNAME
second.com. IN CNAME subdomain.first.com.
因此,當
second.com
請求 SOA 記錄時,subdomain.first.com
應該返回 SOA 記錄。但是,真正的 SOA 記錄second.com
將無法訪問,並且沒有該 SOA 記錄,整個second.com
域將被破壞——這意味著CNAME
指向的記錄subdomain.first.com
實際上是無效的。此外,如果
subdomain.first.com
不是其自己區域的頂點,而只是更高級別區域中的子域,則它沒有自己的 SOA 記錄:遵循 CNAME 映射意味著對second.com
的 SOA 記錄的請求必須回答“絕對不存在這樣的記錄”。但如果該區域沒有 SOA 記錄second.com
,則該區域不存在。同樣,當
second.com
請求 NS 記錄時,CNAME
將需要使用 NS 記錄subdomain.first.com
來響應。但是 的名稱伺服器subdomain.first.com
根本不需要知道任何關於second.com
.為了防止這樣的矛盾情況,RFC 1034 的第 3.6.2 節說:
如果 CNAME RR 出現在節點上,則不應出現其他數據;這可確保規範名稱及其別名的數據不能不同。此規則還確保可以使用記憶體的 CNAME,而無需與權威伺服器檢查其他 RR 類型。
(請注意,RFC 1034 早於約定,嚴格按照RFC 2119 中定義的要求級別使用單詞SHOULD、MUST和MAY。雖然它說“不應該存在其他數據”,但這是一個要求,而不是一個建議,因為 DNS 記憶體的正確性取決於它。)
此規則使記錄不可能存在
CNAME
於區域的頂點,因為SOA
和NS
記錄需要在頂點處才能有意義地存在,並且任何CNAME
與它們一起的記錄都將違反此規則。有關詳細資訊,請參閱:https ://www.isc.org/blogs/cname-at-the-apex-of-a-zone/
@ IN CNAME subdomain.first.com. www IN CNAME @
此外,將一條記錄指向
CNAME
另一條CNAME
記錄是低效且糟糕的風格,儘管它在技術上是有效的。您應該始終直接轉到鏈末尾的規範名稱:@ IN CNAME subdomain.first.com. www IN CNAME subdomain.first.com.