【技術備忘録②】DNSコマンドを整理して、様々なサイトのドメイン情報を確認  ~ digコマンド ~

- 現在利用している言語や技術の記法や不明点等を記録していく記事第二弾。
- WSL2の発表もあり、ついに「Linuxコマンドを知らないエンジニアは終わる」的な記事まで出ることに、冷静沈着の装い作業に尽力。
- 今回は、サーバー情報やドメイン情報等を確認するための「dig」コマンドを整理して、徐々にネットワーク系の知識も学ぶことにしよう。

## 前提知識

### DNSの概要
- **DNS**とは、「IPアドレス(コンピュータ上の住所)をドメイン名(人が理解できる住所名)へ変換する仕組み。」
- **DNSサーバー**とは、「DNSの機能を管理・利用するために設置するサーバー。」
- DNSサーバー内では、IPアドレスと名前の関係記録を持っているデータベースがあり、それを検索して、結果のやり取りをしている。
- **正引き**とは、「ドメインからIPアドレスを見つける仕組み。」
- **逆引き**とは、「IPアドレスからドメインを見つける仕組み。」
- 通常DNSサーバーは、二台以上用意する必要がある。
    - **※一台のプライマリ(マスター)サーバーしか用意していない場合、サーバーダウンの際に、修復に時間がかかるため。**

### DNSサーバーレコード
- 下記、サーバーに記録されているDNSレコード(ドメイン詳細データ)の基本一覧。

| 種別 | 内容 |
|:-:|:-:|
| SOA  | ドメイン情報  |
| NS  | DNS(名前)サーバー情報  |
| MX  | メールサーバー情報  |
| TXT  | SPF(ドメイン偽造チェック)情報  |
| A  | IPアドレス  |
| AAAA  | IPV6アドレス  |

## digコマンド
### 概要
- DNS管理ツールの一つ。
- ドメインの「正引き」や「逆引き」の機能や、詳細データ等の確認ができる。
- 類似コマンドに、**nslookup**コマンドがある。
    - **※相違点として、対話モードがない。**

### 準備
- Windowsで、digコマンドが入っていない場合、[こちらのサイトを参考](https://www.atmarkit.co.jp/ait/articles/1410/20/news122.html)に導入する。
- MacやLinuxには、標準でdigコマンドが入っている場合が多い。
- ※Linuxに入っていない場合、下記のコマンドでいれる。

```bash
# centosの場合
$ sudo yum install bind-utils
# ubuntuの場合
$ sudo apt-get install bind-utils
```

### 環境
- macとlinuxの両方のパターンで利用したかったため、下記を利用。
    - Mac OS X 10.13.4Mac OS X 10.13.4
        - ※「dig」はインストール不要で、標準のターミナルで利用可能。
    - Amazon Linux 2 AMI 2.0
        - ※こちらもインストール不要で、標準のターミナルで利用可能。
- **※メインは、Amazon Linux 2 AMI 2.0を利用。**
- **※下記以降での説明するdigコマンドでの、環境ごとの相違等はない。**

### 操作

#### 正引き

- 下記のコマンドをターミナル(コマンド)でうち、ドメインからIPアドレスを見つけ出す。

```bash
# 「dig ドメイン」
$ dig www.google.co.jp

# 結果情報
;;ANSWER SECTION:
www.google.co.jp.         60      IN      A       172.217.9.67 # 割り当てIP

;; Query time: 1 msec # 応答時間
;; SERVER: 172.31.0.2#53(172.31.0.2) # 応答サーバー
;; WHEN: Sat May 18 01:59:44 UTC 2019 # 日時
;; MSG SIZE  rcvd: 59
```

- 正引きで、IPアドレスのみ表示したいときは、下記のコマンドをうつ。

```bash
# 「dig ドメイン +short」
$ dig www.google.co.co.jp +short

172.217.4.99
```

#### 逆引き
- 下記のコマンドをうち、IPアドレスからドメインを見つけ出す。

```bash
# 「dig -x ipアドレス」
$ dig -x 172.217.9.67

# 結果情報
;; ANSWER SECTION:
164.8.217.172.in-addr.arpa. 60  IN      PTR     ord37s08-in-f4.1e100.net.  # 逆引き結果

;; Query time: 1 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Sat May 18 02:04:44 UTC 2019
;; MSG SIZE  rcvd: 93
```

#### レコード情報確認

##### 1. SOAレコード
- 下記のコマンドをうち、SOAレコード(ドメイン情報)の詳細情報を確認する。

```bash
# 「dig ドメイン soa」
$ dig google.co.jp soa

# 結果情報
# プライマリサーバー : ns1.google.com
# 管理者アドレス : dns-admin.google.com

;; ANSWER SECTION:
google.co.jp.		60	IN	SOA	ns1.google.com. dns-admin.google.com. 248823103 900 900 1800 60

;; Query time: 68 msec
;; SERVER: 2001:268:fd07:4::1#53(2001:268:fd07:4::1)
;; WHEN: Sat May 18 12:30:27 JST 2019
;; MSG SIZE  rcvd: 101
```

##### 2. NSレコード
- 下記のコマンドをうち、NSレコード(DNSの名前サーバー情報)の詳細情報を確認する。

```bash
# 「dig ドメイン ns」
$ dig google.co.jp ns

# 結果情報
# 下記、ネームサーバー一覧
;; ANSWER SECTION:
google.co.jp.		345600	IN	NS	ns2.google.com.
google.co.jp.		345600	IN	NS	ns4.google.com.
google.co.jp.		345600	IN	NS	ns3.google.com.
google.co.jp.		345600	IN	NS	ns1.google.com.

;; Query time: 70 msec
;; SERVER: 2001:268:fd07:4::1#53(2001:268:fd07:4::1)
;; WHEN: Sat May 18 12:32:16 JST 2019
;; MSG SIZE  rcvd: 299

```

##### 3. MXレコード
- 下記のコマンドをうち、MXレコード(メールサーバー情報)の詳細情報を確認する。

```bash
# 「dig ドメイン mx」
$ dig google.co.jp mx

# 結果情報
# 下記、メールサーバー一覧
;; ANSWER SECTION:
google.co.jp.		600	IN	MX	20 alt1.aspmx.l.google.com.
google.co.jp.		600	IN	MX	40 alt3.aspmx.l.google.com.
google.co.jp.		600	IN	MX	10 aspmx.l.google.com.
google.co.jp.		600	IN	MX	30 alt2.aspmx.l.google.com.
google.co.jp.		600	IN	MX	50 alt4.aspmx.l.google.com.

;; Query time: 71 msec
;; SERVER: 2001:268:fd07:4::1#53(2001:268:fd07:4::1)
;; WHEN: Sat May 18 12:39:34 JST 2019
;; MSG SIZE  rcvd: 207
```

##### 4. TXTレコード
- 下記のコマンドをうち、TXTレコード(ドメイン偽造チェック情報)の詳細情報を確認する。

```bash
# 「dig ドメイン txt」
$ dig gmail.com txt

# 結果情報
# 「v= ~~~」の部分が、SPF(ドメイン偽造チェック)情報
;; ANSWER SECTION:
gmail.com.		300	IN	TXT	"v=spf1 redirect=_spf.google.com"

;; Query time: 68 msec
;; SERVER: 2001:268:fd07:4::1#53(2001:268:fd07:4::1)
;; WHEN: Sat May 18 12:44:51 JST 2019
;; MSG SIZE  rcvd: 159
```

##### 5. Aレコード
- 下記のコマンドをうち、aレコード(IPアドレス)の詳細情報を確認する。

```bash
# 「dig ドメイン a」
$ dig google.co.jp a


# 結果情報
;; ANSWER SECTION:
google.co.jp.		106	IN	A	172.217.25.67

;; Query time: 53 msec
;; SERVER: 2001:268:fd07:4::1#53(2001:268:fd07:4::1)
;; WHEN: Sat May 18 12:50:11 JST 2019
;; MSG SIZE  rcvd: 57
```

##### 6. AAAAレコード
- 下記のコマンドをうち、AAAAレコード(IPV6アドレス)の詳細情報を確認する。

```bash
# 「dig ドメイン aaaa」
$ dig google.co.jp aaaa

# 結果情報
;; ANSWER SECTION:
google.co.jp.		265	IN	AAAA	2404:6800:4004:80b::2003

;; Query time: 53 msec
;; SERVER: 2001:268:fd07:4::1#53(2001:268:fd07:4::1)
;; WHEN: Sat May 18 12:47:33 JST 2019
;; MSG SIZE  rcvd: 69
```

## まとめ
- 今回は、ドメイン関連学習ということで、「こんなサイトもawsを利用しているのか」という、発見と驚愕の連鎖が止まらずに、記事を書く。
- DNSの詳細な仕組みの理解から一旦逃避して、コマンド連打作業から始める学習スタイルをとる。
- この他に、「host」「whois」等といった便利コマンドがあるらしいから、次の整理はこれにすることにしよう。

## 参考・書籍
- https://qiita.com/hypermkt/items/610b5042d290348a9dfa  
→こちらを参考にしました。大変お世話になりました。
- [コマンドで覚えるLinux](https://www.amazon.co.jp/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E8%A6%9A%E3%81%88%E3%82%8BLinux-%E4%B8%80%E6%88%B8-%E8%8B%B1%E7%94%B7/dp/4802610327)  
→こちらを参考にしました。大変お世話になりました。
- https://www.atmarkit.co.jp/ait/articles/1410/20/news122.html  
→Windowsでのdig導入の際に参考にしました。大変お世話になりました。