DNS の仕組みと、部分的または断続的な DNS 障害をトラブルシューティングする方法を教えてください。
最終更新日: 2022 年 4 月 11 日
DNS の仕組みと、部分的または断続的な DNS 障害をトラブルシューティングする方法を教えてください。
解決方法
DNS の概要
DNS は、覚えやすい名前 (www.example.com など) を 192.0.2.1 などの数値の IP アドレスに変換することで、ユーザーをインターネットアプリケーションにルーティングします。このプロセスは「DNS 解決」と呼ばれます。 権威ネームサーバーは、ドメイン名を IP アドレスまたは複数の IP アドレスに解決し、その IP アドレスを DNS リゾルバーのチェーンを介してクライアント (ウェブサイトの閲覧をリクエストしているユーザーのコンピュータなど) に渡します。クライアントはその IP アドレスを使用して、ウェブサイトがホストされているサーバーに接続します。DNS が正しく機能しない場合、DNS サーバーはドメイン名を解決できません。そのため、DNS サーバーは、ウェブサイトがホストされているサーバーの IP アドレスをクライアントに提供できません。つまり、これらのウェブサイトにインターネットからアクセスすることができません。
詳細については、「DNS とは」を参照してください。
部分的、一時的、または断続的な DNS 障害のシナリオ
場合によっては、クライアントで DNS 障害が短時間または断続的に発生することがあります。部分的な DNS 障害を引き起こす可能性がある一般的なシナリオを次に示します。
シナリオ 1: レジストラのネームサーバーの設定が正しくない
レジストラで 1 つ以上のネームサーバーが正しく設定されていないことがあります。「whois」ルックアップは、ドメインのレジストラに設定されているネームサーバーを提供します。この場合、DNS 解決中に、登録されたネームサーバーが応答しない場合、または予期しない情報で応答する場合、ローカルリゾルバーは SERVFAIL メッセージを返します。ただし、場合によっては、ローカルリゾルバーが別のネームサーバーでリクエストを試行し、その結果を返すことがあります。
さらに、ローカルリゾルバーは TTL 時間中に正しくないネームサーバーをキャッシュし、誤って設定されたネームサーバーに次のクエリを送信する可能性があります。
シナリオ 2: ホストゾーンでネームサーバーが変更された
部分的な DNS 障害が発生する別の理由として、ドメインの NS レコードがホストゾーンで誤って設定されていることが挙げられます。この場合、既存のネームサーバーが更新されたか、NS レコードの値にネームサーバーがさらに追加されています。
この場合、リゾルバーが正しくないネームサーバーを使用してドメインを解決しようとすると、一部のクライアントで部分的な DNS 障害が発生する可能性があります。
シナリオ 3: クライアントの DNS リゾルバーがドメインを解決できない
クライアントがリゾルバー設定ファイルにカスタムまたは正しくないリゾルバーを設定することがあります (Linux での resolv.conf など)。この場合、Amazon Virtual Private Cloud (Amazon VPC) 内の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスからドメインを解決する場合、EC2 インスタンスは resolv.conf で定義されているネームサーバーを使用します。
シナリオ 4: Amazon が提供する DNS サーバーが DNS クエリをスロットリングする
Amazon が提供する DNS サーバーは、Elastic Network Interface ごとに 1 秒あたり 1024 パケットの制限を適用します。Amazon が提供する DNS サーバーは、この制限を超えたトラフィックをすべて拒否します。DNS スロットリングにより、DNS が断続的にタイムアウトします。この問題を解決するには、インスタンスでキャッシュをオンにするか、アプリケーションで DNS 再試行タイマーを延長します。
シナリオ 5: ドメイン URL はインターネットから解決されるが、EC2 インスタンスからは解決されない
次の操作を実行した場合、ドメインの DNS クエリは常にプライベートホストゾーンから解決されます。
- ドメインと同じ名前のプライベートホストゾーンを作成した。
- AmazonProvidedDNS で設定したプライベートホストゾーンおよび VPC DHCP オプションに VPC を関連付けた。
ドメインのクエリされたレコードがプライベートホストゾーンに存在しない場合、DNS クエリは失敗し、パブリックドメインに転送されません。DNS レコードはパブリックドメインゾーンに存在するため、インターネットから解決されます。
Linux ベースのオペレーティングシステムでの DNS 障害をトラブルシューティングする
dig コマンドを使用して、ホストの /etc/resolv.conf ファイルで設定されているクライアント DNS サーバーに対してルックアップを実行します。
$ dig www.amazon.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> www.amazon.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13150
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.amazon.com. IN A
;; ANSWER SECTION:
www.amazon.com. 41 IN A 54.239.17.6
;; Query time: 1 msec
;; SERVER: 10.108.0.2#53(10.108.0.2)
;; WHEN: Fri Oct 21 21:43:11 2016
;; MSG SIZE rcvd: 48
上記の例では、54.239.17.6 が www.amazon.com の HTTP サーバーの IP アドレスであることが回答セクションに示されています。
+trace 変数を追加すると、dig コマンドは次の例に示すように DNS レコードの再帰的なルックアップも実行できます。
$ dig +trace www.amazon.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> +trace www.amazon.com
;; global options: +cmd
. 518400 IN NS J.ROOT-SERVERS.NET.
. 518400 IN NS K.ROOT-SERVERS.NET.
. 518400 IN NS L.ROOT-SERVERS.NET.
…
;; Received 508 bytes from 10.108.0.2#53(10.108.0.2) in 31 ms
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
…
;; Received 492 bytes from 193.0.14.129#53(193.0.14.129) in 93 ms
amazon.com. 172800 IN NS pdns1.ultradns.net.
amazon.com. 172800 IN NS pdns6.ultradns.co.uk.
…
;; Received 289 bytes from 192.33.14.30#53(192.33.14.30) in 201 ms
www.amazon.com. 900 IN NS ns-1019.awsdns-63.net.
www.amazon.com. 900 IN NS ns-1568.awsdns-04.co.uk.
www.amazon.com. 900 IN NS ns-277.awsdns-34.com.
…
;; Received 170 bytes from 204.74.108.1#53(204.74.108.1) in 87 ms
www.amazon.com. 60 IN A 54.239.26.128
www.amazon.com. 1800 IN NS ns-1019.awsdns-63.net.
www.amazon.com. 1800 IN NS ns-1178.awsdns-19.org.
…
;; Received 186 bytes from 205.251.195.251#53(205.251.195.251) in 7 ms
次の例に示すように、ネームサーバーだけを返すクエリを実行することもできます。
$ dig -t NS www.amazon.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> -t NS www.amazon.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48631
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.amazon.com. IN NS
;; ANSWER SECTION:
www.amazon.com. 490 IN NS ns-1019.awsdns-63.net.
www.amazon.com. 490 IN NS ns-1178.awsdns-19.org.
www.amazon.com. 490 IN NS ns-1568.awsdns-04.co.uk.
www.amazon.com. 490 IN NS ns-277.awsdns-34.com.
;; Query time: 0 msec
;; SERVER: 10.108.0.2#53(10.108.0.2)
;; WHEN: Fri Oct 21 21:48:20 2016
;; MSG SIZE rcvd: 170
前の例では、www.amazon.com には次の 4 つの権威ネームサーバーがあります。
- ns-1019.awsdns-63.net.
- ns-1178.awsdns-19.org.
- ns-1568.awsdns-04.co.uk.
- ns-277.awsdns-34.com.
これらの 4 つのサーバーはいずれも、www.amazon.com のホスト名に関する質問について、権威ある回答を提供します。dig コマンドを使用して、特定のネームサーバーを直接ターゲットにします。特定のドメインのすべての権威ネームサーバーが正しく応答するかどうかを確認します。
www.amazon.com に対するクエリの出力例を次に示します (権威ネームサーバー (ns-1019.awsdns-63.net) の 1 つに対するもの)。サーバーの応答は、www.amazon.com が 54.239.25.192 で利用可能であることを示しています。
$ dig www.amazon.com @ns-1019.awsdns-63.net.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.49.amzn1 <<>> www.amazon.com @ns-1019.awsdns-63.net.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31712
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;www.amazon.com. IN A
;; ANSWER SECTION:
www.amazon.com. 60 IN A 54.239.25.192
;; AUTHORITY SECTION:
www.amazon.com. 1800 IN NS ns-1019.awsdns-63.net.
www.amazon.com. 1800 IN NS ns-1178.awsdns-19.org.
www.amazon.com. 1800 IN NS ns-1568.awsdns-04.co.uk.
…
;; Query time: 7 msec
;; SERVER: 205.251.195.251#53(205.251.195.251)
;; WHEN: Fri Oct 21 21:50:00 2016
;; MSG SIZE rcvd: 186
次の行は、ns-576.awsdns-08.net が amazon.com の権威ネームサーバーであることを示しています。
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0
aa フラグの存在は、ネームサーバー ns-1019.awsdns-63.net がリソースレコード www.amazon.com に対する権威ある回答を与えたことを示します。
Windows ベースのオペレーティングシステムでの DNS 障害をトラブルシューティングする
次の例に示すように、nslookup ユーティリティを使用して、ホスト名に関連付けられている IP アドレスを返します。
C:\>nslookup www.amazon.com
Server: ip-10-20-0-2.ec2.internal
Address: 10.20.0.2
Non-authoritative answer:
Name: www.amazon.com
Address: 54.239.25.192
nslookup ユーティリティを使用してホスト名に対する権威ネームサーバーを特定するには、-type=NS フラグを使用します。
C:\>nslookup -type=NS www.amazon.com
Server: ip-10-20-0-2.ec2.internal
Address: 10.20.0.2
Non-authoritative answer:
www.amazon.com nameserver = ns-277.awsdns-34.com
www.amazon.com nameserver = ns-1019.awsdns-63.net
www.amazon.com nameserver = ns-1178.awsdns-19.org
…
www.amazon.com に対する ns-277.awsdns-34.com が www.amazon.com に対するリクエストに正しく応答するか確認するには、次の構文を使用します。
C:\>nslookup www.amazon.com ns-277.awsdns-34.com
Server: UnKnown
Address: 205.251.193.21
Name: www.amazon.com
Address: 54.239.25.200