[アップデート] Amazon Route 53 Resolver Endpointがプライベートホストゾーンの DNS 委任をサポートするようになりました
Route 53 Private Hosted Zoneをサブドメインとして委任したい
こんにちは、のんピ(@non____97)です。
皆さんはRoute 53 Private Hosted Zoneをサブドメインとして委任したいなと思ったことはありますか? 私はあります。
Route 53 Private Hosted Zoneの制約事項として、委任することも、委任されることもできないという制約事項があります。
これはセルフマネージドのDNSゾーン間とも同じです。図示すると以下のとおりです。
抜粋 : AWS Ambassadorが考える個人的に最強のマルチアカウントハイブリッドネットワーク構成 - Speaker Deck
そのため、プライベートなDNSゾーンの名前解決を双方向で行うためには条件付きフォワーダーを使用していました。
抜粋 : AWS Ambassadorが考える個人的に最強のマルチアカウントハイブリッドネットワーク構成 - Speaker Deck
条件付きフォワーダーのルールが増えてくるとメンテナンスが中々大変です。
加えて、以下のようにコンテンツDNSサーバーにて、保持しているDNSゾーンのサブドメインにあたる条件付きフォワーダーを設定しようとするとエラーになります。
> Get-DnsServerZone
ZoneName ZoneType IsAutoCreated IsDsIntegrated IsReverseLookupZone IsSigned
-------- -------- ------------- -------------- ------------------- --------
0.in-addr.arpa Primary True False True False
127.in-addr.arpa Primary True False True False
255.in-addr.arpa Primary True False True False
test.corp.non-97.net Primary False False False False
TrustAnchors Primary False False False False
> Add-DnsServerConditionalForwarderZone -Name "phz.test.corp.non-97.net" -MasterServers 10.10.10.26,10.10.10.104
Add-DnsServerConditionalForwarderZone : Failed to create zone phz.test.corp.non-97.net on server EC2AMAZ-7QGQIHO.
At line:1 char:1
+ Add-DnsServerConditionalForwarderZone -Name "phz.test.corp.non-97.net ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (phz.test.corp.non-97.net:root/Microsoft/...tionalForwarder) [Add-DnsServerConditionalForwarderZone],
CimException
+ FullyQualifiedErrorId : WIN32 9604,Add-DnsServerConditionalForwarderZone
WIN32 9604
エラーはDNSゾーンの構成によるものです。条件付きフォワーダーを設定しようとした場合に発生したので、条件付きフォワーダーとDNSゾーンの相性が悪いということですね。
DNS_ERROR_ZONE_CONFIGURATION_ERROR
9604 (0x2584)
DNS ゾーンの構成が無効です。
システム エラー コード (9000-11999) (WinError.h) - Win32 apps | Microsoft Learn
また、Windows ServerのDNSサーバーのGUIから設定しようとした場合もA problem occured while trying to add the conditional fowrarder. A zone configuration problrem occured.
とエラーになります。
ADのドメインに参加している場合、AD DCをコンテンツDNSサーバー兼キャッシュDNSサーバーとしても使用していることも多いのではないでしょうか。このような場合は、条件付きフォワーダーとして転送するゾーンは自ドメインおよび自サブドメイン以外のものを指定する必要があります。
つまりは、オンプレミスドメインがcorp.non-97.net
の場合、AWS上のドメインはaws.non-97.net
のような形にする必要があるということです。aws.corp.non-97.net
とすることはできません。
組織としてはドメインを複数用意するのではなく、委任を用いてドメインツリーを構築したいでしょう。特に大規模環境では前者の場合はドメイン管理が煩雑になるでしょう。
そんな理由で、つい先日もRoute 53 Private Hosted Zoneの委任を天に願っていました。
その祈りが通じたのか、Amazon Route 53 Resolver Endpointがプライベートホストゾーンの DNS 委任をサポートするようになりました。
これにより、Route 53 Resolver Endpointを通じて、セルフマネージドDNSサーバーからRoute 53 Private Hosted Zoneへの委任、Route 53 Private Hosted ZoneからセルフマネージドDNSサーバーへの委任ができるようになりました。
実際に確認してみましょう。
いきなりまとめ
- Amazon Route 53 Resolver Endpointを用いて以下のような委任ができるようになった
- セルフマネージドDNSゾーンからRoute 53 Private Hosted Zoneへの委任
- 委任用のRoute 53 Resolver Inbound Endpointが必要
- Route 53 Private Hosted ZoneからセルフマネージドDNSゾーンへの委任
- Route 53 Resolver Outbound EndpointとRoute 53 Resolverの委任ルールが必要
- Route 53 Private Hosted ZoneからRoute 53 Private Hosted Zoneへの委任
- Route 53 Resolver Inbound EndpointとRoute 53 Resolver Outbound Endpoint、Route 53 Resolverの委任ルールが必要
- セルフマネージドDNSゾーンからRoute 53 Private Hosted Zoneへの委任
- 委任用のRoute 53 Resolver Inbound Endpointであっても条件付きフォワーダーによる転送を受け付けることはできる
- 今後Route 53 Resolver Inbound Endpointはデフォルトではなく、
Delegation
を選択すると良さそう - DoHおよびDoH-FIPSは使用できないため注意
- デフォルトのRoute 53 Resolver Inbound Endpointから委任のRoute 53 Resolver Inbound Endpointに変更することはできないため注意
- 今後Route 53 Resolver Inbound Endpointはデフォルトではなく、
- 料金は通常のRoute 53 Resolver Endpointと変わらず
料金
実際に動作確認する前に、料金面が気になったので料金を確認します。
What's Newには以下のような記載がありました。
Inbound and outbound delegation is provided at no additional cost to Resolver endpoints usage. For more details on pricing, visit the Route 53 pricing page, and to learn more about this feature, visit the developer guide.
Amazon Route 53 Resolver endpoints now support DNS delegation for private hosted zones - AWS
委任をするにあたっての追加料金はかからないようですね。
逆にいうと、通常のRoute 53 Resolver Endopointの料金はしっかりかかるということです。
2025/6/28現在の料金は「ENI ごとに 0.125 USD/時間」です。Resolver Endpointは少なくとも2つのENIを作成する必要があるため、ミニマム0.25USD/hと考えておくと良いでしょう。
やってみた
検証環境
それでは実際に動作確認をします。
検証環境は以下のとおりです。
Route 53 Resolver Endpoint及びRoute 53 Resolver Rule以外の作成は完了しています。
また、省略していますが、各VPCはサブネットが二つ存在しており、いずれのサブネットもパブリックサブネットです。
Route 53 Resolver Endpointの作成
Route 53 Resolver Endpointの作成をします。
まずはInbound Endpointです。
Endpoint CatecoryにDelegation
が追加されていました。
注意点としては、エンドポイントプロトコルとしてDo53のみしか指定できない点があります。DoHやDoH-FIPSのように、HTTPS経路上で名前解決する要件がある場合は使用できません。DoHについては以下記事をご覧ください。
それ以外は特に気になる点はありませんね。
また、作成後にEndpoint CatecoryをDefault
からDelegation
へ、Delegation
からDefault
へ変更することはできません。こちらも注意しましょう。
Outbound Endpointはこのタイミングでは委任関連のパラメーターはありません。
セルフマネージドDNSゾーンからRoute 53 Private Hosted Zoneへの委任
それでは、セルフマネージドDNSゾーンからRoute 53 Private Hosted Zoneへの委任から試していきます。
具体的にはtest.corp.non-97.net
からphz.test.corp.non-97.net
への委任です。
手始めにVPC AのAmazon Linux 2023のEC2インスタンスからtest.corp.non-97.net
で管理されているhost.test.corp.non-97.net
の名前解決ができることを確認します。
キャッシュDNSサーバーとして、test.corp.non-97.net
のコンテンツDNSサーバーである10.10.0.7
を指定します。
$ dig host.test.corp.non-97.net @10.10.0.7
; <<>> DiG 9.18.33 <<>> host.test.corp.non-97.net @10.10.0.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35581
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;host.test.corp.non-97.net. IN A
;; ANSWER SECTION:
host.test.corp.non-97.net. 3600 IN A 10.10.0.10
;; Query time: 10 msec
;; SERVER: 10.10.0.7#53(10.10.0.7) (UDP)
;; WHEN: Sat Jun 28 06:47:09 UTC 2025
;; MSG SIZE rcvd: 70
問題なくできますね。それでは、phz.test.corp.non-97.net
で管理されているhost.phz.test.corp.non-97.net
の名前解決をします。
$ dig host.phz.test.corp.non-97.net @10.10.0.7
; <<>> DiG 9.18.33 <<>> host.phz.test.corp.non-97.net @10.10.0.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 51850
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;host.phz.test.corp.non-97.net. IN A
;; AUTHORITY SECTION:
test.corp.non-97.net. 3600 IN SOA ec2amaz-7qgqiho. hostmaster. 2 900 600 86400 3600
;; Query time: 0 msec
;; SERVER: 10.10.0.7#53(10.10.0.7) (UDP)
;; WHEN: Sat Jun 28 06:51:03 UTC 2025
;; MSG SIZE rcvd: 139
はい、できませんでした。
委任設定を行いましょう。
test.corp.non-97.net
ゾーンで委任設定をします。phz.test.corp.non-97.net
をRout 53 Resolver Inbound EndpointのIPアドレスである10.10.10.26
と10.10.10.104
に委任します。
委任設定がされたことを確認します。
それでは再度host.phz.test.corp.non-97.net
名前解決を行いましょう。
$ dig host.phz.test.corp.non-97.net @10.10.0.7
; <<>> DiG 9.18.33 <<>> host.phz.test.corp.non-97.net @10.10.0.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63821
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;host.phz.test.corp.non-97.net. IN A
;; ANSWER SECTION:
host.phz.test.corp.non-97.net. 300 IN A 10.10.10.10
;; Query time: 10 msec
;; SERVER: 10.10.0.7#53(10.10.0.7) (UDP)
;; WHEN: Sun Jun 29 05:12:54 UTC 2025
;; MSG SIZE rcvd: 74
$ dig phz.test.corp.non-97.net @10.10.0.7 NS
; <<>> DiG 9.18.33 <<>> phz.test.corp.non-97.net @10.10.0.7 NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33414
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;phz.test.corp.non-97.net. IN NS
;; ANSWER SECTION:
phz.test.corp.non-97.net. 3600 IN NS ns.phz.test.corp.non-97.net.
;; ADDITIONAL SECTION:
ns.phz.test.corp.non-97.net. 3600 IN A 10.10.10.26
ns.phz.test.corp.non-97.net. 3600 IN A 10.10.10.104
;; Query time: 0 msec
;; SERVER: 10.10.0.7#53(10.10.0.7) (UDP)
;; WHEN: Sun Jun 29 05:14:20 UTC 2025
;; MSG SIZE rcvd: 102
正常に名前解決ができました。
名前解決の経路を図示すると以下のとおりです。
Delegation Inbound Endpointでサブドメインではないゾーンを条件付きフォワーダーで設定して名前解決できるか
Delegation Inbound Endpointでサブドメインではないゾーンを条件付きフォワーダーで設定して名前解決できるかも確認します。
これができるのであれば、今後はDoHやDoH-FIPSの要件がなければ、DelegationのInbouned Endppointを作る形が良さそうです。
test.corp.non-97.net
のゾーンを管理しているDNSサーバーでtest2.corp.non-97.net
への条件付きフォワーダーを設定します。フォワーディング先はRoute 53 Resolver Inbouned EndpointのIPアドレスです。
> Add-DnsServerConditionalForwarderZone `
>> -Name "test2.corp.non-97.net" `
>> -MasterServers 10.10.10.26,10.10.10.104
> Get-DnsServerZone
ZoneName ZoneType IsAutoCreated IsDsIntegrated IsReverseLookupZone IsSigned
-------- -------- ------------- -------------- ------------------- --------
0.in-addr.arpa Primary True False True False
127.in-addr.arpa Primary True False True False
255.in-addr.arpa Primary True False True False
test.corp.non-97.net Primary False False False False
test2.corp.non-97.net Forwarder False False False
TrustAnchors Primary False False False False
これで名前解決を行います。
$ dig host.test2.corp.non-97.net @10.10.0.7
; <<>> DiG 9.18.33 <<>> host.test2.corp.non-97.net @10.10.0.7
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65120
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;host.test2.corp.non-97.net. IN A
;; ANSWER SECTION:
host.test2.corp.non-97.net. 299 IN A 10.10.10.20
;; Query time: 10 msec
;; SERVER: 10.10.0.7#53(10.10.0.7) (UDP)
;; WHEN: Sat Jun 28 08:12:48 UTC 2025
;; MSG SIZE rcvd: 71
はい、問題なくできました。
ということで、今後はDoHやDoH-FIPSの要件がなければ、DelegationのInbouned Endppointを作る形が良さそうです。
名前解決の経路を図示すると以下のとおりです。
Route 53 Private Hosted ZoneからセルフマネージドDNSゾーンへの委任
続いて、Route 53 Private Hosted ZoneからセルフマネージドDNSゾーンへの委任を行います。
具体的にはcorp.non-97.net
からtest.corp.non-97.net
への委任です。
Route 53 Private Hosted Zoneで以下のようにtest.corp.non-97.net
のNSレコード及び、test.corp.non-97.net
グルーレコードとして、NSレコードの値として設定したns.test.corp.non-97.net
のAレコードを設定します。
この状態で、VPC CのAmazon Linux2023のEC2インスタンスからhost.test.corp.non-97.net
を名前解決します。
$ dig host.test.corp.non-97.net
; <<>> DiG 9.18.33 <<>> host.test.corp.non-97.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9769
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host.test.corp.non-97.net. IN A
;; AUTHORITY SECTION:
test.corp.non-97.net. 300 IN NS ns.test.corp.non-97.net.
;; ADDITIONAL SECTION:
ns.test.corp.non-97.net. 300 IN A 10.10.0.7
;; Query time: 0 msec
;; SERVER: 10.10.20.2#53(10.10.20.2) (UDP)
;; WHEN: Sat Jun 28 09:08:26 UTC 2025
;; MSG SIZE rcvd: 87
はい、まだ名前解決はできません。設定したNSレコードとグルーレコードが返ってきただけです。
委任をするために、Outbound Endpoint ルールの設定を行います。
VPC CのRoute 53 Resolverに紐付き、VPC CのOutbound Endpointを使用するルールタイプDelegation
のルールを作成します。委任先はtest.corp.non-97.net
です。
再度名前解決します。
$ dig host.test.corp.non-97.net
; <<>> DiG 9.18.33 <<>> host.test.corp.non-97.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16642
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host.test.corp.non-97.net. IN A
;; ANSWER SECTION:
host.test.corp.non-97.net. 293 IN A 10.10.0.10
;; Query time: 0 msec
;; SERVER: 10.10.20.2#53(10.10.20.2) (UDP)
;; WHEN: Sat Jun 28 09:09:32 UTC 2025
;; MSG SIZE rcvd: 70
test.corp.non-97.net
のセルフマネージドDNSサーバーで管理しているレコードを名前解決できましたね。
名前解決の経路を図示すると以下のとおりです。
Route 53 Private Hosted Zoneから別のRoute 53 Private Hosted Zoneへの委任
最後に、Route 53 Private Hosted Zoneから別のRoute 53 Private Hosted Zoneへの委任を試してみます。
具体的にはcorp.non-97.net
からphz.test.corp.non-97.net
へ委任です。
corp.non-97.net
のRoutte 53 Private Hosted Zoneにphz.test.corp.non-97.net
のNSレコード及びグルーレコードを追加します。
一旦名前解決をします。
$ dig host.phz.test.corp.non-97.net
; <<>> DiG 9.18.33 <<>> host.phz.test.corp.non-97.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23854
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host.phz.test.corp.non-97.net. IN A
;; AUTHORITY SECTION:
phz.test.corp.non-97.net. 300 IN NS ns.phz.test.corp.non-97.net.
;; ADDITIONAL SECTION:
ns.phz.test.corp.non-97.net. 300 IN A 10.10.10.26
ns.phz.test.corp.non-97.net. 300 IN A 10.10.10.104
;; Query time: 10 msec
;; SERVER: 10.10.20.2#53(10.10.20.2) (UDP)
;; WHEN: Sat Jun 28 09:23:49 UTC 2025
;; MSG SIZE rcvd: 107
委任のルールを設定していないため、まだ名前解決できません。
phz.test.corp.non-97.net
を委任するルールを追加します。
この状態で名前解決をします。
$ dig host.phz.test.corp.non-97.net
;; communications error to 10.10.20.2#53: timed out
;; communications error to 10.10.20.2#53: timed out
;; communications error to 10.10.20.2#53: timed out
; <<>> DiG 9.18.33 <<>> host.phz.test.corp.non-97.net
おや、名前解決ができません。
よくよく環境を見てみると、VPC BとVPC C間のピアリングの承諾ができていませんでした。
ピアリングの承諾後、再度名前解決します。
$ dig host.phz.test.corp.non-97.net
; <<>> DiG 9.18.33 <<>> host.phz.test.corp.non-97.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27638
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host.phz.test.corp.non-97.net. IN A
;; ANSWER SECTION:
host.phz.test.corp.non-97.net. 300 IN A 10.10.10.10
;; Query time: 10 msec
;; SERVER: 10.10.20.2#53(10.10.20.2) (UDP)
;; WHEN: Sat Jun 28 09:27:55 UTC 2025
;; MSG SIZE rcvd: 74
正常に名前解決ができました。
名前解決の経路を図示すると、以下のとおりです。
ついにRoute 53 Private Hosted Zoneの委任ができるようになった
Amazon Route 53 Resolver Endpointがプライベートホストゾーンの DNS 委任をサポートするようになったアップデートを紹介しました。
ついにRoute 53 Private Hosted Zoneの委任ができるようになったのは嬉しいですね。
今後のオンプレミス及びAWSを交えたDNSゾーン設計や条件付きフォワーダーの考え方を大幅にアップデートすることになりそうです。とりあえず私は今後作成するRoute 53 Resolver Inbound EndpointはDelegation
で作成します。
また、委任時の通信の流れや委任をする設定は以下AWS公式ドキュメントにも紹介されています。併せてチェックしましょう。
この記事が誰かの助けになれば幸いです。
以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!