インフラのコード化: AWS上でTerraformを使って構築したAD/DNSサーバー（Windows）で名前解決を試してみた

## はじめに
今回は、前回および前々回の内容に引き続き、Terraformで構築したADサーバー兼DNSサーバーを使い、DNSの名前解決に関する技術検証を行います。

:::note info
**DNSがセットアップ済みの状態から、簡単なAレコードを追加し、ローカルのMacBookとWindows 11端末で名前解決を試してみます。**
:::

この記事は、個人レベルの検証をもとに作成しています。**そのため、内容が実運用環境に適さない場合がありますので、ご了承ください。**

***この内容が、どなたかの技術的な参考になれば幸いです。***

## 書こうと思ったきっかけ

普段、自宅のDNSサーバーで名前解決を行う際には、GoogleのパブリックDNS（8.8.8.8など）にフォワードする設定を使用しています。

:::note warn
***しかし、いつかは自分でも外向けのインターネットに公開されたDNSサーバーを作りたいと考えていました。***
:::

今回、ようやく時間を作って外向けDNSサーバーを構築できたので、ローカル環境から名前解決が可能かどうか、技術検証を行うことにしました。

## 前提: 前回の続きです
前回および前々回の記事では、Terraformを使ってWindowsサーバーを構築し、リモートデスクトップ接続の設定方法、さらにActive DirectoryとDNSサーバーの構築手順をご紹介しました。

***興味のある方は、以下の記事を参考にしてみてください！***

https://qiita.com/free-honda/items/bb905ccc557844a41afa

https://qiita.com/free-honda/items/d9614052e0bfa9881864

## 名前解決とは？
名前解決とは、インターネットやネットワーク上でホスト名（例: ```www.yahoo.co.jp```）を対応するIPアドレスに変換するプロセスです。

![スクリーンショット 2024-11-23 17.05.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/1a1d86a8-5f35-4a3c-29b0-0ea98a539726.png)
引用画像：https://www.value-domain.com/media/a-record/

このプロセスが正常に動作することで、Webサイトの閲覧やネットワークサービスの利用が可能になります。

***DNSを利用した名前解決については、以下の記事も参考にしてみてください！***

https://qiita.com/free-honda/items/807b36c839f49d7bdb47

## 補足: セキュリティグループのインバウンドルールを変更しています
前回のTerraformコードでは、インバウンドルールにリモートデスクトップ接続（RDP）のみを追加していましたが、今回は新たにICMPとDNSを追加しています。

![Screenshot 2025-01-10 at 7.34.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a1223f3a-2e9c-bf6b-a5b5-3402b4dc0c58.png)

### セキュリティグループのインバウンドルールの概要
簡単に表形式でまとめると以下の通りです。

| 項目                   | 設定内容                         |
|------------------------|----------------------------------|
| **プロトコル**          | ICMP / DNS / RDP               |
| **ポート番号**          | それぞれ                              |
| **ソース**              | 0.0.0.0/0                      |
| **用途**               | Ping疎通確認、名前解決、RDP接続 |

### 変更の目的

これらのインバウンドルールが許可されていない場合、以下の操作が失敗する可能性があります。

- **`Ping`コマンド**  
  - ICMPが許可されていないと疎通確認ができません。

- **`nslookup`コマンド**  
  - DNSが許可されていないと名前解決に失敗します。


実際、これらのインバウンドルールが許可されていない場合、`Ping`コマンドによる疎通確認や`nslookup`コマンドによる名前解決が正しく動作しない可能性があります。

**実際の失敗画面**

![Screenshot 2025-01-10 at 7.36.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/5fa98926-93ce-f1b1-de43-f17a4b16f953.png)

外向けインターネットに公開されているDNSサーバーについては、外部からのアクセスを許可する必要があるため、今回の変更で追加設定を行いました。

**実際の失敗画面**

![Screenshot 2025-01-10 at 7.37.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/caa73217-7903-55e9-016b-9780c8cce688.png)

次回以降、Terraformコードを修正し、これらのインバウンドルールの設定をコードに反映する予定です。**ただし、今回は手動でルールを追加しました。**

## 実際にAレコードを追加してみた
ここでは、リモートデスクトップ接続を使用して、以下のAレコード情報を前方参照ゾーンに追加します。
（**※サーバー構築時の画面は日本語ではなく英語になっていますのでご了承ください。**）


| 項目          | 詳細                  |
|---------------|-----------------------|
| **Host**      | honda                |
| **FQDN**      | honda.example.local  |
| **IPアドレス**| 1.1.1.1              |


:::note warn
***その後、ローカル環境のMacBookとWindows 11端末から`nslookup`コマンドを使用し、名前解決を行って正しいIPアドレスが返ってくることをゴールとします。***
:::

### DNSアプリケーションを開く
管理画面からDNSのアプリケーションを開き、前方参照ゾーンを選択します。

![Screenshot 2025-01-10 at 8.16.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/abf14507-816e-9fee-d185-5e99d174be62.png)

### レコードの追加
画面上の「レコードの追加」をクリックし、以下の情報を入力してAレコードを作成します。

![Screenshot 2025-01-10 at 8.17.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/bda24190-06ed-b67e-44a5-04bd65eca479.png)

### 追加の確認
作成したレコードが正しく追加されていることを確認します。

![Screenshot 2025-01-10 at 8.21.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/84c08025-1a84-9078-757f-96a9fef3f559.png)

***作成したAレコードが正しく追加されていることを確認できたため、サーバー内での作業はこれで完了です！***

## ローカル端末から名前解決を試してみた
私の端末ではGoogleのDNSサーバーが設定されていますが、この設定を変更せずに名前解決を確認するため、別の方法を使用しました。

:::note
**名前解決には、nslookupコマンドのインタラクティブモードを利用します。**
:::

***このモードを使用することで、端末のDNS設定を変更することなく、名前解決の技術検証が可能です。***

詳しくは過去の記事でも解説していますので、参考にしてみてください

https://qiita.com/free-honda/items/c806d24f127128db760b

### MacBookでの名前解決
以下はMacBookでnslookupを使用した名前解決の例です。

```bash
➜  ~ nslookup
> server 35.74.27.248
Default server: 35.74.27.248
Address: 35.74.27.248#53
> honda.example.local
Server:		ec2-35-74-27-248.ap-northeast-1.compute.amazonaws.com
Address:	35.74.27.248#53

Name:	honda.example.local
Address: 1.1.1.1
```


### Windows 11での名前解決
以下はWindows 11端末でのnslookupによる名前解決の例です。

```cmm
C:\Users\user>nslookup
既定のサーバー:  dns.google
Address:  8.8.8.8

> server 35.74.27.248
既定のサーバー:  ec2-35-74-27-248.ap-northeast-1.compute.amazonaws.com
Address:  35.74.27.248
> honda.example.local
サーバー:  ec2-35-74-27-248.ap-northeast-1.compute.amazonaws.com
Address:  35.74.27.248

名前:    honda.example.local
Address:  1.1.1.1
```

私の両方のローカル環境の端末から名前解決が正常に行われ、正しいIPアドレスが返っていることを確認できました。**今回の検証は大成功です！**

## まとめ
ここまでお読みいただきありがとうございました。***DNSや名前解決については、これまで多く学んできたこともあり、今回の技術検証はスムーズに進めることができました！***

:::note info
**今後の計画として、自宅のDNSサーバーのフォワード先を今回作成したDNSに設定し、その後GoogleのパブリックDNS（優先DNS）にフォワードする設定を追加し、名前解決を試してみたいと考えています。**
:::

次回の検証では、Wiresharkというアプリケーションを使用してパケットキャプチャを取得し、ネットワーク通信を解析しながら進める予定です。