DNSへの問い合わせ方法とゾーンファイルについて

# 名前解決とは
ドメイン名からIPアドレスへ変換すること
名前解決の設定は2つある。

- /etc/hosts
    - IPアドレスとホスト名を記述する

```
192.168.33.10 hogehoge.com
```

- /etc/resolv.confファイル
    - ネームサーバを指定する。
        - 指定したネームサーバに問い合わせ名前解決を行う。

```
nameserver 10.0.2.3
```


# DNSとは
ホスト名とIPアドレスの対応関係を行うシステムのことです。
ドメインという領域に分割してツリー構造で管理しています。

- ルートドメイン
    - トップレベルドメイン
- ドメイン名
    - 個々のドメインを指し示す文字列がドメイン名
- FQDN
    - 全てのドメインを指定したドメインのこと

![DNSサーバ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148935/b153319e-facc-8690-d363-c64c887b2a49.png)
参照: https://viral-community.com/other-it/dns-server-2477/


# DNSの仕組み
フルリゾルバとネームサーバの2つからなる。


## フルリゾルバ
ネームサーバに問い合わせを行うホストやソフトウェアのこと。
IPアドレスを調べるためにネームサーバに問い合わせ処理を行い、
それを受けたネームサーバーは自分のデータベースに情報があればそれを返すが、情報がない場合は下の階層のサーバに問い合わせ処理を行うようフルリゾルバに応答する。
そして、ドメインの木構造を上から順番にたどることで目的の情報があるネームサーバーを見つけ、そこから必要な情報を得る。


また、キャッシュDNSサーバともいい、一度確認したIPとドメインの対応を、一定期間自身の中にキャッシュする。
そして、どれくらいキャッシュさせておくかは、各ネームサーバのゾーンファイルのTTLで設定されている。


## ネームサーバ
権威DNSサーバ、コンテンツDNSサーバともいう。
ネームサーバが設置された階層のドメインに関する情報を管理する。
そして、IPアドレスの検索はルートネームサーバーから順番に行われる。


![DNSサーバー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148935/5164735b-7769-c4ad-6a0f-ec89eed5e90c.png)
参照: https://qiita.com/hypermkt/items/610b5042d290348a9dfa


## AWSのRoute53
Route53は、このDNSのネームサーバを自身で管理するためのサービス。


# DNSへの問い合わせ方法

## nslookupコマンド
DNSサーバへの問い合わせを行い、問い合わせ先をキャッシュサーバかネームサーバかを指定できる。

```
# googleのIPアドレスを取得
nslookup www.google.com

Server:         10.0.2.3
Address:        10.0.2.3#53

Non-authoritative answer:
Name:   www.google.com
Address: 172.217.25.68
```

## digコマンド


```
dig www.google.com

; <<>> DiG 9.10.6 <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8688
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:
www.google.com.         139     IN      A       172.217.25.68

;; Query time: 8 msec
;; SERVER: 192.168.100.1#53(192.168.100.1)
;; WHEN: Sun Jun 23 21:36:56 JST 2019
;; MSG SIZE  rcvd: 48
```



# ゾーンファイル
ドメインとIPの対応表のこと。
DNSレコードとは、ゾーンファイル1つ1つの対応のこと。

## DNSレコード一覧
「hogehoge.comのIPアドレスは〇〇」という以外にも、様々な役割を持ったDNSレコードが存在する。


### SOAレコード
ドメインの管理情報を示すレコード。

- ドメインのDNSサーバ名
- ドメイン管理者のアドレス
- expire
    - ゾーン情報を最新と確認できない場合の有効時間を秒で指定する
- TTL
    - ゾーン情報をキャッシュする場合の有効時間を秒で指定する

などの情報が記録される。

### NSレコード
ドメイン自身およびサブドメインのネームサーバを記述する。

例

|名前  |タイプ  |RDATA  |
|---|---|---|
|hoge.jp  |NS  |ns-721.awsdns-26.net. ns-270.awsdns-33.com. |
|full  |A  |192.168.0.1  |
|fuga  |A  |192.168.0.2  |


### Aレコード
ホストのIPアドレスを指定する。

例
hoge.jpのIPアドレスが知りたい場合。

.jpのネームサーバ

|名前  |タイプ  |RDATA  |
|---|---|---|
|hoge  |A  |192.168.0.1  |
|fuga  |A  |192.168.0.2  |

192.168.0.1であることが分かる。


### PRTレコード
IPアドレスからドメインを参照するためのレコード。

### CNAMEレコード
ドメイン名の別名を指定するためのレコード。
例えば、hoge.comのドメインに対して

- CNAMEでhuga.comが指定されている
- huga.comにはAレコードで1.1.1.1というIPアドレスが指定されている

である場合、hoge.com→huga.com→1.1.1.1という経路をたどって、IPアドレスが1.1.1.1サーバのコンテンツを取得することができる。

ドメインに対してCNAMEを設定すると、Aレコードのみではなく、MXレコードもNSレコードも全てCNAMEで設定した先の情報を参照する。

例
www.hoge.jpのIPアドレスを知りたい場合。
hoge.jpのゾーンファイル。

|名前  |タイプ  |RDATA  |
|---|---|---|
|huga  |A  |192.168.0.1  |
|www  |CNAME  |huga  |
|ftp  |CNAME  |hugo  |

192.168.0.1が返ってくる。


# 参考資料
https://qiita.com/RyomaTaniyama/items/6d8748e8096ea4f18b5b