Route53 Private Hosted Zoneの名前解決ができないときのポイント
Contents
概要
- 今日は、Route 53 のプライベートホストゾーンにおいて、VPC内のサーバーから名前解決ができない場合にチェックする2つのポイントについてご紹介します。
- 先ず、Route 53 のプライベートホストゾーンとは、VPC内のサーバー間で名前解決を行うためのプライベートなDNS として使用できます。
Private Hosted Zoneが名前解決できないとき
VPCは関連付けされているか?
- VPC内のサーバーからプライベートホストゾーンに登録されているDNS名の名前解決ができないとき、プライベートホストゾーンにVPC が関連付けされているかを確認します。(複数のVPC がある場合、忘れがちなポイントです!)
- アカウント内に複数のVPC がある場合、プライベートホストゾーンに関連付けされているVPC からは名前解決できますが、他方のVPCではプライベートホストゾーンに関連付けされておらず、名前解決ができないことが考えられます。
VPCの設定はtrueになっているか?
- プライベートホストゾーンを使用する場合、VPC の下記設定をtrueに設定しなければいけません。
- enableDnsHostnames
- enableDnsSupport
- 上記の他に、外部のDNS とDNS名が重複している、Route 53 のサービス障害が起きているなど正常に名前解決ができない原因は考えられますが、多くのケースで上記2つのポイントがあてはまるかと思います。
nslookup、digコマンドでプライベートDNSに問い合わせ
- それでは、プライベートホストゾーンにVPC が関連付けされていないケースのコマンド実行結果を見てみましょう。
- 以下、VPC内のEC2 からnslookupコマンド、digコマンドでDNSに問い合わせた結果です。「NXDOMAIN」となり、レコードが見つからないことが分かります。
$ nslookup testserver.local
Server: 10.10.0.2
Address: 10.10.0.2#53
** server can't find testserver.local: NXDOMAIN
$ dig testserver.local
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.amzn2.0.2 <<>> testserver.local
;; 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: NXDOMAIN, id: 8333
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;testserver.local. IN A
;; Query time: 0 msec
;; SERVER: 10.10.0.2#53(10.10.0.2)
;; WHEN: 火 2月 04 03:27:45 UTC 2020
;; MSG SIZE rcvd: 50
$
- 次に、プライベートホストゾーンにVPC が関連付けされているケースのコマンド実行結果を見てみます。
- 以下、VPC内のEC2 からnslookupコマンド、digコマンドでDNSに問い合わせた結果です。「NOERROR」となり、正常な応答が得られたことが分かります。無事、名前解決ができました。
$ nslookup testserver.local
Server: 10.10.0.2
Address: 10.10.0.2#53
Non-authoritative answer:
Name: testserver.local
Address: 10.10.0.100
$ dig testserver.local
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.amzn2.0.2 <<>> testserver.local
;; 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: 16230
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;testserver.local. IN A
;; ANSWER SECTION:
testserver.local. 289 IN A 10.10.0.100
;; Query time: 0 msec
;; SERVER: 10.10.0.2#53(10.10.0.2)
;; WHEN: 火 2月 04 03:31:11 UTC 2020
;; MSG SIZE rcvd: 66
$