ドメイン名とIPアドレスを対応づける名前解決を行うためのプログラム「リゾルバ」「再帰的」

## はじめに
AWSの資格試験勉強をしていて、良く出てくる **「リゾルバ」「再帰的」** について、改めて、整理する事で、理解を深めようと思い、内容を整理してみました。


## そもそも、再帰的とは？
大辞林 第三版の解説 
①　自己の行為の結果が自己に戻ってくること。フィードバック。
②　（数学などで）定義の中に定義されるものが含まれていること。

# リナックスのcommandで、『ls -R ディレクトリ名』と実行した場合、
その指定したディレクトリの中を再帰的に表示させる動作をします。
(lsの場合大文字のRが再帰的を表すオプションになります。)
**「ディレクトリ内に存在するものに一つ一つに対して処理をする」**

となって、際限なく表記しなくてはなりません(そうせざるを得ないです)。
それだとキリが無くなってしまうので、普通は「再帰的に行う」と表現します。

https://engineercollege.jp/%E6%9C%AA%E5%88%86%E9%A1%9E/46559976.html#:~:text=%E2%91%A0%20%E8%87%AA%E5%B7%B1%E3%81%AE%E8%A1%8C%E7%82%BA%E3%81%AE,%E5%90%AB%E3%81%BE%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%80%82

:::note info
「再帰的」とは、特定のタスクを完了するために**同じタスクを繰り返し実行するプロセス**を指します。DNSの文脈では、再帰的なリゾルバー（再帰リゾルバー）は、クライアントからのDNSクエリを受け取り、そのクエリに対する最終的な回答を得るために他のDNSサーバーに問い合わせを行う役割を果たします。
:::

### 再帰的リゾルバー
DNSクエリの解決を効率化し、クライアントに対して迅速かつ正確な応答を提供する重要な役割を果たします。再帰的なプロセスを通じて、再帰リゾルバーは他のDNSサーバーに問い合わせを行い、最終的な回答を得るために必要なすべてのステップを実行します。

:::note info
### 再帰的リゾルバーの特徴

**キャッシュ機能**
再帰リゾルバーは、以前に解決したクエリの結果をキャッシュに保存します。これにより、**同じクエリが再度送信された場合**、キャッシュから迅速に応答できます。

**再帰問い合わせ**
再帰リゾルバーは、クライアントの代わりに複数のDNSサーバーに問い合わせを行い、最終的な回答を得るために必要なすべてのステップを実行します。
:::

### 再帰的リゾルバーの利点

**簡便性**
クライアントは単一のリクエストを再帰リゾルバーに送信するだけで、最終的な回答を得ることができます。

**効率性**
キャッシュ機能により、同じクエリに対する応答時間が短縮され、ネットワークトラフィックが削減されます。



## リゾルバーとは？

:::note info
リゾルバー（resolver）は、コンピューターネットワークにおいて、**ドメイン名とIPアドレスを対応づける名前解決を行うためのプログラム**です。
:::
リゾルバーは、インターネットにおける重要なインフラの一つであり、ユーザーがWebサイトやメールサーバーなどにアクセスするために不可欠な役割を担っています。近年では、DNSSECなどのセキュリティ機能の強化や、CDN (Content Delivery Network) との連携など、リゾルバーの機能も進化しています。


Amazon Route 53 Resolverの転送ルールを適切に設定することで、DNSクエリの処理方法を柔軟に制御できます。__システムルール（再帰的）__ はデフォルトで設定されており、変更や削除はできませんが、転送ルールやオーバーライドルールを追加することで、特定のドメインに対するクエリをカスタムネームサーバーに転送することが可能です。これにより、ネットワークのDNS解決を効率的に管理できます。

:::note info
外部のDNSを使う場合は、VPCのDNSホスト名をオンにして、Route53アウトバウンドエンドポイント経由で、転送して、外部DNSサーバーに対応を任せます。この視点は、ソリューションアーキテクトプロフェッショナルやネットワークスペシャリティ試験で問われる切り口です。
:::


## DNSサーバーへの問い合わせプロセス

1. **キャッシュの確認** 
リゾルバーはまず、自身のキャッシュに問い合わせの結果が保存されていないか確認します。
2. **ルートDNSサーバーへの問い合わせ** 
キャッシュに結果がない場合、リゾルバーはルートDNSサーバーに問い合わせを行います。
3. **TLD（トップレベルドメイン）DNSサーバーへの問い合わせ** 
ルートDNSサーバーからTLD DNSサーバー（例: .com、.net）への問い合わせを行います。
4. **権威DNSサーバーへの問い合わせ** 
TLD DNSサーバーから権威DNSサーバー（ドメイン名の最終的な情報を持つサーバー）への問い合わせを行います。
5. **結果の取得とキャッシュ** 
権威DNSサーバーからIPアドレスを取得し、リゾルバーはその結果をキャッシュに保存します。

## リゾルバーの機能

| 機能名           | 説明                                                                                   |
|------------------|----------------------------------------------------------------------------------------|
| 名前解決         | ユーザーが入力したドメイン名（例: www.example.com）をIPアドレス（例: 192.0.2.1）に変換する役割を担います。これにより、ユーザーは覚えやすいドメイン名を使用してウェブサイトにアクセスでき、コンピューターは実際の通信に必要なIPアドレスを取得できます。 |
| キャッシュ機能   | 過去に解決したドメイン名とIPアドレスの情報をキャッシュすることで、次回以降のアクセスを高速化します。キャッシュにより、毎回ネームサーバーに問い合わせる必要がなくなり、ネットワーク負荷を軽減することができます。 |
| 再帰問い合わせ   | ユーザーに代わって名前サーバに問い合わせを行い、最終的なIPアドレスを取得する機能。ユーザーが入力したドメイン名に対応するネームサーバーが分からない場合、上位のネームサーバーに問い合わせ、解決に必要な情報を探します。 |
| フォワード機能   | 問い合わせを受けた名前サーバが、別の名前サーバに問い合わせを行う機能。 |
| タイムアウト機能 | 問い合わせに時間がかかりすぎた場合、処理を中止する機能。 |
| セキュリティ機能 | DNSSECなどのセキュリティ機能を用いて、ドメイン名の偽装やなりすましを防ぎ、安全な通信を確保します。 |

## リゾルバーの種類

| リゾルバーの種類         | 説明                                                                                     | 機能                                                                                     |
|----------------------|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
| スタブ・リゾルバー    | ユーザーの端末やアプリケーションに組み込まれたリゾルバー。                             | ネームサーバーへの問い合わせを効率化するために、キャッシュ機能や再帰問い合わせ機能などを備えています。 |
| フルサービス・リゾルバー | 専用のサーバーとして稼働するリゾルバー。                                             | スタブ・リゾルバーよりも高い性能と機能を持ち、より高度なセキュリティ対策や負荷分散機能などを提供します。 |

## 転送ルールタイプ


| ルールタイプ         | 説明                                                                                     | 機能                                                                                     |
|----------------------|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
| システムルール（再帰的） | これはデフォルトのルールであり、削除や変更ができません。このルールは、指定されたドメイン名が他のルールに一致しない場合に適用されます。 | 指定されたドメイン名のDNSクエリに対して、Route 53 Resolverは再帰リゾルバーとして動作します。インターネット上の他のDNSサーバーにクエリを順次伝達し、最終的にドメイン名に対応するIPアドレスを解決します。 |
| 転送ルール            | 指定したドメイン名のDNSクエリを、ネットワーク内の特定のネームサーバーに転送するルールです。                             | 例えば、`example.com`というドメイン名のクエリを特定のオンプレミスのDNSサーバーに転送するように設定できます。これにより、特定のドメインに対するクエリをカスタムネームサーバーで処理できます。 |
| オーバーライドルール    | 既存の転送ルールの動作を選択的に上書きするためのルールです。                                                           | 例えば、特定のサブドメイン（`sub.example.com`）に対するクエリを、異なるネームサーバーに転送するように設定できます。これにより、特定の条件下で異なる解決方法を適用できます。             |


### ご参考になれば幸いです。