Route53でPrivateHostedZoneを作成しVPC内の名前解決を行う

　[別記事](https://qiita.com/tonkatsu_oishi/items/27bec9679b247a035757)にてVPC上にパブリックサブネットとプライベートサブネットを構築し、踏み台サーバーやWEBサーバーを構築する手順をご紹介しました。
 今回は、これまでに構築した環境をRoute53のPrivateHostedZoneで名前解決する手順をご紹介していきたいと思います。

 ## 用語の確認
 #### Route53
 Route53はAWSで利用できるDNSサービスです。
 Route53では、ドメイン登録やDNSのルーティング、ヘルスチェックなどを行うことができます。
 [参考：Amazon Route 53 とは？](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/Welcome.html)

 #### Route53 Private Hosted Zone
 プライベートホストゾーンを利用すると、VPC内のリソースに対してDNSレコードを設定することができます。プライベートホストゾーンに登録したドメインは、基本的にプライベートホストゾーンと紐づけているVPC内でのみ名前解決が可能です。
 ただし、Route53インバウンドエンドポイントをプライベートホストゾーンと組み合わせることで、VPCの外部（ダイレクトコネクトで接続されたオンプレミス環境）や別VPCから、プライベートホストゾーン上のレコードを名前解決させることが可能になります。
 [参考：VPC へのインバウンド DNS クエリの転送](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resolver-forwarding-inbound-queries.html)

#### Route53Resolver
すべてのVPCでデフォルトで利用できるフォワーダーとフルサービスリゾルバの機能。
VPCのCIDR+2（最初から3番目のIPアドレス）が割り当てられている。
例えば、VPCのCIDRが10.0.0.0/16なら、Route53ResolverのIPは10.0.0.2/32になります。
[参考:Route53Resolverとは](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/resolver.html)


#### フォワーダー（DNSプロキシ）
クライアントからのDNS問い合わせを別のフルサービスリゾルバ（キャッシュDNSサーバー）へ転送するためのDNSサーバー。
[参考：JPRS用語辞典（DNSフォワーダー（DNSプロキシー））](https://jprs.jp/glossary/index.php?ID=0198)

#### フルサービスリゾルバ（キャッシュDNSサーバー）
クライアントからの名前解決要求を受けとり、ネームサーバー（権威サーバー）にDNSの反復検索を行うサーバー。ネームサーバーあてに名前解決を行い、結果を返すだけの機能を持ったサーバーのことをリゾルバと呼ぶ。さらに、名前解決の際に受け取った情報をキャッシュとして内部に保持できるサーバーのことをフルサービスリゾルバと呼ぶ。
[参考：JPRS用語辞典（フルサービスリゾルバー（キャッシュDNSサーバー）](https://jprs.jp/glossary/index.php?ID=0158)

#### NS（NameServer）レコード
DNSレコードが登録されているネームサーバー（権威DNSサーバー）を指定するためのリソースレコード。
[参考：JPRS用語辞典（NSリソースレコード）](https://jprs.jp/glossary/index.php?ID=0146)

#### SOA（StartOfAuthority）レコード
ドメインやゾーンの管理情報を記載するためのレコード。ゾーン管理サーバーの名前やドメイン管理責任者のメールアドレスなどが記述されます。
[参考：JPRS用語辞典（SOAリソースレコード）](https://jprs.jp/glossary/index.php?ID=0194)

#### A（Address）レコード
ドメイン名に対するIPv4アドレスを指定するリソースレコード。
[参考：JPRS用語辞典（Aレコード）](https://jprs.jp/glossary/index.php?ID=0161)

 ## 構成図の確認
 まずは、構成図にて現時点の状態を確認しておきます。
現在はVPC上にパブリックサブネット・プライベートサブネットが存在しています。
パブリックサブネット上に踏み台サーバーが2台、プライベートサブネット上にWEBサーバーが1台存在する状態です。

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/da1bb2ab-33da-3a12-aecf-96768d9ad7d6.png)

 ※VPC・サブネットやEC2の構築方法については今回はご紹介しません。
 VPCやサブネットの作成手順については[過去記事](https://qiita.com/tonkatsu_oishi/items/cded18d47108fb04961d#vpc%E3%82%B5%E3%83%96%E3%83%8D%E3%83%83%E3%83%88%E8%B8%8F%E3%81%BF%E5%8F%B0%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E4%BD%9C%E6%88%90)をご確認ください。

VPCを構築すると、5つのIPアドレスがAWSによって使用されます。
今回利用するVPCは10.0.0.0/24となるため、下記5つのIPアドレスが予約されています。

- 10.0.0.0……NWアドレス
- 10.0.0.1……VPC内のルーター
- 10.0.0.2……VPC内の名前解決に利用されるRoute53Resolver
- 10.0.0.2……将来の利用のためにAWSにより予約済
- 10.0.0.255……ブロードキャストアドレス

[参考：IPv4 のサブネットのサイズ設定](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/subnet-sizing.html#subnet-sizing-ipv4)

10.0.0.0/24のVPCの場合は、デフォルトではRoute53Resolver（10.0.0.2）あてにDNS問い合わせを行います。Route53Resolverは内部的にフォワーダーの機能とフルサービスリゾルバの機能を持っています。外部のURLを名前解決させる場合は、下記のような経路でインターネットのパブリックDNSあてに名前解決が行われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/e9088e1a-0d15-95b9-0f0b-91d528da26f2.png)


また、VPC内のEC2では、デフォルトでAWSによりプライベートDNSホスト名が割り当てられています。EC2の詳細画面から、デフォルトでAWSから割り当てられているDNSホスト名を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/63ef09c6-8dd7-bf53-3882-8937c488c939.png)
デフォルトでは画像のように、「ip-x-x-x-x.リージョンコード.compute.internal」というプライベートDNS名が割り振られます。
デフォルト状態のプライベートホスト名（ip-x-x-x-x.リージョンコード.compute.internal）を名前解決させる場合は、下記のような通信経路で、AWSデフォルトのプライベートDNSホスト名が解決されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/d31f3bcc-782b-6e22-d92d-7a63629afa2b.png)

今回はRoute53のプライベートホストゾーンを作成し、「https-demo.com」という内部ドメイン名を設定します。プライベートホストゾーンを作成した場合は、下記のような経路でプライベートDNS名（xxx.https-demo.com）が名前解決されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/2ad67516-7207-71eb-74a2-a3f3a540e4e7.png)


[参考：Amazon Route 53 Resolver(AWS Black Belt Online Seminar資料)](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-Route53-Resolver_0530_v1.pdf)

## 作業の流れ
作業は下記の流れで行います。
1. Route53プライベートホストゾーンの作成
1. プライベートホストゾーンにデフォルトで登録されるレコードの確認
1. レコードの作成
1. VPC側でDNS解決・DNSホスト名を有効化
1. 内部ドメイン名の動作確認

## 構築
### Route53プライベートホストゾーンの作成
それでは、Route53のプライベートホストゾーン作成から行います。
Route53のサービストップページに移動後、左メニューから「ホストゾーン」を押下します。ホストゾーンの一覧が表示されたら、「ホストゾーンの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/78c9bbf7-b03b-5639-ea45-6fdac0dfe2f8.png)

ホストゾーンの作成画面が表示されます。
「ドメイン名」を入力します。今回は「https-demo.com」を設定しました。
「タイプ」には「プライベートホストゾーン」を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/b25e1301-aefb-98b3-178a-98d3d923d8da.png)

下にスクロールし、ホストゾーンに関連付けるVPCの設定を行います。
「VPCを追加」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/aa6e34d6-463a-301f-a5bb-b774548b2c77.png)
リージョン・VPC選択のプルダウンメニューが追加されます。
「リージョン」にはプライベートホストゾーンを利用するリージョンを選択します。
「VPCID」にはプライベートホストゾーンを関連付けたいVPCのIDを選択します。
ドメイン名・リージョン・VPCIDの設定が完了したら、「ホストゾーンの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/245e6050-86ff-918b-186a-7c9ce02e1b46.png)

これで、プライベートホストゾーンの作成が完了です。

### プライベートホストゾーンにデフォルトで登録されるレコードの確認
ホストゾーン作成が完了した状態です。「ホストゾーン名」のリンクを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/d647c480-6208-6535-163d-d206f60966a3.png)

プライベートホストゾーンの詳細画面が表示されます。作成直後の状態では、NSレコード・SOAレコードのみが設定されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/3abae9a4-bd35-c970-eef4-265cbdde15b8.png)

NSレコード・SOAレコードの設定内容について下記に整理します。

- #### NSレコード
    DNSレコードが登録されているネームサーバー（権威DNSサーバー）を指定するためのリソースレコード。Route53でプライベートホストゾーンを作成した場合は、AWSのネームサーバーが4つNSレコードとして登録されます。VPC内のRoute53ResolverからAWSの各ネームサーバーへの接続はプライベート接続にて行われます。
[参考：プライベートホストゾーンの使用](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/hosted-zones-private.html)

- #### SOAレコード
     ドメインやゾーンの管理情報を記載するためのレコード。Route53のホストゾーンを作成した場合は、下記画像のような情報がSOAレコードの中に詰め込まれます。
     
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/936ee662-dde0-5227-80ac-adcaa0a39be9.png)

[参考：Amazon Route 53 がパブリックホストゾーンに作成する NS レコードと SOA レコード](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/SOA-NSrecords.html#SOArecords)
※プライベートホストゾーン上のSOAレコードについて詳細が記載されているAWS公式ユーザーガイドを見つけられませんでした。ただ、値を見る限りでは、パブリックホストゾーンのSOAレコードと内容は同一のようです。


### レコードの作成
プライベートホストゾーンにAレコードを追加します。
「レコードの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/021ab3dd-8739-bb75-4aef-c832e415a10a.png)

レコードの作成画面が表示されます。
今回は、パブリックサブネット上の踏み台サーバー（10.0.0.169）に対して「https-bat-01.https-demo.com」という内部DNS名を設定し、動作確認を行います。
その為、「レコード名」のテキストボックスには「https-bat-01」を入力し、「レコードタイプ」のプルダウンメニューから「Aレコード」を選択します。
「値」には踏み台サーバーのプライベートIPアドレス（10.0.0.169）を入力します。
レコード名・レコードタイプ・値の設定が完了したら、「レコードを作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/34081e02-0cc7-e88c-1497-a24f327f019e.png)


レコードの作成が完了した状態です。ホストゾーンのレコード一覧に「https-bat-01.https-demo.com」の情報が表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/ce83614b-21a5-e0b2-8c4d-4ef79870c9f4.png)

これで、プライベートホストゾーンの作成・レコードの作成が完了しました。

### VPC側でDNS解決・DNSホスト名を有効化
プライベートホストゾーンのレコードを名前解決させるためには、VPC側でDNS解決・DNSホスト名の有効化設定を行う必要があります。
[参考:プライベートホストゾーンを使用する場合の考慮事項](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/hosted-zone-private-considerations.html)

VPCのサービス画面に移動し、左メニューから「お使いのVPC」を押下します。
VPCの一覧が表示されたら、ホストゾーンと紐づけたVPCのチェックボックスにチェックを入れます。左上の「アクション」メニューの中から、「VPCの設定を編集」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/d83479e8-dda1-3e2b-8501-a80c2de69c45.png)
VPCの詳細編集画面が表示されます。
「DNS解決を有効化」と「DNSホスト名を有効化」のチェックボックスにチェックを入れ、「保存」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/6586aafa-d9fb-9537-81d6-4fc536596c63.png)
VPCの設定変更が完了した状態です。
画面上部に「設定が正常に変更されました」と表示されることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/606b89b6-e984-a1ef-3621-9486fdb57f90.png)

### 内部ドメイン名の動作確認
ここまでの設定が完了したら、内部ドメイン名が正常に設定されたことを確認します。
VPC内のEC2にログインし、下記のようにnslookupコマンドを実行します。

    nslookup https-bat-01.https-demo.com

結果が正しく返ってくることを確認します。
10.0.0.0/24のVPCの場合は、Route53ResolverのIPが10.0.0.2となります。
VPC内からnslookupコマンドを実行すると、10.0.0.2からDNSレコードの回答が戻ってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/8cbfde7c-382a-80ed-79fb-c246aedcacc9.png)

これで、今回ご紹介する手順は完了です。
ここまでお読みいただきありがとうございました。