AWS  DNS の基本


DNS(Domain Name System) 
==========
ここでは AWS ではなく、一般的なDNSの役割を記載します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/3b628e46-3ad7-6516-cefc-334a17532f74.png)

- ***Name Server***
クライアントから FQDN を探索し、自身が名前解決を行うサーバーを示します。

- ***Full Serivice Resolver***
ネームサーバーからの応答をクライアントに返す役割を示します。

- ***Stub Resolver***
フルサービスリゾルバーに名前解決の実行を委ねるリゾルバーです。
DNSクライアントとして名前解決を要求する側に位置しており、要求に対して応答を受けます。

- ***Forwarder***
要求を受け取った際に、ルールに沿って、中継する役割を示します。
ネームサーバーへ辿る反復問合せの機能を持たないため、常に再帰的問合せを行います。

- ***反復問合せ***
ネームサーバーに直接問合せ(名前解決を要求)をするもの

- ***再帰的問合せ***
問合せ先へ、反復問合せを要求する問合せ(フォワーダーを経由する問合せ)


VPC
============

VPC上に展開されるサービスの DNS を理解する上で、いくつかの用語の説明をします。

- ***Amazon Route 53 Resolver について***

Amazon Route 53 Resolver は VPC を作成するとデフォルトで作成され、VPC 内のインスタンスを名前解決するために AWS から提供されるAmazon DNS サーバーにマッピングされます。
後述のDHCPオプションセットに関する設定値に出てきますが、`AmazonProvidedDNS` は、`Amazon Route 53 Resolver` の旧称です。

***VPC を作成した際に指定する、IP アドレスの範囲(CIDR)において、先頭から 2 をプラスした IPアドレス が、DNSサーバー(前述のフォワーダー+フルサービスリゾルバー)として機能します。***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/6bac26c8-6189-ef5f-912d-4d0798f882b0.png)

- ***プライベート DNS ホスト名***
プライベートDNS ホスト名は、インスタンスのプライベート IPv4 アドレスに解決されます。通常、プライベート DNS ホスト名は、`ip-private-ipv4-address.region.compute.internal` の形式になります
プライベート DNS ホスト名は、同じネットワーク内のインスタンス間の通信に使用できます。

- ***パブリック DNS ホスト名***
パブリック DNS ホスト名は、インスタンスのパブリック IPv4 アドレスに解決されます。パブリック DNS ホスト名には `ec2-public-ipv4-address.region.compute.amazonaws.com` という書式が使用されます。

Amazon DNS サーバーがパブリック DNS ホスト名を解決すると、インスタンスはパブリック IPv4 アドレスおよびインスタンスのプライベート IPv4 アドレスから構成されます。

Setting on VPC
=================
VPC にはDNSに関する設定値が存在します。

`1. DNS 解決(DNS resolution)
値: 有効/無効
`

デフォルトは`有効`です。
有効化すると、DNS 解決がサポートするかどうかを決定します。
有効である場合、パブリック DNS ホスト名を IP アドレスに名前解決するための Amazon Route 53 Resolverが使用されます。
無効である場合、Amazon Route 53 Resolverが使用出来ません。

`2. DNS ホスト名(DNS hostnames)
値: 有効/無効
`

デフォルトは`有効`です。
パブリック IP アドレスを持つインスタンスが、対応するパブリック DNSホスト名(FQDN)を取得するかどうか示します。
DNSホスト名は、ホスト名とドメイン名で構成され、DNS サーバーが DNS ホスト名を対応する IP アドレスに解決します。
有効である場合、VPC 内のインスタンスは DNS ホスト名を取得し、無効の場合は取得をしません。

***なお、DNSホスト名の有効化は、DNS 解決が有効である場合に限ります。***

`3. DHCPオプションセット`

VPC単位でDHCPオプションセットを1つ付与出来ます。
DHCPのオプションフィールドに設定された情報が、VPC内で起動したインスタンスに反映されます。
DHCPオプションセットに適用する基本的な設定を2点挙げます。

`3-1 ドメイン名`
ドメイン名を指定します。
Amazon Route 53 Resolver(AmazonProvidedDNS)を使用しない場合、カスタムドメインネームサーバーが必要に応じてホスト名を解決する必要があります。
後述の Amazon Route 53プライベートホストゾーンを使用する場合は、Amazon Route 53 Resolverを使用する必要があります。
デフォルトVPC に付与されているDHCPオプションセットでは `region.compute.internal` というドメイン名が設定されます。

`3-2 ドメインネームサーバー`
デフォルトは Amazon Route 53 ResolverのIP で、指定しないと Amazon Route 53 Resolver(AmazonProvidedDNS) が設定されます。
その他、別のドメインネームサーバーを使用する場合、最大4つのIPアドレスを指定出来ます。

----------------------------
***これらの設定から VPC の各パラメーターを有効/無効 にした場合の名前解決を以下に示します。***

- DNS 解決 / DNS ホスト名をいずれも有効とした場合の名前解決はどうなるか。

***パブリックDNSホスト名が付与されます。***
***Amazon Route 53 Resolver(AmazonProvidedDNS)によりプライベートDNS名の名前解決が可能となります。***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/78b8d3e0-1d0d-f6f0-2a3d-e156471192a6.png)

- DNS 解決 / DNS ホスト名をいずれも無効とした場合の名前解決はどうなるか。

***パブリック IP アドレスを持つインスタンスは、対応するパブリック DNS ホスト名を受け取りません。***
***Amazon Route 53 Resolver は、Amazon が提供するプライベート DNS ホスト名を解決できません。***
***DHCP オプションセットで、AmazonProvidedDNS による解決は出来ないため、カスタムドメイン名あるいAmazonProvidedDNS以外のIPアドレスを指定して、カスタムドメインネームサーバーがホスト名を解決する仕組みが必要です。***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/84886446-38d0-c659-de5e-c364d4c62c18.png)



Amazon Route 53
===================
上述では Amazon Route 53 Resolver が多く出てきましたが、マネージドサービスとしての Route53 について触れます。

Route53 の DNS に関連する事項を記載します。

- ***新規ドメインの登録***

新しいドメイン名を取得する場合は、ドメイン名を Amazon Route 53 に登録することができますが、登録後のドメインの値の変更は出来ません。
また、他のプロバイダから Route53 へドメインの移管も可能です。
但し、Amazon Route 53 でドメインを登録するために使用できる最上位ドメイン (TLD) には指定がありますので、これに準拠するドメインのみ Route53 での登録が可能です。

Amazon Route 53 に登録できる最上位ドメイン

https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/registrar-tld-list.html

- ***DNS として機能する Route53***

これは、以下の2ケースに分けられます。
後述する zone は名前空間の形成構造を示すもので、ここではローカルドメインとインターネットとして二つのzoneに分離されます。

- ***Public Host Zone***

インターネットに公開された DNS ドメインのレコードを登録する事が可能で、レコードに紐づくドメインをルーティングし、要求元に返すコンテナです。
上述のRoute53 にドメインを新規登録すると、そのドメインのホストゾーンが自動的に作成されますが、既存のドメインの DNS サービスとして Route53 に転送する場合、Public Host Zone を作成する際に、一意のドメイン名を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/5eb394f9-c88a-9494-d004-720e8c41501b.png)

- ***Private Host Zone***

VPC 上に閉じたプライベートネットワーク内(ローカルドメイン)のドメインのレコードを登録する事が可能で、レコードに紐づくIPを要求元に返すコンテナです。
Private Host Zone を作成する際に、作成するzoneのドメイン名と、これに紐づく VPC を選択する必要があります。
名前解決では、プライベートホストゾーンに関連付けた VPCでリソースを実行している必要があり、DNSクライアントから DNSクエリを送信すると、Route53 は対応する IP アドレスを返します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/0a72de03-3721-81aa-707c-98f24e7d18d1.png)

レコードを作成するときは、Amazon Route 53 がクエリに応答する方法を決定するルーティングポリシーを選択できます。

```
- シンプルルーティングポリシー – ドメインで特定の機能を実行する単一のリソースがある場合に使用します。例えば、example.com ウェブサイトにコンテンツを提供する 1 つのウェブサーバーなどです。
- フェイルオーバールーティングポリシー – アクティブ/パッシブフェイルオーバーを構成する場合に使用します。
- 位置情報ルーティングポリシー – ユーザーの位置に基づいてトラフィックをルーティングする場合に使用します。
- 地理的近接性ルーティングポリシー – リソースの場所に基づいてトラフィックをルーティングし、必要に応じてトラフィックをある場所のリソースから別の場所のリソースに移動する場合に使用します。
- レイテンシールーティングポリシー – 複数の AWS リージョンにリソースがあり、より少ない往復時間で最良のレイテンシーを実現するリージョンにトラフィックをルーティングする場合に使用します。
- 複数値回答ルーティングポリシー – ランダムに選ばれた最大 8 つの正常なレコードを使用して Route 53 が DNS クエリに応答する場合に使用します。
- 加重ルーティングポリシー – 指定した比率で複数のリソースにトラフィックをルーティングする場合に使用します。
```

なお、各ゾーンでサポートされる DNS レコードタイプは以下のいずれかです。

```
A レコードタイプ
AAAA レコードタイプ
CAA レコードタイプ
CNAME レコードタイプ
DS レコードタイプ
MX レコードタイプ
NAPTR レコードタイプ
NS レコードタイプ
PTR レコードタイプ
SOA レコードタイプ
SPF レコードタイプ
SRV レコードタイプ
TXT レコードタイプ
```


- ***Route 53 Resolver のエンドポイント使用***

Route 53 Resolver エンドポイントは、DNSクエリを VPCから特定のネットワークへ、あるいは特定のネットワークからVPCへ、または双方にルーティングするためにリゾルバーが必要とする情報を提供します。

- ***Inbound Endpoint***

ネットワークから Resolver に DNS クエリを転送するには、インバウンドエンドポイントを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/f887e7b5-e3f1-2027-95fc-6e8febccac75.png)

インバウンドエンドポイントを作成する場合、以下の情報が必要です。

```
- 対象のVPC
- エンドポイントに対するセキュリティグループ
- Inbound Endpoint のIPアドレス２つ(VPC上のサブネットを指定し、範囲内のIPを指定あるいは、AWSから自動で選択いただきます)
```

- ***Outbound Endpoint***

VPC上にあるインスタンスから発信された DNS クエリを、各ネットワークに転送するには、アウトバウンドエンドポイントを作成します。
アウトバウンドエンドポイントは、クエリの送信元の IP アドレスを指定します。VPC で使用できる IP アドレスの範囲から選択するこれらの IP アドレスは、パブリック IP アドレスではありません。つまり、アウトバウンドエンドポイントごとに、AWS Direct Connect 接続、VPN 接続、またはネットワークアドレス変換 (NAT) ゲートウェイを使用して VPC をネットワークに接続する必要があります。同じリージョン内の複数の VPC で、同一のアウトバウンドエンドポイントを使用することも、複数のアウトバウンドエンドポイントを作成することもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/ed87b1ec-f084-dc0c-38c8-a2fe076706c7.png)

アウトバウンドエンドポイントを作成する場合、以下の情報が必要です。

```
- 対象のVPC
- エンドポイントに対するセキュリティグループ
- Outbound Endpoint のIPアドレス２つ(VPC上のサブネットを指定し、範囲内のIPを指定あるいは、AWSから自動で選択いただきます)
- アウトバウンドトラフィックに関するrule

アウトバウンドのruleの設定値は以下となります。

-　転送(Forward) 
指定のアドレスに DNS クエリを転送し、指定したドメイン名が一致すれば、ネームサーバーへルーティングされます。 Target IP /ドメイン名/ 適用するアウトバウンドエンドポイントの情報が必要。

- System
特定のドメインを上記転送ルールで転送した後、転送対象ドメインの特定サブドメインのみをインターネット上に向けます。ドメイン名が必要です。
```