【勉強メモ】DNSの仕組み

DNSの概要を理解するために、ざっくりとまとめたメモです。

# DNS (Domain Name System)とは
システム・サーバー間の通信を行う際に、
[ドメイン名](#ドメインとは)とIPアドレスの対応付け（名前解決）や、宛先ホストを指示するためのシステム。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/de35e5ec-698a-aecc-ad4d-e400732233b0.png)

## DNSを使った問い合わせの流れ

DNSサーバはサーバを分散させたり、キャッシュを行うことで、
大量のアクセスにも耐えられるようになっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/06435afb-0948-0953-415e-c0d81f5fc528.png)

① WebサーバのIPアドレスの確認のため、DNSキャッシュサーバに問い合わせ。
② DNSキャッシュサーバは、過去にあった問い合わせ情報を確認。
　 情報なし、または、有効期限（TTL）切れの場合、ルートDNSサーバに問い合わせ。
　 （情報があった場合は、過去に問い合わせ済のIPアドレスを回答）
③ DNSルートサーバは、管理情報（IPアドレスなど）を持っているDNSサーバ `.com` を回答。
④ DNSキャッシュサーバは、③で回答されたDNSサーバ `.com` に問い合わせ。
⑤ DNSサーバ `.com` は、管理情報を権限移譲していため、そのDNSサーバー `aaa.com` を回答。
⑥ DNSキャッシュサーバは、⑤で回答されたDNSサーバ `aaa.com` に問い合わせ。
⑦ DNSサーバ `aaa.com` は、管理情報を持っているため、IPアドレスを回答。
⑧ DNSキャッシュサーバは、問い合わせできたIPアドレスで、クライアントに回答。
⑨ クライアントは、IPアドレスでWebサーバにアクセス。

### 参考サイト
* [【図解】DNSサーバーとは？設定・変更と確認方法 | カゴヤのサーバー研究室](https://www.kagoya.jp/howto/rentalserver/dns-server/)
* [インターネット10分講座 DNS - JPNIC](https://www.nic.ad.jp/ja/newsletter/No22/080.html)
* [DNSの仕組みの基本を理解しよう：DNSの仕組みと運用（1） - ＠IT](https://atmarkit.itmedia.co.jp/ait/articles/0112/18/news001.html)


## DNSルートサーバ
DNSキャッシュサーバーが最初に問い合わせをするサーバーで、世界中に13機のみ。

## DNSキャッシュサーバ（フルリゾルバ）
ドメイン名に対応するIPアドレス情報を一時的に保存しているサーバ。
過去に問い合わせ済であれば、そのIPアドレスを回答し、
問い合わせなし、または、有効期限（TTL）切れの場合、ルートDNSサーバに問い合わせを行う。

IPアドレスをキャッシュすることで、
「DNS問い合わせの処理時間短縮」「ルートDNSサーバの負荷軽減」を実現。

### 参考サイト
* [インターネット10分講座：DNSキャッシュ - JPNIC](https://www.nic.ad.jp/ja/newsletter/No51/0800.html)
* [DNSキャッシュサーバとは | OSSのデージーネット](https://www.designet.co.jp/faq/term/?id=RE5T44Kt44Oj44OD44K344Ol44K144O844OQ)

## TTL（Time To Live）
DNSキャッシュサーバがキャッシュする情報の有効期限。
TTLが有効な間は、DNSキャッシュサーバー上にあるIPアドレスをクライアントに回答するが、
期限が切れた場合は、キャッシュから情報を削除し、
再度DNSルートサーバに問い合わせして最新情報を取得する。

# DNSレコード
IPアドレスや権限移譲先のDNSサーバなどの情報など、DNSサーバに登録されているレコード。
DNSの問い合わせは、このレコードをDNSサーバが回答することで、名前解決を行っている。

|レコード種別|内容|
|:--|:--|
|A|ホストのIPアドレス（IPv4）|
|AAAA|ホストのIPアドレス（IPv6）|
|SOA|ゾーン（ドメイン）情報|
|NS|ドメインのDNSサーバ名|
|CNAME|ホスト名のエイリアス（別名）|
|PTR|IPアドレスに対するホスト名（逆引き）|
|MX|ドメインのメール・サーバ名|
|HINFO|ホストの追加情報。ホストのハードウェア・ソフトウェア（OS）情報。|
|WKS|ホストで実行されているサービス情報（Well Known Services）|
|TXT|ホストへのテキスト情報|

## Aレコード
ホストのIPアドレス（IPv4）を示すレコード。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/73b31733-c54f-0910-b880-fb7241ff2a92.png)

|項目|設定値(例)|説明|
|:--|:--|:--|
|Name|`www.aaa.com.`|ドメイン名|
|TTL|300|キャッシュサーバ上でのレコードの有効期限|
|Type|A|レコード名|
|Value|123.456.789.123|IPアドレス（IPv4）。複数設定可能。|

## SOAレコード
DNSサーバの親・子のうち、子のみが保有し、ドメインのゾーンの起点（親）を示すレコード。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/e1c9f177-aba9-8721-a1c9-265ae556d3a8.png)

|項目|設定値(例)|説明|
|:--|:--|:--|
|Name|@|「@」の場合ゾーン名自身を示す。|
|TTL|300|キャッシュサーバ上でのレコードの有効期限|
|Type|SOA|レコード名|
|Value|aaa.com. <br>email.aaa.com. <br>1 <br>7200 <br>900 <br>1209600 <br>86400|＜MNAME＋RNAME＋SERIAL＋REFRESH＋RETRY＋EXPIRE＋MINIMUM＞<br>MNAME：基となるデータを持つネームサーバの名前<br>RNAME：このドメインの管理者のメールアドレス（@は.に置換）<br>SERIAL：ゾーンファイルのバージョン<br>REFRESH：ゾーンの情報をリフレッシュするまでの時間<br>RETRY：REFRESHでリフレッシュNGのときのリトライの時間<br>EXPIRE：リフレッシュNG時の、セカンダリネームサーバ上のデータ有効時間<br>MINIMUM：ネガティブキャッシュ（存在しないドメイン情報）の保有時間|

* [＠IT：DNS Tips：SOAレコードには何が記述されている？](https://atmarkit.itmedia.co.jp/fnetwork/dnstips/014.html)

## NSレコード
ドメインのDNSサーバ名を示すレコードで、
DNSサーバの親・子双方で保有し、権限移譲の状態を表している。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/c7cb9483-c58c-5b8d-e597-1708d5be2016.png)

**【例】子DNSサーバ：`aaa.com`（Aレコード(IPアドレス)保有しているサーバ）**

|項目|設定値(例)|説明|
|:--|:--|:--|
|Name|@|「@」の場合ゾーン名自身を示す。|
|TTL|300|キャッシュサーバ上でのレコードの有効期限|
|Type|NS|レコード名|
|Value|`www.aaa.com.`|権限移譲先のネームサーバ（子DNSサーバ自身）|

**【例】親DNSサーバ：`com`（Aレコードを持っておらず、子サーバに権限移譲している）**

|項目|設定値(例)|説明|
|:--|:--|:--|
|Name|aaa|子DNSサーバ名（最後の「.」なしで、後ろの「.com.」を省略）|
|TTL|300|キャッシュサーバ上でのレコードの有効期限|
|Type|NS|レコード名|
|Value|`www.aaa.com.`|権限移譲先のネームサーバ（子DNSサーバ）|


## CNAMEレコード
ホスト名のエイリアス（別名）を示すレコード。（Canonical NAME）
特定のホスト名を、別のドメインに転送できる。

以下の例だと、
`http://www.aaa.com`のアクセスを、`http://www.bbb.com`に転送する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/a938155f-43e6-7bac-e81c-f3284edd81ab.png)

**【例】DNSサーバ：aaa.com**

|項目|設定値(例)|説明|
|:--|:--|:--|
|Name|www|ホスト名（最後の「.」なしで、後ろの「.aaa.com.」を省略）|
|TTL|300|キャッシュサーバ上でのレコードの有効期限|
|Type|CNAME|レコード名|
|Value|`www.bbb.com`|転送先のドメイン|


### 参考サイト
* [DNSの仕組みの基本を理解しよう：DNSの仕組みと運用（1） - ＠IT](https://atmarkit.itmedia.co.jp/ait/articles/0112/18/news001.html)
* [レコードの種類9つ紹介！DNSの概要や特徴についても解説 | テックマガジン from FEnetインフラ](https://www.fenet.jp/infla/column/server/%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E7%A8%AE%E9%A1%9E9%E3%81%A4%E7%B4%B9%E4%BB%8B%EF%BC%81dns%E3%81%AE%E6%A6%82%E8%A6%81%E3%82%84%E7%89%B9%E5%BE%B4%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)
* [親の心子知らず？委任にまつわる諸問題について考える～ランチのおともにDNS～](https://jprs.jp/tech/material/iw2012-lunch-L3-01.pdf)（PDF）
* [IIJ DNSプラットフォームサービス オンラインマニュアル - DNSレコードの登録ルール](https://manual.iij.jp/dpf/help/19629152.html#DNS%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E7%99%BB%E9%8C%B2%E3%83%AB%E3%83%BC%E3%83%AB-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%82%BF%E3%82%A4%E3%83%97%E3%81%94%E3%81%A8%E3%81%AE%E7%99%BB%E9%8C%B2%E3%83%AB%E3%83%BC%E3%83%AB)
* [＠IT：DNS Tips：ゾーンファイルの書き方について教えてください](https://atmarkit.itmedia.co.jp/fnetwork/dnstips/031.html)
* [【ドメイン】DNSレコード設定の各レコードの意味を教えてください。｜ヘルプサポート | ドメイン取るならお名前.com](https://help.onamae.com/answer/7883)

# ドメインとは
インターネット上に存在するコンピューターやネットワークを識別するための名前。

サーバーにアクセスするにはIPアドレスが使われるが、数字だと分かりにくいため、
IPアドレスとセットになる名前（＝ドメイン）を使うことで、ホスト名を管理しやすくしている。
（郵便番号と住所のような関係）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/1b267af4-3efb-16a7-66b7-e181c3eba734.png)

ドメイン名はIPアドレスの別名なだけであり、
IPアドレスを使ってもドメイン名（DNSの仕組みを利用）を使っても、同じサーバにアクセスできる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580406/e8240726-1d5c-bc16-2687-72825424c15a.png)


### 参考サイト
* [【図解】ドメインとは？をわかりやすく解説します | カゴヤのサーバー研究室](https://www.kagoya.jp/howto/webhomepage/01/)