私のテストではKVM labに仮想ネットワーク172.16.50/24
があります。このネットワークでは、Bind 9とISC DHCPサーバーを実行する2つのCentos 7 VMがあります。
controller.wsvirt.home (172.16.50.2)
controller2.wsvirt.home (172.16.50.3)
ネットワーク内のすべてのクライアントはLinux VMであり、すべてのクライアントがDHCPサーバーからネットワーク構成を取得します。このサーバーはDNSゾーンを動的に更新します。
Bind 9は、wsvirt.home
ゾーンの権威サーバーです。
ラボ環境で、ビジネスオフィスネットワークに実装する必要のあるシナリオをテストします。ビジネス環境では、Windowsクライアントにサービスを提供するADドメインを作成する必要があります。この目的のために、Samba 4をDCとして使用することにしました。ソースからHeimdal KerberosをサポートするCentos 7用のSambaサーバーを構築しました。
ADには、サブネットワーク172.16.50.192/26
を割り当て、ad.wsvirt.home
ドメインを割り当てました。
AD DCはCentos 7ですVM Samba 4、Bind 9およびISC DHCPサーバーを実行しています。SambaはBIND_DLZをDNSバックエンドとして使用します。ADコントローラーはaddc1.ad.wsvirt.home
ドメイン名とIP 172.16.50.193
。
すべてのWindows ADクライアントは、ADで実行されているDHCPサーバーからIPを取得しますDCこれにより、バインドDLZゾーンが動的に更新されます。
実際に機能する物理環境では、両方のネットワークのすべてのクライアントPCを1つのブロードキャストドメインに接続する必要があります。
要件を満たすために、ad.wsvirt.home
サーバーのバインドからADコントローラー172.16.50.192/26
へのフォワードcontroller.wsvirt.home
およびリバースaddc1.ad.wsvirt.home
DNSゾーンの権限を委任しました 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
ドメインの逆ドメイン名を解決できるようにするには、ad.wsvirt.home
ドメインのLinuxクライアントが必要です。まったく可能ですか?
より正確に言うと、両方のサーバーの構成ファイルをここに配置します
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;
};
$Origin .
$TTL 86400 ; 1 day
50.16.172.in-addr.arpa IN SOA controller.wsvirt.home. root.wsvirt.home. (
153 ; serial
3600 ; refresh (1 hour)
1800 ; retry (30 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS controller.wsvirt.home.
NS controller2.wsvirt.home.
$Origin 50.16.172.in-addr.arpa.
2 PTR controller.wsvirt.home.
$TTL 86400 ; 1 day
3 PTR controller2.wsvirt.home.
...
;
50.16.172.ddns. IN NS addc1.ad.wsvirt.home.
$GENERATE 193-254 $ IN CNAME $.50.16.172.ddns.
include "/etc/rndc.key";
default-lease-time 600;
max-lease-time 7200;
authoritative;
ddns-update-style interim;
class "windows" {
match if substring (option vendor-class-identifier, 0, 8) = "MSFT 5.0";
}
subnet 172.16.50.0 netmask 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));
option domain-name-servers 172.16.50.2, 172.16.50.3;
option ntp-servers 172.16.50.2;
option routers 172.16.50.1;
option broadcast-address 172.16.50.255;
default-lease-time 600;
max-lease-time 7200;
option ip-forwarding off;
ignore client-updates;
option domain-name "wsvirt.home";
option domain-search "wsvirt.home";
option netbios-scope "";
option netbios-node-type 8;
option netbios-name-servers 172.16.50.2;
option netbios-dd-server 172.16.50.2;
ddns-updates on;
ddns-domainname "wsvirt.home.";
ddns-rev-domainname "in-addr.arpa.";
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";
}
}
options {
listen-on port 53 { any; };
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 { any; };
forwarders { 172.16.50.2; 172.16.50.3; };
forward only;
recursion yes;
dnssec-enable no;
dnssec-validation no;
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";
minimal-responses yes;
};
...
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/rndc.key";
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/var/lib/samba/bind-dns/named.conf";
include "/etc/rndc.key";
default-lease-time 600;
max-lease-time 7200;
min-secs 5;
authoritative;
ddns-update-style none;
class "others" {
match if substring (option vendor-class-identifier, 0, 8) != "MSFT 5.0";
}
subnet 172.16.50.192 netmask 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));
option routers 172.16.50.1;
option broadcast-address 172.16.50.255;
default-lease-time 600;
max-lease-time 7200;
option ip-forwarding off;
ignore client-updates;
option ntp-servers 172.16.50.193;
option domain-name-servers 172.16.50.193;
option domain-name "ad.wsvirt.home";
option domain-search "ad.wsvirt.home";
option netbios-name-servers 172.16.50.193;
option netbios-dd-server 172.16.50.193;
option netbios-scope "";
option netbios-node-type 8;
ddns-rev-domainname "ddns";
pool {
range 172.16.50.210 172.16.50.254;
deny members of "others";
}
}
on commit {
set noname = concat("dhcp-", binary-to-ascii(10, 8, "-", leased-address));
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
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), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2)
);
set ClientName = pick-first-value(option Host-name, config-option-Host-name, client-name, noname);
log(concat("Commit: IP: ", ClientIP, " DHCID: ", ClientDHCID, " Name: ", ClientName));
execute("/usr/local/sbin/dhcp-dyndns.sh", "add", ClientIP, ClientDHCID, ClientName);
}
on release {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
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), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":",
suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2)
);
log(concat("Release: IP: ", ClientIP));
execute("/usr/local/sbin/dhcp-dyndns.sh", "delete", ClientIP, ClientDHCID);
}
on expiry {
set ClientIP = binary-to-ascii(10, 8, ".", leased-address);
log(concat("Expired: IP: ", ClientIP));
execute("/usr/local/sbin/dhcp-dyndns.sh", "delete", ClientIP, "", "0");
}
$ samba-tool dns query localhost 50.16.172.ddns @ ALL
Password for [[email protected]]:
Name=, Records=2, Children=0
SOA: serial=3, refresh=900, retry=600, expire=86400, minttl=3600, ns=addc1.ad.wsvirt.home., email=hostmaster.ad.wsvirt.home. (flags=600000f0, serial=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)
最後に、問題の根本を発見しました。ポイントは、Bind 9がフォワーダーとして機能するときにDNSSEC署名を取り除くことです。私はそれを知っていたので、サーバーのnamed.conf
でaddc1.ad.wsvirt.home
回避策として次のオプションを設定しました。
dnssec-enable no;
dnssec-validation no;
しかし、controller.wsvirt.home
で同じことをするのを忘れていたので、今では私の見落としを修正し、すべてがうまく機能しています。そして明らかに50.16.172.ddns
のゾーンセクションはaddc1.ad.wsvirt.home
サーバーのBindの設定ファイルにある必要があります:
zone "50.16.172.ddns." {
type forward;
forwarders { 172.16.50.193; };
};
controller.wsvirt.home.
はauthoritativeのネームサーバーではないため、同じ答えでPTR
を取得しないのは正常です両方のゾーン。 flags: aa
には、これは信頼できる回答であると記載されていますが、193.50.16.172.ddns. IN PTR
には当てはまりません。したがって、この信頼できる回答では送信できません。
これは193.50.16.172.ddns. IN PTR
に対する別のクエリを引き起こすだけなので、実際には問題ではありません。クエリは再帰的に応答できます。 CNAME
回答の場合、クライアントはこれを自動的に行うことに注意する必要があります。
それに関して、addc1.ad.wsvirt.home.
だけがゾーン50.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
を送信したい場合は、slave
ゾーンを追加して、forward
ゾーンを追加することにより、このドメインを50.16.172.ddns.
に対して権限を持つようにする必要があります。 ] _ゾーン)、例えば.
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
主な問題の1つは、リバースゾーンを「フラットファイル」に保存しようとしていて、bind9_dlzがフラットファイルで機能しないことです。
Esa Jokinenの提案に従って、私は次のことを行いました。
controller.wsvirt.homeの/etc/named.conf
で、50.16.172.ddns
のゾーンセクションを作成しました。
zone "50.16.172.ddns." {
type slave;
file "slaves/50.16.172.ddns.db";
masters { 172.16.50.193; };
};
ゾーンファイル/var/named/50.16.172.db
で、50.16.172.ddns
ゾーンを委任する行をコメント化しました。
;50.16.172.ddns. IN NS addc1.ad.wsvirt.home.
;$GENERATE 193-254 $ IN CNAME $.50.16.172.ddns.
addc1.ad.wsvirt.home。の/etc/named.conf
:
options {
. . .
allow-transfer { 172.16.50.2; 172.16.50.3; };
}
その結果、私はゾーン50.16.172.ddns
に対する権限を持っていますが、リバース名がまったく解決されなかった:
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: NXDOMAIN, id: 30147
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;193.50.16.172.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
50.16.172.in-addr.arpa. 10800 IN SOA controller.wsvirt.home. root.wsvirt.home. 154 3600 1800 604800 86400
;; Query time: 5 msec
;; SERVER: 172.16.50.193#53(172.16.50.193)
;; WHEN: Wed Apr 01 17:20:44 IDT 2020
;; MSG SIZE rcvd: 118
$ Dig -x 172.16.50.193
; <<>> Dig 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> -x 172.16.50.193
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 62725
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;193.50.16.172.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
50.16.172.in-addr.arpa. 86400 IN SOA controller.wsvirt.home. root.wsvirt.home. 154 3600 1800 604800 86400
;; Query time: 0 msec
;; SERVER: 172.16.50.2#53(172.16.50.2)
;; WHEN: Wed Apr 01 17:20:56 IDT 2020
;; MSG SIZE rcvd: 118