Linux

如何從主要區域引用另一個 DNS 條目 (BIND 9)

  • May 9, 2022

我有兩個子區域可以說:

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 中定義的要求級別使用單詞SHOULDMUSTMAY。雖然它說“不應該存在其他數據”,但這是一個要求,而不是一個建議,因為 DNS 記憶體的正確性取決於它。)

此規則使記錄不可能存在CNAME於區域的頂點,因為SOANS記錄需要在頂點處才能有意義地存在,並且任何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.

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