スキップしてコンテンツを表示

Route 53 プライベートホストゾーンでの DNS 解決に関する問題をトラブルシューティングする方法を教えてください。

所要時間4分
0

Amazon Route 53 プライベートホストゾーンでの DNS 解決に関する問題をトラブルシューティングしたいと考えています。

簡単な説明

プライベートホストゾーンでの DNS に関する問題を解決するには、Amazon Virtual Private Cloud (Amazon VPC) の設定、ゾーンの関連付け、DNS サーバーの設定を確認してください。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

VPC の DNS サポートを確認する

プライベートホストゾーンのレコードを解決できるようにするには、次の手順を実行します。

  1. Amazon VPC で DNS サポートを有効にします。
  2. VPC で DNSSupportDNSHostnamesTrue に設定されていることを確認します。詳細については、「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_IDVPC_IDREGION_ID を適切な値に置き換えてください。

カスタム DNS サーバー設定を確認する

VPC において、DNS の DHCP オプションでカスタム DNS サーバーまたは Active Directory サーバーを設定した場合は、次の項目を確認してください。

  1. 転送ルール: サーバーは、プライベートドメインの DNS クエリを VPC の DNS サーバー IP アドレスに転送すること。
  2. ドメイン設定: カスタムサーバーのドメインは、プライベートホストゾーンとは別のものであること。

たとえば、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 個のプライベートホストゾーンが存在する例を次に示します。

プライベートホストゾーンレコード名
localoverlap.privatevpc.local60.1.1.1
privatevpc.localoverlap.privatevpc.local50.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 ルールが優先されます。

  1. プライベートホストゾーンのドメインのネットワークには、トラフィックをルーティングする Resolver ルールが存在する場合。
  2. プライベートホストゾーンにも関連付けられた、同一の VPC 内に関連付けられた Resolver ルールが存在する場合。

詳細については、「VPC とネットワーク間の DNS クエリを解決する」を参照してください。

クエリループを防止する

ループの発生を防ぐために、次の手順を実行してください。

  1. VPC のインバウンドエンドポイントを指す Resolver 転送ルールには、ターゲット IP アドレスを作成しないでください。
  2. エンドポイントをプライベートホストゾーンに関連付けないでください。
  3. 同じ 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 は、反復的ではなく、再帰的なクエリを送信することを確認してください。

解決の種類を確認するには、次の手順を実行します。

  1. オンプレミスの DNS Resolver でパケットキャプチャを使用します。
  2. DNS フラグを確認します (recursion desired (RD) = 0)。
  3. +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 アドレスに転送されます。

ルールが同じドメインレベルにある場合、次の優先順位が付けられます。

  1. Resolver ルール
  2. プライベートホストゾーンルール
  3. 内部ルール

関連情報

プライベートホストゾーンの使用

プライベートホストゾーンを使用するには、どの Amazon VPC オプションを有効にする必要がありますか?

リゾルバーエンドポイントでのループ構成を回避する

コメントはありません

関連するコンテンツ