Amazon Route 53 の IP ベースルーティングポリシーで DNS 解決をテストすると予期しない結果が表示されます。
解決方法
シナリオ例
CIDR 172.32.0.0/16 と 172.33.0.0/16 を持つクライアント向けの IP ベースのルーティングレコードを、2 つの Elastic Load Balancing (ELB) ロードバランサーに向けています。1 つの ELB ロードバランサーはバージニア (us-east-1) にあり、もう 1 つはアイルランド (eu-west-1) にあります。CIDR 172.32.0.0/16 を持つクライアントは、ドメインを us-east-1 のロードバランサーに解決します。CIDR 172.33.0.0/16 を持つクライアントは、ドメインを eu-west-1 のロードバランサーに解決します。しかし、クライアントは予期される出力を受け取っていません。
注: プライベートホストゾーンでは IP ベースのルーティングはサポートされていません。
IP ベースのルーティングのトラブルシューティングを行うには、次の手順を完了してください。
1. 使用ケースに適した Route 53 ホストゾーンの IP ベースのリソースレコードを正しく設定したことを確認します。Route 53 コンソールを開き、Route 53 ホストゾーンの設定で指定されているデフォルトのロケーションを確認します。
注:
- ソース IP アドレスに一致する CIDR コレクションで CIDR ブロックが指定されていない場合、Route 53 はデフォルトの「*」ロケーションで応答します。
- 次の条件が真である場合、Route 53 は NODATA で応答します。
デフォルトの「*」ロケーションが指定されていません。
クエリは、CIDR コレクションの指定された CIDR ブロックと一致しない CIDR ブロックから送信されます。
- Route 53 は、指定された CIDR よりも長い CIDR を持つ DNS クエリを、CIDR コレクションの短い指定された CIDR に一致させます。例えば、CIDR コレクションの CIDR として 2001:db8::/32 を指定し、2001:0db8:1234::/48 からのクエリを受け取った場合、CIDR が一致します。CIDR コレクションの CIDR として 2001:db8:1234::/48 を指定し、2001:db8::/32 からのクエリを受け取った場合、一致しません。Route 53 は、デフォルトの「*」ロケーションのレコードと応答します。
CIDR コレクションと CIDR ブロックの制限クォータについては、「レコードのクォータ」を参照してください。
2. クライアントが正しく解決されているかどうかを確認してください。
クライアントが仮想プライベートクラウド (VPC) 内で解決され、VPC DNS .2リゾルバーを使用している場合、IP ベースルーティングは機能しません。これは、.2 リゾルバーが EDNS クライアントサブネット (ECS) をサポートしていないためです。
クライアントが VPC の外で解決している場合は、次のコマンドを実行して DNS リゾルバが EDNS0 をサポートしているかどうかを確認してください。
Linux または macOS
dig TXT o-o.myaddr.google.com -4
Windows
nslookup -type=txt o-o.myaddr.google.com
次の例は、EDNS0 をサポートしていない DNS リゾルバの出力です。
$ dig TXT o-o.myaddr.google.com -4
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> TXT o-o.myaddr.google.com -4
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38328
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;o-o.myaddr.google.com. IN TXT
;; ANSWER SECTION:
o-o.myaddr.google.com. 60 IN TXT "3.209.83.70"
次の例は、EDNS0 をサポートしている DNS リゾルバの出力です。
$ dig TXT o-o.myaddr.google.com -4 @8.8.8.8
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> TXT o-o.myaddr.google.com -4 @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30624
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;o-o.myaddr.google.com. IN TXT
;; ANSWER SECTION:
o-o.myaddr.google.com. 60 IN TXT "172.253.8.137"
o-o.myaddr.google.com. 60 IN TXT "edns0-client-subnet 54.82.0.0/24"
3. DNS の解決を確認するために、ホストゾーンの権威ある名前サーバーを使用してレコードを解決します。以下のコマンドを実行します。次の例のコマンドでは、example.com をご自身のドメインに置き換えてください。
dig A example.com +subnet=172.3.0.0/16 @ns-1875.awsdns-42.co.uk
または、dig や nslookup を使用し、DNS の解決が正常に機能しているかどうかを確認します。次の例のコマンドでは、example.com をご自身のドメインに置き換えてください。
dig example.com @8.8.8.8
nslookup example.com 8.8.8.8
4. IP ベースのリソースレコードに対してヘルスチェックレコードを設定している場合は、これらのレコードを使用してヘルスステータスを確認してください。デフォルト (*) ロケーションのレコードのヘルスチェックが失敗した場合、Route 53は デフォルトのロケーションを DNS クエリの応答として返します。
関連情報
IP ベースルーティング