[アップデート] Amazon Route 53 Resolver Endpointがプライベートホストゾーンの DNS 委任をサポートするようになりました

[アップデート] Amazon Route 53 Resolver Endpointがプライベートホストゾーンの DNS 委任をサポートするようになりました

ついにRoute 53 Private Hosted Zoneの委任ができるようになったぞ
Clock Icon2025.06.29

Route 53 Private Hosted Zoneをサブドメインとして委任したい

こんにちは、のんピ(@non____97)です。

皆さんはRoute 53 Private Hosted Zoneをサブドメインとして委任したいなと思ったことはありますか? 私はあります。

Route 53 Private Hosted Zoneの制約事項として、委任することも、委任されることもできないという制約事項があります。

これはセルフマネージドのDNSゾーン間とも同じです。図示すると以下のとおりです。

15.これはできない.png

抜粋 : AWS Ambassadorが考える個人的に最強のマルチアカウントハイブリッドネットワーク構成 - Speaker Deck

そのため、プライベートなDNSゾーンの名前解決を双方向で行うためには条件付きフォワーダーを使用していました。

16.従来のオンプレミスからAWSへの名前解決方法.png

抜粋 : 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.とエラーになります。

8.Inbound条件付きフォワーダーを設定しようとする.png
9.A problem occured while trying to add the conditional fowrarder. A zone configuration problrem occured..png

ADのドメインに参加している場合、AD DCをコンテンツDNSサーバー兼キャッシュDNSサーバーとしても使用していることも多いのではないでしょうか。このような場合は、条件付きフォワーダーとして転送するゾーンは自ドメインおよび自サブドメイン以外のものを指定する必要があります。

つまりは、オンプレミスドメインがcorp.non-97.netの場合、AWS上のドメインはaws.non-97.netのような形にする必要があるということです。aws.corp.non-97.netとすることはできません。

組織としてはドメインを複数用意するのではなく、委任を用いてドメインツリーを構築したいでしょう。特に大規模環境では前者の場合はドメイン管理が煩雑になるでしょう。

そんな理由で、つい先日もRoute 53 Private Hosted Zoneの委任を天に願っていました。

https://x.com/non____97/status/1934439765493104816

その祈りが通じたのか、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の委任ルールが必要
  • 委任用の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 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と考えておくと良いでしょう。

やってみた

検証環境

それでは実際に動作確認をします。

検証環境は以下のとおりです。

[アップデート] Amazon Route 53 Resolver Endpointがプライベートホストゾーンの DNS 委任をサポートするようになりました検証環境構成図.png

Route 53 Resolver Endpoint及びRoute 53 Resolver Rule以外の作成は完了しています。

また、省略していますが、各VPCはサブネットが二つ存在しており、いずれのサブネットもパブリックサブネットです。

Route 53 Resolver Endpointの作成

Route 53 Resolver Endpointの作成をします。

まずはInbound Endpointです。

Endpoint CatecoryにDelegationが追加されていました。

1.Inbound Endpointの作成.png

注意点としては、エンドポイントプロトコルとしてDo53のみしか指定できない点があります。DoHやDoH-FIPSのように、HTTPS経路上で名前解決する要件がある場合は使用できません。DoHについては以下記事をご覧ください。

https://dev.classmethod.jp/articles/dns-usedroute-53-endpoint-over-doh/

それ以外は特に気になる点はありませんね。

また、作成後にEndpoint CatecoryをDefaultからDelegationへ、DelegationからDefaultへ変更することはできません。こちらも注意しましょう。

Outbound Endpointはこのタイミングでは委任関連のパラメーターはありません。

10.Outboundエンドポイント作成.png

セルフマネージド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.2610.10.10.104に委任します。

17.ns.phz.test.corp.non-97.net.png

委任設定がされたことを確認します。

18.ns.phz.test.corp.non-97.net_Glue.png

それでは再度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

正常に名前解決ができました。

名前解決の経路を図示すると以下のとおりです。

セルフマネージドDNSゾーンからRoute 53 Private Hosted Zoneへの委任.png

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を作る形が良さそうです。

名前解決の経路を図示すると以下のとおりです。

Delegation Inbound Endpointでサブドメインではないゾーンを条件付きフォワーダーで設定して名前解決できるか.png

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レコードを設定します。

12.corp.non-97.net.png

この状態で、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です。

11.ルールの作成.png

再度名前解決します。

$ 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からセルフマネージドDNSゾーンへの委任.png

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レコード及びグルーレコードを追加します。

14.phz.test のNSレコードを追加したcorp.non-97.net.png

一旦名前解決をします。

$ 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を委任するルールを追加します。

13.phz-test-corp.png

この状態で名前解決をします。

$ 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から別のRoute 53 Private Hosted Zoneへの委任.png

ついに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公式ドキュメントにも紹介されています。併せてチェックしましょう。

https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/outbound-delegation-tutorial.html

https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver-overview-forward-network-to-vpc.html

この記事が誰かの助けになれば幸いです。

以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.