我正在尝试将Windows Server DHCP替换为ISC DHCP。为此,我需要能够促进从支持和不支持动态DNS记录注册的客户端更新DNS记录。
Active Directory / DNS在2012 R2林/域功能级别的Server 2012 R2上运行。DNS正向和反向查找区域仅接受安全的动态更新。
我一直没有找到有关如何仅将ISC DHCP集成到AD DNS环境中的指南。配置文件在下面,但是我在使用ISC DHCP时注意到的是,非域加入的客户端在正向/反向查找区域中不会为它们注册A记录。对于加入域的客户端,他们将在正向查找区域而不是反向查找区域中注册A记录。正向搜索区域正在使用DNSSEC。
ddns-updates on;
ddns-update-style standard;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
group {
option routers 10.10.20.1;
option subnet-mask 255.255.255.0;
option domain-search "example.local";
option domain-name-servers 10.10.20.2, 10.10.20.3;
option broadcast-address 10.10.20.255;
ddns-domainname "example.local";
ddns-rev-domainname "in-addr.arpa.";
authoritative;
allow unknown-clients;
authoritative;
subnet 10.10.20.0 netmask 255.255.255.0 {
range 10.10.20.30 10.10.20.150;
}
... certain IP reservations for hosts ...
}
完成上述配置后,DNS会按预期拒绝DHCPD更新/创建记录:
Unable to add forward map from device.example.local to 10.10.20.56: REFUSED
这可以通过ISC DHCP触发器来完成。可从ISC DHCPd获得纯IPv4脚本和设置信息:针对安全Microsoft DNS的动态DNS更新
还有一个支持IPv4和IPv6的备用脚本,但是在dns-krbnsupdate.sh上可以使用与上述脚本相同的前提。
问题的基本症结在于,MS DNS使用Kerberos进行身份验证以更新DNS记录,而开箱即用的ISC DHCP支持TSIG [for BIND]。
上面的脚本很长,因此我不会在这里发布它们,但是基本步骤是:
使用生成密钥表ktutil
。这是针对Active Directory中“ DnsUpdateProxy”成员的域用户。您应该能够在Windows或Linux上执行此操作(但必须将密钥表复制到运行ISC DHCP的服务器上)。
为您的域/ DNS服务器配置以上脚本。
在的“提交时”,“发布时”,“到期时”触发器上添加执行脚本所需的参数dhcpd.conf
。如果使用IPv4 / IPv6脚本,则需要调整“执行”行:
提交时:
execute("/etc/dhcp/ddnsupdate6.sh", "add", ClientIP, "-h", ClientName, "-m", ClientMac);
发布时:
execute("/etc/dhcp/ddnsupdate6.sh", "delete", ClientIP, "-m", ClientMac);
到期时:
execute("/etc/dhcp/ddnsupdate6.sh", "delete", ClientIP);
最后,请注明您使用的是MIT Kerberos还是Heimdal。使用Debian Jesse,我使用Kerberos,并取消了注释KRB5MIT
。
完成后,您可以启动isc-dhcp-server
和监视(默认日志记录)/var/log/syslog
。
您应该看到类似于以下内容的日志条目:
Mar 23 23:19:34 localhost dhcpd: execute_statement argv[0] = /etc/dhcp/ddnsupdate6.sh
Mar 23 23:19:34 localhost dhcpd: execute_statement argv[1] = add
Mar 23 23:19:34 localhost dhcpd: execute_statement argv[2] = 10.10.20.56
Mar 23 23:19:34 localhost dhcpd: execute_statement argv[3] = -h
Mar 23 23:19:34 localhost dhcpd: execute_statement argv[4] = HostName
Mar 23 23:19:34 localhost dhcpd: execute_statement argv[5] = -m
Mar 23 23:19:34 localhost dhcpd: execute_statement argv[6] = <MAC_Addr>
Mar 23 23:19:34 localhost dhcpd: DHCPREQUEST for 10.10.20.56 from <MAC_Addr> (HostName) via eth0
Mar 23 23:19:34 localhost dhcpd: IPv4!
Mar 23 23:19:34 localhost dhcpd: DHCPACK on 10.10.20.56 to <MAC_Addr> (HostName) via eth0
Mar 23 23:19:34 localhost dhcpd: DDNS: adding records for 10.10.20.56 (hostname.nauplius.local) succeeded
如果您看到类似以下内容的行:
DDNS:添加10.10.20.51(hostname.nauplius.local)的记录失败:nsupdate状态2
这可能意味着在密钥表中指定的用户没有DNS记录的权限,如果该用户最初未创建记录(例如,您没有使用代理用户代表DHCP更新DNS),则可能会发生这种情况。除非加入域的Windows客户端自动更新其自己的记录,否则随着DNS记录到期,这种情况应该会逐渐消失。
您可以通过Windows上的DNS MMC并检查有问题的A / AAAA记录的“安全性”选项卡来对此进行验证。如果您看到HOSTNAME $,则Windows客户端会在DNS中注册自己,而ISC DHCP将无法(我个人没有看到与此相关的问题)。否则,您应该看到在密钥表中指定的用户对A / AAAA记录具有读/写权限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句