AWSのRoute53のプライベートホストゾーンでDNSの逆引き設定をする。

# はじめに
先日、VPC内のEC2インスタンスのホスト名をIPアドレスから逆引きできるようにする必要が出てきたので、やったことを紹介しておこうと思います。

# Amazon Route53での逆引き設定
通常、ホスト名からIPアドレスを検索することを**正引き**と呼び、IPアドレスからホスト名を検索することを**逆引き**と呼びます。

正引きはインターネット上のサイトアクセスでも使われている基本機能で、AWSでも例えばRoute53で内部用のプライベートドメインを作成して任意のホスト名・ドメイン名でアクセスできるようにしている方は多いかと思います。

しかし、逆引きは必須となるような機会が少なく、正引きほど使われる機会が少ないため、いざ設定するときに悩まれる方も多いかと思います。

AWSのRoute53に限らずDNSで逆引きを行うためには正引きゾーンとは別の逆引き用ゾーンを作成して、`PTR`のタイプでレコードを作成する必要があるため、以下よりRoute53で逆引き用のプライベートホストゾーンを作成し、逆引き用レコードを作成してみたいと思います。

# DNSの逆引きについて
DNSの仕組みについて説明すると長くなる上に今回の目的から外れるので、簡単に要点だけ記載します。

詳しくは他のサイトや書籍を参考にしてください。

例えば逆引きで`10.0.0.200`のホスト名を問い合わせた場合、IPアドレスについても上位のCIDRブロックから検索していくので、DNSの問い合わせは`200.0.0.10.in-addr.arpa`といった形式となり、正引きのときと同様、右から順にDNSサーバへ問い合わせを行います。
※上位のCIDRから検索していくため、IPアドレスの表記は逆順となります。

逆引きを行う場合、問い合わせ時にIPアドレスが反転した形に変換され、`in-addr.arpa`が固定で付与されるため、実際にコマンド等で入力したIPアドレスとは異なる形式で問い合わせが行われる点に注意してください。

逆引き用のプライベートホストゾーンを作成するためには、逆引きの形式でゾーンを作成する必要があるため、例えば自分で管理している10.0.0.0/24のネットワークの逆引き設定を行いたい場合は「**0.0.10.in-addr.arpa**」のような形でプライベートホストゾーンを作成し、レコードでIPアドレスの末尾をホスト名と結びつけます。

以下より実際にプライベートホストゾーンの作成と逆引き用レコードの作成を行っていきます。

# 今回作成する逆引き用ゾーンについて
今回の環境では、事前に`10.1.0.0/16`のVPCにテスト用で`10.1.0.209`のEC2インスタンスを作成しておりますので、このVPC用の逆引きを行うようにしたいと思います。

## 逆引き用レコード作成前の問い合わせ結果
逆引き用プライベートホストゾーンを作成する前に、現時点での逆引き結果がどうなるか確認してみようと思います。

これはVPCのDNS設定にもよりますが、以下のように表示されます。

```bash:逆引きレコード登録前のnslookupの結果
$ nslookup 10.1.10.209
209.10.1.10.in-addr.arpa	name = ip-10-1-10-209.ap-northeast-1.compute.internal.

Authoritative answers can be found from:

```

EC2インスタンスの設定を見ると、「**プライベートIP DNS名**」が表示されますが、特に何もしなくてもEC2インスタンスを作成した際にデフォルトで割り当てられているため、VPCのDNS設定で「**DNSホスト名を有効化**」が有効になっていれば上記のようなPTRレコードが返されます。

![Monosnap_20240929_152956.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/3c0662f2-09de-8bd1-726f-d67568d29478.png)

もし「**DNSホスト名を有効化**」が有効になっていない場合はデフォルトで割り当てられているプライベートIP DNS名が返されないため以下のように何も応答がありません。

```bash:逆引きレコード登録前のnslookupの結果（DNSホスト名設定が無効化の場合）
$ nslookup 10.1.10.209
** server can't find 209.10.1.10.in-addr.arpa: NXDOMAIN

```

## 逆引き用プライベートホストゾーンの作成
以下より実際にプライベートホストゾーンを作成していきます。

「**Route53ダッシュボード**」より「**ホストゾーン**」→「**ホストゾーンの作成**」から以下のようにホストゾーンを作成していきます。

|項目|設定|
|:--|:--|
|ドメイン名|1.10.in-addr.arpa|
|説明|※空欄|
|タイプ|プライベートホストゾーン|
|リージョン|アジアパシフィック（東京）|
|VPC ID|※VPC IDを指定|
|タグ|※今回は未設定|

逆引き用プライベートホストゾーン作成後、「**レコードを作成**」よりEC2インスタンスのIPをレコード名とし、値には、今回は適当に`www.awstest.local`という名前を割り振ろうと思います。

![Monosnap_20240929_140026.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/df2703c9-b72c-0c1f-f508-617f986841cc.png)

|項目|設定|備考|
|:--|:--|:--|
|レコード名|209.10.1.10.in-addr.arpa|`.1.10.in-addr.arpa`は記載済みのため、前半部分のみ設定|
|レコードタイプ|PTR - IPアドレスをドメイン名にマッピングします。|逆引きレコードを登録するためPTRを設定|
|エイリアス|無効|エイリアスは使用しない|
|値|www.awstest.local|今回は`www.awstest.local`とする|
|TTL(秒)|300|今回はデフォルトのままとする|
|ルーティングポリシー|シンプルルーティング|今回はデフォルトのままとする|

正常に追加されれば、以下のようなPTRレコードが登録されているかと思います。

![Monosnap_20240929_141748.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/3ac2e139-a0a9-63a5-dbaa-a89b95e332fb.png)

## 逆引き用レコード作成後の問い合わせ結果
レコード作成後、再度`nslookup`コマンドで確認してみます。

```bash:逆引きレコード登録後のnslookupの結果
$ nslookup 10.1.10.209
209.10.1.10.in-addr.arpa	name = www.awstest.local.

Authoritative answers can be found from:

```

先程はEC2にデフォルトで割り振られる「**プライベートIP DNS名**」が返ってきていましたが、レコード追加後はレコード設定した値（今回の場合`www.awstest.local`）が返されることが確認できると思います。

なお、今回は正引きゾーンの設定は行っていないため、`www.awstest.local`を正引きしても`10.1.10.209`が返されることはないので、別途正引きゾーンの設定を行ってください。

# おわりに
正引きゾーンは使われる機会が多いため、設定したことがある方も多いかと思いますが、逆引きゾーンはあまり使われる機会が多くないので、いざ設定するときに困ってしまうこともあるかと思います。

逆引きの設定で悩んだ方の助けになれば幸いです。