「DNSがよくわかる教科書」を読んだ

# 初めに

書籍`DNSがよくわかる教科書`を読んで得たことを自分なりの表現でアウトプットし、知識を定着させることを目的としています。
この書籍は書店でたまたま見かけ、タイトルと序盤の内容を見て、DNSの知識に乏しい自分に合っていると思ったため、購入に至りました。

# 書籍紹介

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38724/cadb584b-e1e0-6e9f-427e-fcf7cf0dd38e.png">

https://www.amazon.co.jp/DNS%E3%81%8C%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8B%E6%95%99%E7%A7%91%E6%9B%B8-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E6%97%A5%E6%9C%AC%E3%83%AC%E3%82%B8%E3%82%B9%E3%83%88%E3%83%AA%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9-JPRS-%E6%B8%A1%E9%82%89%E7%B5%90%E8%A1%A3%E3%80%81%E4%BD%90%E8%97%A4%E6%96%B0%E5%A4%AA%E3%80%81%E8%97%A4%E5%8E%9F%E5%92%8C%E5%85%B8/dp/479739448X/ref=tmm_hrd_swatch_0?_encoding=UTF8&qid=1672575552&sr=1-1

DNSについて、基礎的なことから運用に関わる内容まで幅広く網羅している書籍です。
書籍内では、前半が基礎編でDNSに関しての知識的なところをカバーしています。後半に入ると、コマンドラインツールの紹介や、運用に関わる内容となっています。
運用面のお話も登場しますが、DNSの基礎だけ学びたい方にもおすすめです。

# 前提

知らなかったことや、知っていても改めて大事だと思ったことに絞って紹介します。
今回アウトプットする箇所は書籍前半の基礎的な箇所に限定します。

# ドメイン名のライフサイクル

ドメイン名は有効期限があります。
有効期限が過ぎると一定期間後にそのドメインは廃止され、再度登録が可能となります。

下図はjpドメインの例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38724/9c54f368-17c2-33fb-cd8b-dde4fa2c0508.png)
ドメインが廃止され、登録が可能になる瞬間を狙って登録することを`ドロップキャッチ`といいます。
<!--
ただし、後述の`サイバースワッティングとドメイン名紛争処理方針`にある通り、商標の侵害等、ドメイン名紛争処理方針（DRP）に該当する事由がない限りは登録を指し止めすることはできません。
-->
# サイバースワッティングとドメイン名紛争処理方針

サイバースワッティングとは、ドメイン名を不正な目的で登録、利用することをいいます。
ドメイン名紛争処理方針（DRP：Domain Name Dispute Resolution Policy）はサイバースワッティングに対応するための仕組みです。権利者の申し立てに基づいて審理を行い、ドメイン名の移転や取り消しを行います。法的拘束力は持ちませんが、ドメインの管理をしているレジストリはこれに従い移転や廃止手続きを行います。

# ドメインの階層化と委任

ドメインは階層化され管理されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38724/2d9fcf11-1f4a-2d18-5ddd-942b4a2fb3e1.png)
各階層のドメインが自身のドメインの管理を行っており、これらは上位のドメインから委任されて行われます。管理を委任された範囲をゾーンと呼びます。<!--図にはありませんが、ゾーンの情報を管理するサーバを`権威サーバ`と呼び、権威サーバはゾーンに存在するホストのドメイン名とIPアドレスの対応付け、また、子ゾーンの委任情報についても管理します。-->
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38724/23375b28-5519-1a76-8210-58fa27669fe7.png)

# 名前解決の流れ

名前解決は階層化されたドメイン構造のルートから末端へ辿るように問い合わせが行われます。厳密にはもう少し登場人物がいますが、流れに着目してシンプルにしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38724/ec654fe8-9e5b-9615-bb13-79d1c092f560.png)

# 構成要素と役割

DNS周辺に登場する大まかな構成要素として下記があります。
- スタブリゾルバー
末端の利用者PC内にある名前解決をするための窓口です。ブラウザ等のアプリケーションに名前解決のAPIを提供しています。
- フルリゾルバー
名前解決を行う役割を持ちます。スタブリゾルバーから要求を受け名前解決を行い、結果を返します。名前解決した情報は内部にキャッシュとして蓄えられます。
- 権威サーバ
自ゾーンの情報と委任しているゾーンの委任情報を保持します。

尚、前項に記載した名前解決の流れは、フルリゾルバーと権威サーバのやり取りとなります。
各要素を登場させた上での繋がりを下図に表します。
（問い合わせ部分は前項で説明したため省略とします）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38724/0124a17f-4a7f-2d57-c69f-877bb7cb79f9.png)

# 権威サーバの冗長化とゾーン転送

実際の運用では可用性を考慮し権威サーバを冗長化しますが、その際のデータ同期にゾーン転送という仕組みがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38724/4c7f47e4-2ab2-c2c5-35d0-9277a6c6bc05.png)
ゾーン転送には2種類あります。
- AXFR（Authoritative Transfer）
全てのゾーン情報を転送します。
- IXFR（Incrememtal Transfer）
差分のゾーン情報を転送します。

# キャッシュとネガティブキャッシュ

- キャッシュ
フルリゾルバーが権威サーバから受け取った名前解決の結果を一定時間保持する仕組み。
結果をキャッシュすることで、以降は同じ問い合わせを行う必要がなくなり、負荷と時間を軽減することができる。<!--
キャッシュはリソースレコードに設定されたTTL値に指定された秒数分保持される。
（TTL値は、本記事内の[リソースレコードの構成－TTL](#リソースレコードの構成 "")を参照）-->
- ネガティブキャッシュ
名前解決できない（リソースレコードが存在しない）という結果を一定時間保持する仕組み。効果はキャッシュと同様。
<!--キャッシュはリソースレコードに設定されたTTL分保持されるが、ネガティブキャッシュはリソースレコードが存在しないため、SOAリソースレコードのMINIMUM値で指定された秒数分保持されます。
（MINIMUM値は、本記事内の[リソースレコードの種類－SOA](#soa "")を参照）-->

# リソースレコード

権威サーバにはドメイン名とIPを対応付けるための情報としてリソースレコードを保持しています。リソースレコードはドメインとIPの対応付け以外にも、委任情報やメール配送情報も保持します。

# リソースレコードの構成

ドメイン名、TTL、クラス、タイプ、データで構成されます。

<!--
```:リソースレコードの例（digコマンドの出力結果を例に）
# ドメイン名 TTL クラス タイプ データ
example.jp   360   IN   A   192.0.1.10
```
-->

- ドメイン名
リソースレコードが示すドメイン名を表します。
- TTL（Time To Live）
リソースレコードをフルリゾルバーがキャッシュしてもよい時間です。単位は秒です。
- クラス
ネットワークの種類です。インターネットを意味するINが入ります。
:::note
DNSは当初、IP以外の通信にも対応できるよう、ネットワークの種類を指定できるように考慮されていました。しかし、インターネットの普及によりIN以外のクラスは使われなくなったようです。現在、IN以外のクラスは、いくつかのDNSサーバソフト固有の機能で使われているようです。
:::
- タイプ
リソースレコードの種類です。本投稿では以下のタイプを紹介します。
用途がそれぞれありますが、興味がある方は必要に応じ調べてみてください。

    | # | タイプ | 内容 |
    |:-:|:-|:-|
    | 1  | SOA | ゾーンの管理に関する情報が記載されたリソースレコードです。  |
    | 2  | NS | 委任に関する情報が記載されたリソースレコードです。  |
    | 3  | A | ドメイン名に対するIPv4アドレスが記載されたリソースレコードです。  |
    | 4  | AAAA | ドメイン名に対するIPv6アドレスが記載されたリソースレコードです。  |
    | 5  | MX | メール配送に関する情報が記載されたリソースレコードです。  |
    | 6  | CNAME | ドメイン名に対する正式名が記載されたリソースレコードです。  |
    | 7  | TXT | 任意の情報が記載されたリソースレコードです。  |
    | 8  | PTR | IPアドレスに対するドメイン名が記載されたリソースレコードです。  |

- データ
リソースレコードが持っているデータです。この値はタイプによって異なります。

<!--
# ゾーンファイルへのリソースレコード設定

:::note alert
例を挙げて、一部レコードだけでも良いので書き方を載せる。
:::
-->

# 最後に

非常にわかりやすい本であった。の一言。

最初は専門的な用語をあまり使わず、背景や全体像、仕組みを説明した後に、用語や細かなことを徐々に登場させ解像度を上げていくため、先頭から次々読んでいけば後戻りすることなく読める。

基礎知識の習得がしたかったため、後半の運用関連については時間があるときに読むことになるが、ぜひ読んでおきたいと思った。