DNSコンテンツサーバとして、内部向けに公開したいゾーン情報と、外部向けに公開したいゾーン情報を一つのサーバで構築しDNSキャッシュサーバとしての機能も持たせる設定を紹介する後編です。前編をご覧になりたい方はこちらより確認ください。
内部向け、外部向けのそれぞれのゾーンファイルの作成
まず、内部向けゾーンファイルの作成です。
ファイル名は、/var/named/master/hogehoge.local です。
具体的なファイルの中身は下記のようになります。
ORIGIN .
$TTL 3600 ; 1 hours
hogehoge.local IN SOA vhost01.hogehoge.local. info.hogehoge.local. (
2023051401 ; serial
21600 ; refresh (6 hours)
7200 ; retry (2 hours)
1209600 ; expire (2 weeks)
86400 ; minimum (1 day)
)
NS vhost01.hogehoge.local.
NS vhost02.hogehoge.local.
A 192.168.200.11
MX 10 vhost01.hogehoge.local.
IN TXT "v=spf1 +ip4:192.168.200.0/24 ~all"
$ORIGIN hogehoge.local.
vhost01 A 192.168.200.11
vhost02 A 192.168.200.12
次に、外部向けのゾーンファイルです。
ファイル名は、/var/named/master/hogehoge.jp です。
具体的なファイルの中身は下記のようになります。
$ORIGIN .
$TTL 3600 ; 1hours
hogehoge.jp IN SOA vhost01.hogehoge.jp. info.hogehoge.jp. (
2023051401 ; serial
21600 ; refresh (6 hours)
7200 ; retry (2 hours)
1209600 ; expire (2 weeks)
86400 ; minimum (1 day)
)
NS vhost01.hogehoge.jp.
NS vhost02.hogehoge.jp.
A 192.168.0.1
MX 10 vhost01.hogehoge.jp.
IN TXT "v=spf1 +ip4:192.168.0.0/24 ~all"
$ORIGIN hogehoge.jp.
vhost01 A 192.168.0.23
vhost02 A 192.168.0.25
設定したDNSサーバの様々な位置からの動作確認
先ほど設定した、設定ファイルの読み込みを実施します。
# rndc reconfig
まず、内部向けゾーンの内容を確認します。
[root@vhost01 ~]# dig @localhost vhost01.hogehoge.local
; <<>> DiG 9.11.36-RedHat-9.11.36-5.el8_7.2 <<>> @localhost vhost01.hogehoge.local
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22935
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 97ba0981cad2598796c3de9964662563a9912687449576f3 (good)
;; QUESTION SECTION:
;vhost01.hogehoge.local. IN A
;; ANSWER SECTION:
vhost01.hogehoge.local. 10800 IN A 192.168.200.11
;; AUTHORITY SECTION:
hogehoge.local. 10800 IN NS vhost02.hogehoge.local.
hogehoge.local. 10800 IN NS vhost01.hogehoge.local.
;; ADDITIONAL SECTION:
vhost02.hogehoge.local. 10800 IN A 192.168.200.12
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: 木 5月 18 22:17:23 JST 2023
;; MSG SIZE rcvd: 147
vhost01.hogehoge.localは、192.168.200.11 ですよ、と返ってきています。
次に外部向けのゾーンファイルの動作を確認します。
[root@vhost01 ~]# dig @localhost vhost01.hogehoge.jp
; <<>> DiG 9.11.36-RedHat-9.11.36-5.el8_7.2 <<>> @localhost vhost01.hogehoge.jp
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 44957
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: ed8485f38f2d4afac2e07d30646625f2a2bda7e976cfb6b9 (good)
;; QUESTION SECTION:
;vhost01.hogehoge.jp. IN A
;; AUTHORITY SECTION:
hogehoge.jp. 300 IN SOA ns1-08.azure-dns.com. azuredns-hostmaster.microsoft.com. 1 3600 300 2419200 300
;; Query time: 98 msec
;; SERVER: ::1#53(::1)
;; WHEN: 木 5月 18 22:19:46 JST 2023
;; MSG SIZE rcvd: 162
vhost01.hogehoge.jpは、値が返ってきませんでした。
理由がわかりますか?
注視頂きたい点は、digコマンドの@localhost の部分です。localhostは、acl で naibu に属すると /etc/named.confに定義しています。internal の view に hogehoge.jp のゾーンファイルがないので、回答ができないのです。(厳密には、再帰問い合わせを許可しているので、whoisに登録されていれば、ぐるっとインターネット(rootドメイン)経由で名前解決可能です。ここではテスト環境なのでNGとなります)
そこで、外部のIPアドレス(192.168.0.0/24)からdigコマンドを実行します。
同セグメントに存在するセカンダリのサーバから動作を確認してみます。
[root@vhost02 ~]# dig @192.168.0.23 vhost01.hogehoge.jp
; <<>> DiG 9.11.36-RedHat-9.11.36-5.el8_7.2 <<>> @192.168.0.23 vhost01.hogehoge.jp
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28498
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 33c14a6eb5a9bf4ae4a3a8ec6466295adf148723e231f755 (good)
;; QUESTION SECTION:
;vhost01.hogehoge.jp. IN A
;; ANSWER SECTION:
vhost01.hogehoge.jp. 10800 IN A 192.168.0.23
;; AUTHORITY SECTION:
hogehoge.jp. 10800 IN NS vhost02.hogehoge.jp.
hogehoge.jp. 10800 IN NS vhost01.hogehoge.jp.
;; ADDITIONAL SECTION:
vhost02.hogehoge.jp. 10800 IN A 192.168.0.25
;; Query time: 1 msec
;; SERVER: 192.168.0.23#53(192.168.0.23)
;; WHEN: 木 5月 18 22:34:18 JST 2023
;; MSG SIZE rcvd: 144
問題なく応答がありました。ANSWER SECTIONにて 192.168.0.23が返ってきています。
逆に内部向けのゾーン情報はどうでしょうか?
[root@vhost02 ~]# dig @192.168.0.23 vhost01.hogehoge.local
; <<>> DiG 9.11.36-RedHat-9.11.36-5.el8_7.2 <<>> @192.168.0.23 vhost01.hogehoge.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 32489
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 2820f14db74452132ffcfaaf64662a1b48a1cc82f9743670 (good)
;; QUESTION SECTION:
;vhost01.hogehoge.local. IN A
;; Query time: 0 msec
;; SERVER: 192.168.0.23#53(192.168.0.23)
;; WHEN: 木 5月 18 22:37:31 JST 2023
;; MSG SIZE rcvd: 79
[root@vhost02 ~]#
[root@vhost02 ~]#
[root@vhost02 ~]# dig @192.168.200.11 vhost01.hogehoge.local
; <<>> DiG 9.11.36-RedHat-9.11.36-5.el8_7.2 <<>> @192.168.200.11 vhost01.hogehoge.local
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49623
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 32b26cf4fd5a630acc5183d564662ad42f3c856c9797d5f2 (good)
;; QUESTION SECTION:
;vhost01.hogehoge.local. IN A
;; ANSWER SECTION:
vhost01.hogehoge.local. 10800 IN A 192.168.200.11
;; AUTHORITY SECTION:
hogehoge.local. 10800 IN NS vhost01.hogehoge.local.
hogehoge.local. 10800 IN NS vhost02.hogehoge.local.
;; ADDITIONAL SECTION:
vhost02.hogehoge.local. 10800 IN A 192.168.200.12
;; Query time: 1 msec
;; SERVER: 192.168.200.11#53(192.168.200.11)
;; WHEN: 木 5月 18 22:40:36 JST 2023
;; MSG SIZE rcvd: 147
[root@vhost02 ~]#
予想通りダメでした。@の後を内部用IP(192.168.200.11)にすれば正常な応答があることが確認できます。
いかがでしたでしょうか。ちなみにログ(/var/named/chroot/var/log/query.log)にも内部(intarnal)の問い合わせか、外部(external)の問い合わせか出力されているので確認してみてください。
digコマンドの結果で表示されているパラメータの意味を詳しく知りたい場合は、bindのクエリログに表記されている内容と意味を確認するをご確認ください。
今回はここまでです。最後までお読みいただきありがとうございました。