【安全確保支援士】DNS仕組みからセキュリティまでなんでもまとめちゃおうっていう試みです。

## 初めに
DNSが安全確保支援士試験にしょっちゅう登場するからこの記事見れば全部カバーできちゃうようにしようという試みです。記事が終わりに近づくにつれ話がややこしくなっていきます。覚悟して読んでください。

## DNSとは
まず初めになんですが、35.68525072440745, 139.75277350117938これ何かわかりますか？わかったらすごいです。
次は、〒100-8111 東京都千代田区千代田１−１これなんだかわかりますか？前の問題よりわかるんではないでしょうか？
実はこれら両方とも皇居の場所を示してるんです。最初は経度と緯度で、次は住所でそれぞれ皇居の場所を表しています。

我々は普段どこかの場所を示そうと思ったら住所を使います。俺の家遊び来いよって言って経度と緯度を教えてくる奴なんて相当な変人です。

実はこれはwebの世界でも同じことが言えます。例えばAmazonで買い物をしようとしたときは、日本の場合ならwww.amazon.co.jpのサイトにアクセスします。この時に、www.amazon.co.jpっていう文字列からこれがAmazonのサイトだなって判断できます。
これが1.234.567.890みたいなIPアドレス（このIPアドレスはAmazonとは無関係）で表示されたら見た目はAmazonぽいサイトなんだけどAmazonだと確信を持つには、んーって感じになります。

これらの例を挙げても、人間は数字の羅列だけでは、何のことか理解できません。意味の分かる文字列にしてようやく伝わります。

ただ、コンピュータはこれが逆なんです。あいつらは機械だから数字のほうが分かりやすいっていうんですよ。

そこでこのギャップを解消するためにDNSが存在します。こいつは、www.amazon.co.jpっていう文字列（このような文字列のことをドメイン名と呼ぶ）をコンピュータが分かりやすい数字列のIPアドレスに変換する役割があります。

## どうやって変換するのか
ここまでで、DNSは、ドメインをIPアドレスに変換するやつってのが分かりました。
では、どうやって変換してるんでしょうか？

その前に、我々が普段どこかへ行くときにどうやってその場所まで向かうのか考えましょう。

では、先ほどと同じ、〒100-8111 東京都千代田区千代田１−１へ今から向かいたいと思います。まずどうするかって、東京なのでどうにかして東京まで向かいます。そして、千代田区にあるということなので千代田区まで贅沢にタクシーで移動します。そして千代田区の千代田まで歩いて向かいます。最後に1－1が示してるとこまで気合で向かいます。

まぁざっとこんな感じでしょう。
東京へ向かう、千代田区へ向かう、千代田へ向かう、1－1へ向かうみたいにどんどん範囲が限定されて行って到着します。

これ実はDNSも同じです。
DNSもドメインをIPアドレスに変換するとき（このことを名前解決と呼ぶ）、上のから順にどこにあるのかを突き止めていって最終的なIPアドレスにたどり着きます。

例えば、www.amazon.co.jpの場合だったら、まず最初に、ルートDNSサーバー（全体を統括してるやつ）の所に行きます。そこでは、.jpを保有してるから、.jpを管理してるサーバーへ案内されます。.jpのサーバーにつくと、次は、.co.jpのサーバーに案内されます。.co.jpのサーバーにつくと、amazon.co.jpのサーバーに案内され、そこでwww.amazon.co.jpのIPアドレスを教えてもらいます。

こんな感じで、全体を統括してるやつのことろへ向かう、.jpを管理してるやつのとこへ向かう、.co.jpを管理してるやつのとこへ向かう、amazon.co.jpを管理してるやつのとこへ向かう見たい感じです。そして目的地のwww.amazon.co.jpに到着し、IPアドレスを教えてもらいます。

## 各サーバーの説明
今の説明をもう少し専門的に見ていきましょう。

>例えば、www.amazon.co.jpの場合だったら、まず最初に、ルートDNSサーバー（全体を統括してるやつ）の所に行きます。そこでは、.jpを管理してるサーバーへ案内されます。.jpのサーバーにつくと、次は、.co.jpのサーバーに案内されます。.co.jpのサーバーにつくと、amazon.co.jpのサーバーに案内され、そこでwww.amazon.co.jpのIPアドレスを教えてもらいます。

先ほどこういう説明をしまた。
この時にいくつかのサーバーが登場してますよね？このサーバーそれぞれに名前がついているので、そこを見ていこうかなと思います

### フルサービスリゾルバ
フルサービスリゾルバはキャッシュDNSとリカーシブリゾルバとか言われます。別名が多いので混乱しますが、どれもほぼ一緒のものを指しています。
実はこのサーバーは先ほどの説明では出てきてませんでした。では一体何に使うのでしょうか？
結論、こいつはアドレスを探してくれるやつです。どういうことかというと、PCでwebを閲覧するときにPCが直接名前解決をしているわけではないのです。PCは、このフルサービスリゾルバに名前解決をさせます。
ですから、先ほどの説明はすべてフルサービスリゾルバがやってくれてるということなんです。フルサービスリゾルバ視点の説明だから登場してなかったわけですね。
ちなみにフルサービスリゾルバはキャッシュ機能があるのでTTLの時間内（キャッシュを保持できる時間）であれば、キャッシュによって名前解決をしてくれます。

### ルートDNSサーバー
これは、フルサービスリゾルバが一番最初に訪れるサーバーです。DNS界のトップの存在のサーバーです。こいつがすべての起点となります。名前解決はこのサーバーから始めないと始まりません。こいつが、www.amazon.co.jpなら、トップレベルドメインが.jpであるから.jpのサーバーの場所を教えてくれます。qiita.comならトップレベルドメインが.comであるから.comの場所を教えてくれます。

トップレベルドメインってのは一番右側にあるやつです。同じように右から二番目（www.amazon.co.jpならco、qiita.comならqiita）はセカンドレベルドメインとか言います

ちなみにこのルートDNSサーバーは世界に13台しかなくそのうち1台は日本にあります。

### 権威DNSサーバー
ルートDNSサーバーから始まった名前解決は、.jpを管理してるDNSサーバ、.coを管理しているDNSサーバーを経てついにamazon.co.jpのサーバーにたどり着きます。この時のamazon.co.jpがwww.amazon.co.jpのIPアドレスを直接知っていつサーバーとして権威DNSサーバーと呼ばれます。
つまり権威DNSサーバーとは、直接、信頼できるドメインのIPアドレスを知っているサーバーということになります。

## DNSレコード
なんとなくDNSの仕組みが分かったところで次は、DNSのレコードを見ていこうと思います。
レコードに書いてある通りにDNSは動きます。支援士の過去問にもよくレコード書かせる問題出てくるんで何とか覚えたいところです。

とりあえずchatGPTに例としてDNSレコード書いてもらいました
```
; SOA (Start of Authority)
example.com.  IN  SOA  ns1.example.com. admin.example.com. (
                  2025040101  ; Serial (YYYYMMDDnn format)
                  3600        ; Refresh (1 hour)
                  1800        ; Retry (30 minutes)
                  1209600     ; Expire (2 weeks)
                  86400       ; Minimum TTL (1 day)
                )

; A (IPv4アドレス)
example.com.     IN  A      192.0.2.1
www.example.com. IN  A      192.0.2.2
mail.example.com. IN  A     192.0.2.3

; AAAA (IPv6アドレス)
example.com.     IN  AAAA   2001:db8::1
www.example.com. IN  AAAA   2001:db8::2
mail.example.com. IN  AAAA  2001:db8::3

; CNAME (別名レコード)
www.example.com. IN  CNAME  example.com.

; MX (メール用)
example.com.     IN  MX  10 mail.example.com.

; TXT (各種認証用)
example.com.     IN  TXT  "v=spf1 ip4:192.0.2.3 -all"
mail._domainkey.example.com. IN  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqh..."
_dmarc.example.com. IN  TXT  "v=DMARC1; p=reject; rua=mailto:dmarc@example.com; ruf=mailto:dmarc-fail@example.com"

; NS (ネームサーバー)
example.com.     IN  NS  ns1.example.com.
example.com.     IN  NS  ns2.example.com.
ns1.example.com. IN  A   192.0.2.53
ns2.example.com. IN  A   192.0.2.54

; SRV (サービスレコード)
_xmpp-server._tcp.example.com. IN SRV 5 0 5269 xmpp.example.com.

; PTR (逆引き) ※プロバイダ管理
1.2.0.192.in-addr.arpa. IN  PTR  example.com.

; CAA (証明書発行制限)
example.com.     IN  CAA  0 issue "letsencrypt.org"
example.com.     IN  CAA  0 iodef "mailto:admin@example.com"
```

大体こうやって書くんだよってのが分かったと思います
各レコードの説明は、以前にさらっとまとめた記事を書いているのでそれを見てください↓
[DNSのレコードの種類をできる限り挙げてみた](https://qiita.com/cvp/items/a6071f46eb0d3fc667ad)

## セキュリティについて

これ実は過去に記事書いてるんでそれを参考にしてください↓

[DNSのセキュリティ](https://qiita.com/cvp/items/fbe16214419f87b1b7dd)