Tre*_*ard 7 active-directory isc-dhcpd
我正在尝试用 ISC DHCP 替换 Windows Server 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 ...
}
Run Code Online (Sandbox Code Playgroud)
有了上述配置,正如预期的那样,DHCPD 被 DNS 拒绝更新/创建记录:
Unable to add forward map from device.example.local to 10.10.20.56: REFUSED
Run Code Online (Sandbox Code Playgroud)
这可以通过 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);
Run Code Online (Sandbox Code Playgroud)
发布时:
execute("/etc/dhcp/ddnsupdate6.sh", "delete", ClientIP, "-m", ClientMac);
Run Code Online (Sandbox Code Playgroud)
到期时:
execute("/etc/dhcp/ddnsupdate6.sh", "delete", ClientIP);
Run Code Online (Sandbox Code Playgroud)
最后,请注意您使用的是 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
Run Code Online (Sandbox Code Playgroud)
如果您看到类似于以下内容的行:
DDNS:为 10.10.20.51 (hostname.nauplius.local) 添加记录失败:nsupdate 状态 2
这可能意味着 keytab 中指定的用户没有 DNS 记录的权限,如果该用户最初没有创建记录(例如,您没有使用代理用户代表 DHCP 更新 DNS),就会发生这种情况。随着 DNS 记录过期,这种情况应该会随着时间的推移而消失,除非加入域的 Windows 客户端会自动更新他们自己的记录。
您可以通过 Windows 上的 DNS MMC 并检查相关 A/AAAA 记录的“安全”选项卡来验证这一点。如果您看到 HOSTNAME$,则 Windows 客户端在 DNS 中注册了自己,而 ISC DHCP 将无法注册(我个人没有看到这方面的问题)。否则,您应该看到密钥表中指定的用户对 A/AAAA 记录具有读/写权限。
归档时间: |
|
查看次数: |
11180 次 |
最近记录: |