Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Route 53 プライベートホストゾーンでの DNS 解決に関する問題をトラブルシューティングする方法を教えてください。
Amazon Route 53 プライベートホストゾーンでの DNS 解決に関する問題をトラブルシューティングしたいと考えています。
簡単な説明
プライベートホストゾーンでの DNS に関する問題を解決するには、Amazon Virtual Private Cloud (Amazon VPC) の設定、ゾーンの関連付け、DNS サーバーの設定を確認してください。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
VPC の DNS サポートを確認する
プライベートホストゾーンのレコードを解決できるようにするには、次の手順を実行します。
- Amazon VPC で DNS サポートを有効にします。
- VPC で DNSSupport と DNSHostnames が True に設定されていることを確認します。詳細については、「VPC の DNS 属性を確認、更新する」を参照してください。
VPC ID の関連付けが適切かどうかを確認する
正しい VPC ID がプライベートホストゾーンに関連付けられていることを確認します。さらに、同じ VPC 内からドメインのリソースレコードをクエリしていることを確認してください。
プライベートホストゾーンを VPC に関連付ける場合:
- Route 53 リゾルバーは自動定義ルールを作成し、そのルールを VPC に関連付けます。
- VPC 内のリソースは、リゾルバーにクエリを実行すると、プライベートホストゾーンの DNS レコードを解決できます。
ホストゾーンに関連付けられた VPC を一覧表示するには、AWS CLI で次のコマンドを実行します。
aws route53 get-hosted-zone --id VPC_ID
注: ** VPC_ID** を適切な値に置き換えてください。
特定の VPC に関連付けられたプライベートホストゾーンを一覧表示するには、AWS CLI で次のコマンドを実行します。
aws route53 list-hosted-zones-by-vpc --vpc-id VPC_ID --vpc-region REGION_ID
注: HOSTED_ZONE_ID、VPC_ID、REGION_ID を適切な値に置き換えてください。
カスタム DNS サーバー設定を確認する
VPC において、DNS の DHCP オプションでカスタム DNS サーバーまたは Active Directory サーバーを設定した場合は、次の項目を確認してください。
- 転送ルール: サーバーは、プライベートドメインの DNS クエリを VPC の DNS サーバー IP アドレスに転送すること。
- ドメイン設定: カスタムサーバーのドメインは、プライベートホストゾーンとは別のものであること。
たとえば、VPC のプライマリ CIDR 範囲が 172.31.0.0/16 の場合、VPC DNS サーバーの IP アドレスは 172.31.0.2 です。これは Amazon VPC ネットワークの範囲に 2 を加えたものです。
リゾルバーの構成設定を確認する
DNS 解決または応答が断続的に発生する場合は、ソースインスタンスの Resolver 構成設定を確認してください。
- Linux インスタンスでは、cat /etc/resolv.conf および cat/etc/hosts ファイルを使用してください。
- macOS の場合は、macOS ユーザーガイドの「Macでの DNS 設定の変更」を参照してください。
- Windows の場合は、次の手順を実行してください。
[設定] を選択し、[ネットワークとインターネット] を選択します。
[ネットワークの詳細設定] で [アダプター設定の変更] を選択します。
ネットワーク接続を右クリックし、[プロパティ] を選択します。
[IPv4 のプロパティ] を選択し、[DNS サーバーアドレス] に優先 DNS IP アドレスを入力します。
たとえば、resolv.conf を設定した場合は、rotate オプションを使用すると、Amazon DNS と Google DNS (8.8.8.8) の間でクエリの負荷を分散できます。**resolv.conf ** ファイルの例を次に示します。
options rotate; generated by /usr/sbin/dhclient-script nameserver 8.8.8.8 nameserver 172.31.0.2
パブリック Google DNS (8.8.8.8) への最初のクエリでは、想定通りの NXdomain 応答が得られます。リゾルバーは、プライベートホストゾーンではなくパブリックホストゾーンから応答を得ようとします。
Private hosted Zone Record - resolvconf.local [ec2-user@ip-172-31-253-89 etc]$ curl -vks http://resolvconf.local* Rebuilt URL to: http://resolvconf.local/ * Could not resolve host: resolvconf.local 15:24:58.553320 IP ip-172-31-253-89.ap-southeast-2.compute.internal.40043 > dns.google.domain: 65053+ A? resolvconf.local. (34) 15:24:58.554814 IP dns.google.domain > ip-172-31-253-89.ap-southeast-2.compute.internal.40043: 65053 NXDomain 0/1/0 (109)
ただし、2 回目のクエリは正常に解決されます。2 回目のクエリは、プライベートホストゾーンに関連付けられた VPC DNS リゾルバーに到達します。
[ec2-user@ip-172-31-253-89 etc]$ curl -vks http://resolvconf.local* Rebuilt URL to: http://resolvconf.local/* Trying 1.1.1.1... * TCP_NODELAY set * Connected to resolvconf.local (1.1.1.1) port 80 (#0) 15:25:00.224761 IP ip-172-31-253-89.ap-southeast-2.compute.internal.51578 > 172.31.0.2.domain: 7806+ A? resolvconf.local. (34) 15:25:00.226527 IP 172.31.0.2.domain > ip-172-31-253-89.ap-southeast-2.compute.internal.51578: 7806 1/0/0 A 1.1.1.1 (50)
プライベートホストゾーンに重複した名前空間が存在しないことを確認する
複数のゾーンに重複する名前空間が存在する場合:
- リゾルバーは、最も具体的な一致に基づいてトラフィックをルーティングします。
- 一致するゾーンは存在するものの、一致するレコードがない場合は、Resolver は NXDOMAIN を返します。
DNS を正常に解決するために、最も具体的なプライベートホストゾーンにおいて、正しいレコードを設定したことを確認してください。
次のレコードを含む、2 個のプライベートホストゾーンが存在する例を次に示します。
| プライベートホストゾーン | レコード名 | 値 |
| local | overlap.privatevpc.local | 60.1.1.1 |
| privatevpc.local | overlap.privatevpc.local | 50.1.1.1 |
その場合、最も具体的に一致するプライベートホストゾーンから、次のクエリ結果が得られます。
[ec2-user@IAD-BAS-INSTANCE ~]$ dig overlap.privatevpc.local +short 50.1.1.1
プライベートホストゾーンにゾーン/サブドメイン委任がないか確認する
プライベートホストゾーンはゾーン/サブドメイン委任をサポートしていません。親ドメインのプライベートホストゾーンにおいて、サブドメインにネームサーバー (NS) レコードが設定されていないことを確認します。委任が設定されている場合、クライアントには、VPC リゾルバーから「SERVFAIL」応答が返されます。
SERVFAIL を引き起こす委任設定の例を次に示します。
- プライベートホストゾーン: abc.com
- 委任 NS レコード: kc.abc.com
- リソースレコード: test.kc.abc.com
[ec2-user@ip-172-31-0-8 ~]$ dig test.kc.abc.com ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 63414 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;test.kc.abc.com IN A ;; Query time: 15 msec ;; SERVER: 172.31.0.2#53(172.31.0.2) ;; WHEN: Fri Apr 16 15:57:37 2021 ;; MSG SIZE rcvd: 48
ルーティングポリシーのサポートを確認する
プライベートホストゾーンのリソースレコードには、サポートされているルーティングポリシーが設定されていることを確認してください。詳細については、「プライベートホストゾーンのレコードでサポートされるルーティングポリシー」を参照してください。
Resolver ルールとアウトバウンド Resolver エンドポイントの使用状況を確認する
アウトバウンドエンドポイントで Resolver を使用していることを確認してください。次の場合に、Resolver ルールが優先されます。
- プライベートホストゾーンのドメインのネットワークには、トラフィックをルーティングする Resolver ルールが存在する場合。
- プライベートホストゾーンにも関連付けられた、同一の VPC 内に関連付けられた Resolver ルールが存在する場合。
詳細については、「VPC とネットワーク間の DNS クエリを解決する」を参照してください。
クエリループを防止する
ループの発生を防ぐために、次の手順を実行してください。
- VPC のインバウンドエンドポイントを指す Resolver 転送ルールには、ターゲット IP アドレスを作成しないでください。
- エンドポイントをプライベートホストゾーンに関連付けないでください。
- 同じ Resolver ルールを VPC に関連付けないでください。
クエリループの例:
ubuntu@ip-172-32-254-37:~$ dig overlap.privatevpc.local ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 9007 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;overlap.privatevpc.local. IN A ;; Query time: 2941 msec ;; SERVER: 172.32.0.2#53(172.32.0.2)
この問題を解決してループを中断するには、ルールとのハブ VPC の関連付けを削除してください。正常な応答の例:
ubuntu@ip-172-32-254-37:~$ dig overlap.privatevpc.local ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58606 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;overlap.privatevpc.local. IN A ;; ANSWER SECTION: overlap.privatevpc.local. 0 IN A 50.1.1.1 ;; Query time: 5 msec ;; SERVER: 172.32.0.2#53(172.32.0.2)
オンプレミス Resolver が再帰リクエストを送信することを確認する
オンプレミスから Route 53 Resolver へのクエリ:
- Resolver のインバウンドエンドポイントを使用して DNS クエリを転送します。
- オンプレミスの Resolver は、反復的ではなく、再帰的なクエリを送信することを確認してください。
解決の種類を確認するには、次の手順を実行します。
- オンプレミスの DNS Resolver でパケットキャプチャを使用します。
- DNS フラグを確認します (recursion desired (RD) = 0)。
- +norecurse を指定した dig コマンドを使用するか、nslookup で norecurse を設定し、テストしてください。
反復クエリの失敗例:
[ec2-user@IAD-BAS-INSTANCE ~]$ dig @172.31.253.150 overlap.privatevpc.local +norecurse ;; <<>> DiG 9.11.0rc1 <<>> @172.31.253.150 overlap.privatevpc.local +norecurse; (1 server found) ;; global options: +cmd ;; connection timed out; no servers could be reached
正常な再帰クエリの例:
[ec2-user@IAD-BAS-INSTANCE ~]$ dig @172.31.253.150 overlap.privatevpc.local ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19051 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;overlap.privatevpc.local. IN A ;; ANSWER SECTION: overlap.privatevpc.local. 0 IN A 50.1.1.1 ;; Query time: 200 msec ;; SERVER: 172.31.253.150#53(172.31.253.150)
Amazon 提供 DNS の正しいルール優先順位を確認する
クライアントインスタンスが Resolver にクエリを送信すると、Resolver はリクエストのルーティング先について、インスタンスのルールを検証します。
最も具体的なルールが優先されます。たとえば、test.example.com の Resolver ルールと test.example.com プライベートホストゾーンがある場合、Resolver ルールが優先されます。クエリは、ルールで設定したサーバーまたはターゲット IP アドレスに転送されます。
ルールが同じドメインレベルにある場合、次の優先順位が付けられます。
- Resolver ルール
- プライベートホストゾーンルール
- 内部ルール
関連情報
- 言語
- 日本語

関連するコンテンツ
- 質問済み 1年前
