Route53Inbound/OutboundEndpointと転送ルールを使用して別VPCを名前解決する

Route53のInboundEndpoint・OutboundEndpoint・リゾルバルールを使用してPrivateHostedZone間でのゾーンフォワードの設定を確認していきます。

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

#### Route53 ResolverEndpoint
Route53ResolverEndpointは、VPC内のリソースからVPC外のリソースに対してDNS問い合わせを実行できるようにするためのVPCエンドポイントです。
Route53の転送ルールとRoute53ResolverEndpointを併用すると、VPC外のDNSサーバーに対してDNS問い合わせを転送したり、VPC外からのDNS問い合わせをVPCのDNSサーバーやVPCに紐づけているRoute53PrivateHostedZoneに転送させることができます。
Route53のResolverEndpointには、InboundEndpointとOutboundEndpointが存在します。

#### InboundEndpoint
VPC外からのDNS問い合わせをVPC内で受け付けるためのVPCエンドポイントです。

#### OutboundEndpoint
VPC内からのDNS問い合わせをVPC外に転送するためのVPCエンドポイントです。

#### 転送ルール
転送ルールを設定すると、特定のドメイン名に対する問い合わせを指定したIPアドレスのDNSリゾルバに転送（フォワーディング設定）することができます。
※Route53で設定できるのはフォワーディングの設定のみです。ゾーン転送の設定は行えないため注意してください。
[参考：DNSフォワーダ](https://jprs.jp/glossary/index.php?ID=0198)
[参考：ゾーン転送](https://jprs.jp/glossary/index.php?ID=0170)

#### 構成の確認
東京リージョン・大阪リージョンにそれぞれVPCを用意しています。
##### 東京リージョン側の構成
東京リージョン側のVPCにはRoute53PrivateHostedZoneを作成し、各EC2に対してAレコードを紐づけておきます。
今回は大阪⇒東京に対して名前解決をさせたいため、東京側のVPCにはRoute53のInboundEndpointを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/9ba678fa-ba2d-7ead-8292-cb795ee44f83.png)

大阪リージョン側にはRoute53のOutboundEndpointを作成し、Route53のリゾルバルール（転送ルール）にによりhttps-demo.comの名前解決を東京側のRoute53InboundEndpointに転送するよう設定しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/6e8ceb2c-9ec6-0474-31a2-ef3af0eab565.png)


東京VPCと大阪VPCはNW経路をつなげておく必要があるため、二つのVPC間でVPCピアリングを設定しておきます。
東京ー大阪の全体像は、下記の構成図のような形になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/646445fb-24c4-4589-3a5e-5e3212dfab68.png)


### 作業の流れ
#### 1.事前準備
※事前準備については別記事にて該当の手順をご紹介しているのでご参照ください。
##### 1-1.東京側事前準備
[VPCの作成](https://qiita.com/tonkatsu_oishi/items/ee5d7f64a43ba7deb671)
[EC2の作成](https://qiita.com/tonkatsu_oishi/items/aabddfa6b54f1a29d4af)
[PrivateHostedZoneの作成](https://qiita.com/tonkatsu_oishi/items/26f121d25db5c9fb7163)
##### 1-2.大阪側事前準備
[VPCの作成](https://qiita.com/tonkatsu_oishi/private/7693570c405344b8f602)
[EC2の作成](https://qiita.com/tonkatsu_oishi/private/20930488abe843d306af)
##### 2.東京ー大阪共通の設定
[VPCピアリングの作成](https://qiita.com/tonkatsu_oishi/private/2aa9a450a77ec9f5ea17)
#### 2Route53エンドポイント作成・転送ルール設定
##### 2-1.東京側設定
Route53InboundEndpointの作成
SGの設定
##### 2-2.大阪側設定
Route53OutboundEndpointの作成
SGの設定
Route53転送ルールの設定

### 構築手順
#### 東京側にRoute53InboundEndpointを作成する
まずは、東京側にRoute53のInboundEndpointを作成します。
リージョンが東京になっていることを確認し、
Route53のサービス画面を表示します。
左メニューから「インバウンドエンドポイント」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/311a74c5-4b57-6e77-0f2b-7a03bd6019f8.png)

IPアドレスの設定セクションです。
Route53のエンドポイントは、必ず2つのAZに対して作成されます。
まずは一つ目のAZを設定します。
アベイラビリティゾーンを選択し、エンドポイントを配置するサブネットを指定します。
IPアドレスは「自分で指定したIPv4アドレスを使用します」を押下し、IPを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/fc7d63e6-cc49-3d7e-5660-52be7c542303.png)

二つ目のAZについても、同じ要領で設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/06ad872b-58f9-0966-bab9-bc111faf1dfb.png)

インバウンドエンドポイントの作成画面が表示されます。
エンドポイント名・エンドポイント作成先のVPCを選択します。
エンドポイントに紐づけるSGを指定し、エンドポイントのタイプは「IPv4」とします。
エンドポイントのプロトコルを「Do53」に指定し、下へスクロールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/c5da1005-02c6-8b7a-8c84-224e57c9db5a.png)

タグの指定を行い、「インバウンドエンドポイントの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/baa47f47-5d39-59ea-91b9-21173803a6ef.png)


#### SGの設定
Route53のエンドポイントに指定したセキュリティグループでは、TCP/UDPにて53番ポートを許可する必要があります。
今回は、東京VPC（10.0.0.0/21)と大阪VPC（172.21.0.0/21)からの53番ポートの接続を許可しておきます。
画像は、東京側のRoute53InboundEndpointに設定しているセキュリティグループのインバウンドルール設定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/5df068d0-9cac-1527-5003-79b7dee51443.png)


#### 大阪側Route53OutboundEndpointの作成
大阪側にはRoute53のOutboundEndpointを作成しておきます。
リージョンが大阪になっていることを確認し、Route53のメニュー画面を表示します。
左メニューから「アウトバウンドエンドポイント」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/f65ccc51-394d-006d-db09-06c1494212f3.png)

エンドポイントの作成画面が表示されます。
VPCを選択し、エンドポイントに紐づけるSGを選択します。
エンドポイントのタイプは「IPv4」とし、プロトコルは「Do53」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/5bda430d-af58-6365-d5e6-4063269ec7b3.png)
IPアドレスの設定画面です。
一つ目のAZ・サブネットを選択します。
「自分で指定したIPv4アドレスを使用します」にチェックを入れ、IPアドレスを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/cce309c1-c047-7285-7cb7-41cf7d417b1c.png)
同じ要領で、二つ目のIPアドレスについても設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/55900cc0-ea46-1b5d-1c08-e21e00ff2601.png)
タグを設定し、「アウトバウンドエンドポイントの作成」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/74ecfb31-4c06-8c71-7a87-f4de61062d44.png)

#### SGの設定
OutboundEndpointのSGでも、TCP/UDPにて東京・大阪のIPアドレスを許可しておく必要があります。
画像は、OutboundEndpointに設定したSGの設定内容です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/10bd0179-3567-092b-3e29-ee18116eb197.png)

#### Route53転送ルールの設定
大阪リージョンにて、Route53の転送ルールを設定します。
Route53のサービス画面を表示し、左メニューから「ルール」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/30dd467e-158a-2d8c-230c-95e5b0ba76bc.png)
ルールの作成画面が表示されます。
名前を入力します。
ルールタイプは「転送」を選択します。
今回は東京リージョンに紐づけたhttps-demo.comというPrivateHostedZoneの名前解決ルールを設定するため、ドメイン名には「https-demo.com」を入力します。
ルールを紐づけるVPCを選択し、アウトバウンドエンドポイントは先ほど作成したものを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/adfb6401-fba2-3666-b9b3-706d9a6c4a59.png)
DNSクエリを転送する先のターゲットIPを入力します。
IPv4アドレスには、先程作成したRoute53OutboundEndpointのIPアドレスを指定します。
ポートは両方とも53番を指定し、伝送プロトコルはDo53を指定します。
タグの設定を行い、「送信」を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/b9475632-1101-2850-0923-723227d5f926.png)

#### 動作確認
名前解決が正常に行えるか確認します。
大阪リージョンの踏み台サーバ（172.31.0.5）にログインし、web-test.https-demo.comが名前解決できるかnslookupで確認します。
名前解決時の経路は下記図のようなイメージになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/302e1f7e-38b1-ff70-98f3-5e7df1c42f16.png)

下記のようにコマンドを実行し、結果が返ってくれば成功です。

 nslookup web-test.https-demo.com

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2237429/dbf56373-481f-b980-ff38-ecb704a8c1ed.png)

今回ご紹介する手順は以上となります。
ここまでお読みくださりありがとうございました。