Bind 9 和 Samba 4 中的 in-addr.arpa 區域委託作為具有 DDNS 的 AD DC
環境和目標
在我的測試 KVM 實驗室中,我有一個虛擬網路
172.16.50/24
,在這個網路中,我有 2 個執行 Bind 9 和 ISC DHCP 伺服器的 Centos 7 VM:
- DNS主:
controller.wsvirt.home (172.16.50.2)
- 從屬 DNS:
controller2.wsvirt.home (172.16.50.3)
網路中的所有客戶端都是 Linux VM,它們都從 DHCP 伺服器獲取網路配置。此伺服器動態更新 DNS 區域。
Bind 9 是
wsvirt.home
zone 的權威伺服器。在實驗室環境中,我測試了一個必須在我們的商務辦公網路中實現的場景。在業務環境中,我應該創建一個 AD 域來為 Windows 客戶端提供服務,為此我們決定使用 Samba 4 作為 DC。我已經為 Centos 7 建構了一個 Samba 伺服器,並從原始碼中獲得了 Heimdal Kerberos 支持。
對於 AD,我分配了子網
172.16.50.192/26
和分配的ad.wsvirt.home
域。AD DC 是一個執行 Samba 4、Bind 9 和 ISC DHCP 伺服器的 Centos 7 VM。Samba 使用 BIND_DLZ 作為 DNS 後端。AD 控制器具有
addc1.ad.wsvirt.home
域名和IP 172.16.50.193
.所有 Windows AD 客戶端從動態更新綁定 DLZ 區域的 AD DC 上執行的 DHCP 伺服器獲取 IP。
在真實的工作物理環境中,來自兩個網路的所有客戶端 PC 都應該連接到一個廣播域。
為了滿足要求,我將伺服器上的 Bind 中的正向
ad.wsvirt.home
和反向DNS 區域授權相應地授予AD 控制器172.16.50.192/26``controller.wsvirt.home``addc1.ad.wsvirt.home
$$ RFC 2317 $$$$ 1 $$.
# 問題 # 除了一件事,一切都完美無缺。當我在 AD DC 上測試委託反向區域的反向查找時,結果看起來不錯,因此 Windows AD 客戶端可以解析兩個域中的所有反向域名。:
$ dig -x 172.16.50.193 @addc1.ad.wsvirt.home ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -x 172.16.50.193 @addc1.ad.wsvirt.home ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43507 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;193.50.16.172.in-addr.arpa. IN PTR ;; ANSWER SECTION: 193.50.16.172.in-addr.arpa. 86400 IN CNAME 193.50.16.172.ddns. 193.50.16.172.ddns. 900 IN PTR addc1.ad.wsvirt.home. ;; Query time: 7 msec ;; SERVER: 172.16.50.193#53(172.16.50.193) ;; WHEN: Mon Mar 30 21:05:12 IDT 2020 ;; MSG SIZE rcvd: 121
但是當我將我的請求路由到 DNS 伺服器
controller.wsvirt.home
時,它不會從 ``ad.wsvirt.home``` 域解析任何反向名稱,因此 Linux 客戶端無法查找任何反向名稱:$ dig -x 172.16.50.193 @controller.wsvirt.home ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -x 172.16.50.193 @controller.wsvirt.home ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 48825 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;193.50.16.172.in-addr.arpa. IN PTR ;; ANSWER SECTION: 193.50.16.172.in-addr.arpa. 86400 IN CNAME 193.50.16.172.ddns. ;; AUTHORITY SECTION: . 8133 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2020033001 1800 900 604800 86400 ;; Query time: 0 msec ;; SERVER: 172.16.50.2#53(172.16.50.2) ;; WHEN: Mon Mar 30 21:49:41 IDT 2020 ;; MSG SIZE rcvd: 162
我需要來自
wsvirt.home
域的 Linux 客戶端能夠解析ad.wsvirt.home
域中的反向域名。有可能嗎?#配置# 更準確地說,我將兩台伺服器的配置文件放在這裡
伺服器控制器.wsvirt.home
/etc/named.conf
acl local { 172.16.50.0/24; 127.0.0.1; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; include "/etc/rndc.key"; server 172.16.50.3 { keys { "rndc-key"; }; }; ... options { listen-on port 53 { local; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { local; }; allow-transfer { none; }; notify no; forwarders { 8.8.8.8; 8.8.4.4; }; forward only; recursion yes; dnssec-enable yes; dnssec-validation yes; bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; zone "." IN { type hint; file "named.ca"; }; zone "wsvirt.home" IN { type master; file "wsvirt.home.db"; allow-update { key "rndc-key"; }; allow-transfer { key "rndc-key"; }; notify yes; forwarders {}; }; zone "50.16.172.in-addr.arpa" IN { type master; file "50.16.172.db"; allow-update { key "rndc-key"; }; allow-transfer { key "rndc-key"; }; notify yes; };
/var/named/50.16.172.db
$ ORIGIN . $ TTL 86400 ; 1 天 50.16.172.in-addr.arpa 在 SOA 控制器.wsvirt.home。root.wsvirt.home。(153;串列 3600;刷新(1 小時)1800;重試(30 分鐘)604800;過期(1 週)86400;最少(1 天))NS controller.wsvirt.home。NS 控制器 2.wsvirt.home。 $ ORIGIN 50.16.172.in-addr.arpa. 2 PTR controller.wsvirt.home. $ TTL 86400 ; 1 天 3 PTR controller2.wsvirt.home。... ; 50.16.172.ddns。在 NS addc1.ad.wsvirt.home。 $ GENERATE 193-254 $ 在 CNAME $.50.16.172.ddns。``` ### /etc/dhcp/dhcpd.conf ### ``` 包括“/etc/rndc.key”; 預設租賃時間 600;最大租賃時間 7200;權威性; ddns-update-style 過渡; class "windows" { match if substring (option vendor-class-identifier, 0, 8) = "MSFT 5.0"; } 子網 172.16.50.0 網路遮罩 255.255.255.0 { log (info, concat("Vendor Class ID (60): ", option vendor-class-identifier)); log (info, concat("DHCP Client ID (61): ", option dhcp-client-identifier)); log (info, concat("User Class ID (77): ", option user-class)); 選項域名伺服器 172.16.50.2、172.16.50.3;選項 ntp-servers 172.16.50.2;選項路由器 172.16.50.1;選項廣播地址 172.16.50.255;預設租賃時間 600;最大租賃時間 7200;選項 ip-forwarding off; 忽略客戶端更新;選項域名“wsvirt.home”;選項域搜尋“wsvirt.home”;選項 netbios 範圍“”;選項 netbios-node-type 8; 選項 netbios-name-servers 172.16.50.2;選項 netbios-dd-server 172.16.50.2;ddns 更新;ddns-域名 "wsvirt.home."; ddns-rev-域名"
pool {
range 172.16.50.21 172.16.50.190; deny members of “windows”; }zone wsvirt.home { primary 172.16.50.2; key “rndc-key”; }
zone 50.16.172.in-addr.arpa { primary 172.16.50.2; key “rndc-key”; }
}
<br />
AD DC addc1.ad.wsvirt.home
/etc/named.conf
選項 { 監聽埠 53 { 任何;}; 監聽 v6 埠 53 { ::1; }; 目錄“/var/named”;轉儲文件“/var/named/data/cache_dump.db”;統計文件“/var/named/data/named_stats.txt”;memstatistics-file "/var/named/data/named_mem_stats.txt"; 遞歸文件“/var/named/data/named.recursing”;secroots-file "/var/named/data/named.secroots"; 允許查詢{任何;}; 轉發器 { 172.16.50.2; 172.16.50.3;}; 僅轉發;遞歸是的;dnssec-啟用否;dnssec-驗證號;bindkeys-file "/etc/named.root.key"; 託管鍵目錄“/var/named/dynamic”;pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab"; 最小響應是的;}; ... 區“。” IN {類型提示;文件“named.ca”;}; 包括“/etc/rndc.key”;包括“/etc/named.rfc1912.zones”;包括“/etc/named.root.key”;包括“/var/lib/samba/bind-dns/named.conf”;
<br />
/etc/dhcp/dhcpd.conf
包括“/etc/rndc.key”; 預設租賃時間 600;最大租賃時間 7200;分秒 5;權威性; ddns-update-style 無; class "others" { match if substring (option vendor-class-identifier, 0, 8) != "MSFT 5.0"; } 子網 172.16.50.192 網路遮罩 255.255.255.192 { log (info, concat("Vendor Class ID (60): ", option vendor-class-identifier)); log (info, concat("DHCP Client ID (61): ", option dhcp-client-identifier)); log (info, concat("User Class ID (77): ", option user-class)); 選項路由器 172.16.50.1;選項廣播地址 172.16.50.255;預設租賃時間 600;最大租賃時間 7200;選項 ip-forwarding off; 忽略客戶端更新;選項 ntp-servers 172.16.50.193;選項域名伺服器 172.16.50.193;選項域名“ad.wsvirt.home”;選項域搜尋“ad.wsvirt.home”;選項 netbios-name-servers 172.16.50.193;選項 netbios-dd-server 172.16.50.193;選項 netbios 範圍“”;選項 netbios-node-type 8; ddns-rev-域名“ddns”;
pool { range 172.16.50.210 172.16.50.254; deny members of “others”; }
} 送出時 { set noname = concat("dhcp-", binary-to-ascii(10, 8, "-", leased-address)); 設置 ClientIP = binary-to-ascii(10, 8, ".", 租用地址); set ClientDHCID = concat ( suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":", suffix (concat ("0 ", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8 , "", substring(hardware,3,1))),2), ":", 後綴 (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1 ))),2), ":", 後綴 (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",後綴 (concat ("0", binary-to-ascii (16, 8, "", 子字元串(硬體,6,1))),2));設置客戶端名稱 = 選擇第一個值(選項主機名、配置選項主機名、客戶端名稱、無名);log(concat("Commit: IP: ", ClientIP, " DHCID: ", ClientDHCID, " Name: ", ClientName)); 執行("/usr/local/sbin/dhcp-dyndns.sh", "add", ClientIP, ClientDHCID, ClientName); } 發佈時 { 設置 ClientIP = binary-to-ascii(10, 8, ".", 租用地址); set ClientDHCID = concat ( suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":", suffix (concat ("0 ", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8 , "", substring(hardware,3,1))),2), ":", 後綴 (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1 ))),2), ":", 後綴 (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",後綴(concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2) );log(concat("發布:IP:", ClientIP)); 執行(“/usr/local/sbin/dhcp-dyndns.sh”,“刪除”,ClientIP,ClientDHCID);} 到期時 { 設置 ClientIP = binary-to-ascii(10, 8, ".", 租用地址); log(concat("過期:IP:", ClientIP)); 執行(“/usr/local/sbin/dhcp-dyndns.sh”,“刪除”,客戶端IP,“”,“0”);}
<br />
A DLZ revers zone 50.16.172.ddns on the AD DC
$ samba-tool dns 查詢 localhost 50.16.172.ddns @ALL 密碼 $$ administrator@AD.WSVIRT.HOME $$:名稱=,記錄=2,子項=0 SOA:序列=3,刷新=900,重試=600,過期=86400,minttl=3600,ns=addc1.ad.wsvirt.home.,電子郵件=hostmaster.ad。 wsvirt.home。(標誌=600000f0,序列=3,ttl=3600)NS:addc1.ad.wsvirt.home。(flags=600000f0, serial=1, ttl=3600) Name=193, Records=1, Children=0 PTR: addc1.ad.wsvirt.home (flags=f0, serial=3, ttl=900) Name=230, Records=1, Children=0 PTR: winxp-1.ad.wsvirt.home (flags=f0, serial=3, ttl=3600)
沒有得到
PTR
相同的答案是正常的,因為這controller.wsvirt.home.
不是兩個區域的權威名稱伺服器。聲明這flags: aa
是一個權威的答案,但對於193.50.16.172.ddns. IN PTR
. 因此,無法在此權威答案上發送。這不是一個真正的問題,因為這只會導致另一個查詢
193.50.16.172.ddns. IN PTR
,然後可以遞歸地回答。客戶應該意識到在有CNAME
答案的情況下會自動執行此操作。關於這一點,還有另一個問題,只有
addc1.ad.wsvirt.home.
zone50.16.172.ddns.
;你會得到一個NXDOMAIN
答案:dig 193.50.16.172.ddns. PTR @controller.wsvirt.home
被
controller.wsvirt.home.
配置為遞歸 (recursion yes;
),但它不知道這些地址可以在addc1.ad.wsvirt.home.
. 因此,它試圖將它們作為其他一切來解決:從forwarders { 8.8.8.8; 8.8.4.4; };
… 並且失敗。您可以在以下位置添加
addc1.ad.wsvirt.home.
作為轉發50.16.172.ddns.
器controller.wsvirt.home.
:zone "50.16.172.ddns." { type forward; forwarders { 172.16.50.193; }; };
最後,該區域
$ORIGIN 50.16.172.in-addr.arpa.
只能委派對其自己的子域的控制——而不是完全不相關的50.16.172.ddns.
.如果您仍然想
PTR
在相同的響應中發送,則需要50.16.172.ddns.
通過添加slave
區域(而不是forward
區域)來使該域具有權威性,例如zone "50.16.172.ddns." { type slave; file "50.16.172.ddns.db"; masters { 172.16.50.193; }; };
主伺服器 (
addc1.ad.wsvirt.home.
) 需要意識到這一點並允許從controller.wsvirt.home.
(並且controller2.wsvirt.home
,如果它應該採取類似的行為)進行區域傳輸:options { . . . allow-transfer { 172.16.50.2; 172.16.50.3; }; }
如果您要使用 MY 腳本,請正確使用它;-)
在 DC 上執行 Bind9 和 isc-dhcp,別無他法。看這裡:
https://wiki.samba.org/index.php/Setting_up_a_BIND_DNS_Server
https://wiki.samba.org/index.php/Configure_DHCP_to_update_DNS_records_with_BIND9
您的主要問題之一是您試圖將反向區域儲存在“平面文件”中,而 bind9_dlz 不適用於平面文件。