如何告訴 ISC DHCP 正確的區域以進行反向區域 DDNS 更新?
我有一個 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. ...