Route 53 Private Hosted ZoneとRoute 53 Resolver Ruleの優先順位を確認してみた
正しく名前解決できるか気になる
こんにちは、のんピ(@non____97)です。
皆さんは「サブドメインをRoute 53 Private Hosted Zoneで管理している状態で、Route 53 Resolver Ruleで親ドメインの転送する設定をすると、サブドメインの名前解決を行う場合にどのような挙動をするのか」は気になったことはありますか? 私はあります。
言葉だけだと分かりづらいので図にします。
この状態でサブドメインであるroute-53.corp.non-97.net
のゾーンが管理している名前(例えばa.route-53.corp.non-97.net
)を名前解決しようとすると、以下のようにループしてしまいそうに思いませんか?
- Route 53 Resolverに問い合わせ
- Route 53 Resolver Ruleを参照し、問い合わせされた
a.route-53.corp.non-97.net
と比較 - 部分的に一致しているためRoute 53 Resolver Ruleに従って
corp.non-97.net
のゾーンを管理しているDNSサーバーに転送 - サブドメインである
route-53.corp.non-97.net
の名前解決をするために、RouteRoute 53 Resolverに転送
AWS公式ドキュメントには以下のような記載がありました。
プライベートホストゾーンと Route 53 Resolver ルール
プライベートホストゾーン (example.com) があり、ドメイン名が同じであるトラフィックをネットワークにルーティングする Resolver ルールがある場合、Resolver はルールを優先します。
例えば、次の設定があるとします。
- example.com というプライベートホストゾーンがあり、それを VPC に関連付けます。
example.com のトラフィックをネットワークに転送する Route 53 Resolver ルールを作成し、そのルールを同じ VPC に関連付けます。
この設定では、Resolver ルールがプライベートホストゾーンよりも優先されます。DNS クエリは、プライベートホストゾーンのレコードに基づいて解決されるのではなく、ネットワークに転送されます。
ドメインが同じであればResolver Ruleを優先するようです。
しかし、今回気になっているResolver Ruleに親ドメインを指定して、サブドメインのRoute 53 Private Hosted Zoneの名前解決をした時の優先順位は特に言及されていないですね。
気になったので確認してみました。
いきなりまとめ
- 以下環境ではRoute 53 Private Hosted Zoneを優先する
- Route 53 Private Hosted Zoneでサブドメインを管理
- Route 53 Resolver Ruleで親ドメインへの問い合わせが来た場合は、親ドメインのゾーンを管理しているDNSサーバー転送
検証環境の準備
Route 53 Private Hosted Zoneの作成
それでは、検証環境を準備します。
VPCやcorp.non-97.net
のゾーンを管理するDNSサーバーは以下記事の検証環境を流用します。また、名前解決の比較用にa.corp.non-97.net
で10.2.2.2
のAレコードを作成しておきます。
それでは、Route 53 Private Hosted Zoneでサブドメインであるroute-53.corp.non-97.net
のPrivate Hosted Zoneを作成します。
Route 53のコンソールからホストゾーン
-ホストゾーンの作成
をクリックします。
ドメイン名にroute-53.corp.non-97.net
を指定してPrivate Hosted Zoneを作成します。
Route 53 Private Hosted Zoneの作成が完了したら、Aレコードとしてa.route-53.corp.non-97.net
を追加します。
Route 53 Resolver Outbound Endpointの作成
次にRoute 53 Resolver Outbound Endpointを作成します。
Route 53のコンソールからアウトバウンドエンドポイント
-アウトバウンドエンドポイントの作成
をクリックします。
アウトバウンドルールをVPC内に作成します。
Route 53 Resolver Outbound Endpointの作成が完了したら、Route 53 Resolver Ruleを作成します。
親ドメインであるcorp.non-97.net
の問い合わせの場合に、corp.non-97.net
のゾーンを管理するDNSサーバーのIPアドレスに転送するようなルールを作成します。
Route 53 Resolver Ruleが作成されたことを確認します。
名前解決してみる
検証環境の準備ができたので、名前解決してみます。
# 親ドメインのAレコードを名前解決できるか確認 $ dig a.corp.non-97.net ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> a.corp.non-97.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31857 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;a.corp.non-97.net. IN A ;; ANSWER SECTION: a.corp.non-97.net. 300 IN A 10.2.2.2 ;; Query time: 3 msec ;; SERVER: 10.0.1.2#53(10.0.1.2) ;; WHEN: Fri Oct 28 01:04:25 UTC 2022 ;; MSG SIZE rcvd: 62 # サブドメインのAレコードを名前解決できるか確認 $ dig a.route-53.corp.non-97.net ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> a.route-53.corp.non-97.net ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47304 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;a.route-53.corp.non-97.net. IN A ;; ANSWER SECTION: a.route-53.corp.non-97.net. 300 IN A 10.1.1.1 ;; Query time: 1 msec ;; SERVER: 10.0.1.2#53(10.0.1.2) ;; WHEN: Fri Oct 28 01:04:34 UTC 2022 ;; MSG SIZE rcvd: 71
正常に名前解決できました。
どうやら、Route 53 Resolver Ruleで転送設定をしたドメインとRoute 53 Private Hosted Zoneで管理しているゾーンが一致している場合、Route 53 Private Hosted Zoneが優先されるようです。
もちろん、各ゾーンのNSレコードの問い合わせも以下のように正しくできています。
# サブドメインのゾーンのNSレコードの確認 $ dig route-53.corp.non-97.net NS ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> route-53.corp.non-97.net NS ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41337 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;route-53.corp.non-97.net. IN NS ;; ANSWER SECTION: route-53.corp.non-97.net. 172800 IN NS ns-512.awsdns-00.net. route-53.corp.non-97.net. 172800 IN NS ns-0.awsdns-00.com. route-53.corp.non-97.net. 172800 IN NS ns-1024.awsdns-00.org. route-53.corp.non-97.net. 172800 IN NS ns-1536.awsdns-00.co.uk. ;; Query time: 1 msec ;; SERVER: 10.0.1.2#53(10.0.1.2) ;; WHEN: Fri Oct 28 00:56:47 UTC 2022 ;; MSG SIZE rcvd: 188 # 親ドメインのゾーンのNSレコードの確認 $ dig corp.non-97.net NS ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> corp.non-97.net NS ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33892 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;corp.non-97.net. IN NS ;; ANSWER SECTION: corp.non-97.net. 3600 IN NS ec2amaz-75jbqck.corp.non-97.net. ;; Query time: 2 msec ;; SERVER: 10.0.1.2#53(10.0.1.2) ;; WHEN: Fri Oct 28 00:57:03 UTC 2022 ;; MSG SIZE rcvd: 74
DNSの設計をする際は名前解決の経路を意識しよう
Route 53 Private Hosted ZoneとRoute 53 Resolver Ruleの優先順位を確認してみました。
親ドメインのゾーンはオンプレのADの統合ゾーンで管理しており、AWSで稼働しているサービスで使うドメインのゾーンはRoute 53 Private Hosted Zoneで管理するといったこともあるかと思います。
もし、ループするような仕様である場合ドメインの設計が大きな影響を与えるので、そのような仕様でなくて安心しました。
DNS周りを設計する場合は、「どこから」「何を」「どのような経路」で名前解決するのか正しく把握しておくことが重要です。DNSの設計をする場合パターンを洗い出して名前解決の経路に違和感がないか確認しましょう。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!