ISC DHCP 與 Active Directory 安全動態 DNS 更新
我正在嘗試用 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 ... }
有了上面的配置,DHCPD,正如預期的那樣,被 DNS 拒絕更新/創建記錄:
Unable to add forward map from device.example.local to 10.10.20.56: REFUSED
這可以通過 ISC DHCP 的觸發器來完成。僅 IPv4 腳本和設置資訊可從ISC DHCPd 獲得:針對安全 Microsoft DNS 的動態 DNS 更新
有一個支持 IPv4 和 IPv6 的替代腳本,但使用與上述腳本相同的前提,可在dns-krbnsupdate.sh 獲得。
問題的基本癥結在於 MS DNS 使用 Kerberos 進行身份驗證以更新 DNS 記錄,而 ISC DHCP 開箱即用,支持 TSIG
$$ for BIND $$. 上面的腳本比較長,這裡就不貼了,基本步驟如下:
使用 生成密鑰表
ktutil
。這適用於作為 Active Directory 中“DnsUpdateProxy”成員的域使用者。您應該能夠在 Windows 或 Linux 上執行此操作(但必須將 keytab 複製到執行 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
這可能意味著 keytab 中指定的使用者沒有 DNS 記錄的權限,如果該使用者最初沒有創建記錄(例如,您沒有使用代理使用者代表 DHCP 更新 DNS),就會發生這種情況。隨著 DNS 記錄過期,這應該會隨著時間的推移而消失,除非加入域的 Windows 客戶端自動更新自己的記錄。
您可以通過 Windows 上的 DNS MMC 驗證這一點,並檢查相關 A/AAAA 記錄的安全選項卡。如果您看到 HOSTNAME$,那麼 Windows 客戶端在 DNS 中註冊了自己,而 ISC DHCP 將無法註冊(我個人認為這沒有問題)。否則,您應該看到 keytab 中指定的使用者對 A/AAAA 記錄具有讀/寫權限。