Bind

如何告訴 ISC DHCP 正確的區域以進行反向區域 DDNS 更新?

  • April 2, 2020

我有一個 ISC DHCP 伺服器正在執行(版本 4.2.5),它被配置為使用它通過 dhcp DISCOVER 包接收的主機名動態更新 DNS 服務上的反向區域。

這一切都在像這樣的2.1.10.in-addr-arpa區域上正常工作,但這個區域看不到工作:

zone 16-30.32.168.192.in-addr.arpa. {
   primary 127.0.0.1;
   key rndc-key;
}

dhcp 配置為分發該範圍內的地址:

range 192.168.32.17 192.168.32.30;

並且反向區域工作正常。但是,該區域上的動態更新失敗並顯示:

Unable to add reverse map from 17.32.168.192.in-addr.arpa. to debiantest.dhcp.company.com: not found

如何指定這個特定區域?這似乎是語法問題,因為它適用於其他區域,但我在 isc dhcp 文件中找不到正確的資訊。

為了文件,我將嘗試在這裡回答我自己的問題:這是不可能的。引用https://lists.isc.org/mailman/htdig/dhcp-users/2006-August/001422.html

DHCP 不支持任意區域的更新,它採用 ip 地址,反轉八位字節,並附加反向域名(預設 in-addr.arpa)。

然而,這個問題有一個巧妙的解決方案。可以在 dhcpd 配置中為 DDNS 更新配置任意域名:

ddns-rev-domainname "dhcp";
zone 32.168.192.dhcp. {
   primary 127.0.0.1;
   key rndc-key;
}

因此,DNS 伺服器需要提供該特定區域。由於在我的情況下它是一個 bind9,這是來自 /etc/named.conf 的相關片段

zone "32.168.192.dhcp" IN {
   type master;
   file "/var/named/dynamic/32.168.192.dhcp";
   allow-update { key "rndc-key"; };
};

當然,相應的區域文件:

$ORIGIN .
$TTL 600        ; 10 minutes
32.168.192.dhcp        IN SOA  dns-dhcp.company.com. hostmaster.company.com. (
                           2016100328 ; serial
                           3600       ; refresh (1 hour)
                           600        ; retry (10 minutes)
                           86400      ; expire (1 day)
                           600        ; minimum (10 minutes)
                           )
                       NS      dns-dhcp.company.com.

所以現在 32.168.192.dhcp 區域隨著 dhcp 伺服器的資訊動態更新。但這如何幫助反向查找?畢竟,客戶端會查找 x.32.168.192.in-addr.arpa,對嗎?好吧,如果我們為可能位於 32.168.192.dhcp 區域中的每個主機添加 CNAME 資源記錄到 32.168.192.in-addr.arpa 區域(這是 DHCP 伺服器可能分發的所有 IP,也就是子網範圍),我們應該是金色的。

所以這裡是 32.168.192.in-addr.arpa 區域文件的相關部分(在我的例子中是 /var/named/32.168.192.in-addr.arpa):

$GENERATE 17-30 $ CNAME $.32.168.192.dhcp.

這將導致:

$ dig -x 192.168.32.17
...
;; ANSWER SECTION:
17.32.168.192.in-addr.arpa. 600 IN     CNAME   17.32.168.192.dhcp.
17.32.168.192.dhcp.         300 IN     PTR     debian.company.com.
...

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