Domain-Name-System

BIND DNS:如何覆蓋 $GENERATE 指令生成的 RR?

  • May 10, 2021

我正在為反向 /16 區域執行權威名稱伺服器,其中每個 IP 都映射到自定義子域。這是通過具有 256 個$GENERATE指令的區域文件來實現的,例如(子網 11.22.0.0/16):

$GENERATE 0-255 $.1 PTR $.1.22.11.rev.example.com.
$GENERATE 0-255 $.2 PTR $.2.22.11.rev.example.com.
(...)

這很好用,唯一的問題是,每當我們添加“有意義的”反向記錄 ( 4.3.22.11.in-addr.arpa. IN PTR www.example.com.) 時,都會導致同一 IP 地址有 2 個 PTR 記錄:

4.3.22.11.in-addr.arpa. IN PTR www.example.com.
4.3.22.11.in-addr.arpa. IN PTR 4.3.22.11.rev.example.com.

在大多數情況下,這很好,但在某些情況下,我們需要有一個 PTR 記錄。

解決方案是將塊“展開”$GENERATE成單獨的 PTR 記錄並替換有問題的記錄。有沒有辦法覆蓋生成的記錄而不必擴展整個範圍?

此名稱伺服器在 RHEL6 上執行 BIND 9.8.2。

$GENERATE指令只有兩種範圍的形式:開始-停止或開始-停止/步進。因此,您不能從範圍中排除一個 IP,但您必須相應地拆分範圍,例如

$ORIGIN 22.11.in-addr.arpa.
$GENERATE 0-3   $.3  PTR  $.3.22.11.rev.example.com.
               4.3  PTR  www.example.com.
$GENERATE 5-255 $.3  PTR  $.3.22.11.rev.example.com.

不幸的是,沒有辦法做到這一點。你被“展開”困住了。

在記憶中, $ GENERATE directive causes individual PTR records to be generated. This can be observed by viewing the zone file received by the secondary servers after zone transfer, which does not contain a $ GENERATE 指令。沒有允許您選擇性地覆蓋單個 PTR 記錄的語法。

在DNS for Rocket Scientists 的第 8 章中提到了另一種方法,即添加一個使用步驟named-checkzone來解析 $GENERATE 指令並將其替換為單獨的 PTR 記錄:

這 $ GENERATE statement is executed while loading the zone file and will result in an expanded in-memory version of the zone being used by BIND9 operationally while the zone file itself is unchanged. If you want to see the expansion (you don’t trust the outcome or you want to edit it) the bind utility named-checkzone will allow creation of an expanded zone file (including the $ GENERATE 指令(s))可以用作模板(或骨架)並隨後進行編輯。作為使用命名檢查區的副作用,任何不合格的標籤(名稱)也將擴展為完整的 FQDN 和任何 $ TTL directive will be used to populate individual RR TTLs. This may, or may not, be a useful side effect. Assuming the zone file containing the $ GENERATE 指令是 192.168.199.rev(根據本指南的區域文件命名約定),區域名稱是 199.168.192.IN-ADDR.ARPA 然後以下命令將輸出擴展區域文件到 192.168.199.rev.exp .

named-checkzone -D -o 192.168.199.rev.exp 199.168.192.IN-ADDR.ARPA 192.168.199.rev

當然,缺點是您在主伺服器上的區域文件變得更大。此時,您僅使用 $GENERATE 為您建構初始反向區域,這樣就不必手動輸入各個 PTR 記錄,並且 shell 腳本可以輕鬆地在那裡實現相同的最終結果。

這可能不是您所希望的解決方案,但不幸的是,情況就是這樣。:(

引用自:https://serverfault.com/questions/854227