我正在运行一个 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 文档中找不到正确的信息。
答案1
为了便于记录,我将尝试在这里回答我自己的问题:这是不可能的。引用自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 区域中的每个主机(即 DHCP 服务器可能分发的所有 IP,即子网范围)向 32.168.192.in-addr.arpa 区域添加 CNAME 资源记录,那么我们就应该万事俱备了。
因此,这是 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.
...