名前解決・疎通確認する際の基本的なLinuxコマンド

#はじめに
この記事は[LIFULL Advent Calendar2018](https://qiita.com/advent-calendar/2018/lifull)の10日目の記事です。
業務やプライベートでインフラ構築をすることが度々あり、疎通確認方法について改めて整理したいと思ったので、基本的なLinuxコマンドの使い方について解説していきます。

#名前解決をするコマンド
・nslookup
・host
・dig

#ネットワーク疎通確認コマンド
・ping
・traceroute

#nslookupコマンドを使ってみる
まずは、nxlookupコマンドを使って名前解決してみます。

```
$ nslookup google.com
Server:		172.28.xxx.xxx
Address:	172.28.xxx.xxx#53

Non-authoritative answer:
Name:	google.com
Address: 172.217.25.110
```

`Server： 172.28.xxx.xxx`は、問い合わせを行なったネームサーバーのIPを示しています。
`Non-authoritative answer`と返ってきた場合、DNSサーバーにキャッシュされた情報を返却しており、実際のIPアドレスの設定が変更されている可能性があることを示しています。
また、問い合わせた結果、IPアドレスは`172.217.25.110`であることがわかります。

#hostを使って簡潔な情報を取得する
hostを使うとnslookupよりも簡潔な情報を得ることができます。

```
$ host google.com
google.com has address 172.217.26.46
google.com has IPv6 address 2404:6800:4004:80d::200e
google.com mail is handled by 30 alt2.aspmx.l.google.com.
google.com mail is handled by 40 alt3.aspmx.l.google.com.
google.com mail is handled by 20 alt1.aspmx.l.google.com.
google.com mail is handled by 10 aspmx.l.google.com.
google.com mail is handled by 50 alt4.aspmx.l.google.com.
```

詳細な情報を得たい場合は-vオプションを使用します。

```
$ host -v google.com
Trying "google.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 845
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

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

;; ANSWER SECTION:
google.com.		60	IN	A	172.217.26.14

Received 44 bytes from 172.20.16.4#53 in 5 ms
Trying "google.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54113
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com.			IN	AAAA

;; ANSWER SECTION:
google.com.		60	IN	AAAA	2404:6800:4004:80c::200e

Received 56 bytes from 172.20.16.4#53 in 4 ms
Trying "google.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21931
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com.			IN	MX

;; ANSWER SECTION:
google.com.		60	IN	MX	40 alt3.aspmx.l.google.com.
google.com.		60	IN	MX	10 aspmx.l.google.com.
google.com.		60	IN	MX	30 alt2.aspmx.l.google.com.
google.com.		60	IN	MX	50 alt4.aspmx.l.google.com.
google.com.		60	IN	MX	20 alt1.aspmx.l.google.com.
```

#digコマンドでより詳細な情報を取得する
次に、digコマンドを使って名前解決をしてみます。
`nslookup`コマンドでは、IPアドレスの情報のみが返されましたが、`dig`コマンドを使うとドメインに関する詳細な情報を知ることができます。

```
$ dig aws.amazon.com

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

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;aws.amazon.com.			IN	A

;; ANSWER SECTION:
aws.amazon.com.		12	IN	CNAME	1.aws-lbr.amazonaws.com.
1.aws-lbr.amazonaws.com. 50	IN	CNAME	aws-us-west-2.amazon.com.
aws-us-west-2.amazon.com. 44	IN	A	52.119.168.190

;; Query time: 9 msec
;; SERVER: 172.28.xxx.xxx#53(172.28.xxx.xxx)
;; WHEN: Mon Dec 10 17:24:28 JST 2018
;; MSG SIZE  rcvd: 121
```

実行すると上記のような結果が返ってきます。

```
aws-us-west-2.amazon.com. 44	IN	A	52.119.168.190
```

この場合、DNSサーバーのキャッシュ残り時間が44秒で、`aws-us-west-2.amazon.com`が`Aレコード`の`52.119.168.190`で登録されていることがわかります。

#pingを使って疎通確認をする
pingはネットワークの接続経路が接続されているかを確認するコマンドです。
ただし、AWSでpingを使う場合は[デフォルトでは疎通しない](https://blogenist.jp/2018/06/20/4805/)ため注意してください。
基本的な使い方は以下の通りです。

```
$ ping google.com
PING google.com (172.217.26.46) 56(84) bytes of data.
64 bytes from nrt12s17-in-f14.1e100.net (172.217.26.46): icmp_seq=1 ttl=39 time=5.28 ms
64 bytes from nrt12s17-in-f14.1e100.net (172.217.26.46): icmp_seq=2 ttl=39 time=5.08 ms
64 bytes from nrt12s17-in-f14.1e100.net (172.217.26.46): icmp_seq=3 ttl=39 time=5.05 ms
```

疎通できれいれば、上記のようなログが何度も出力されます。回数は-cオプションで指定できます。

```
$ ping -c 3 google.com
PING google.com (172.217.24.142) 56(84) bytes of data.
64 bytes from nrt20s01-in-f142.1e100.net (172.217.24.142): icmp_seq=1 ttl=39 time=6.59 ms
64 bytes from nrt20s01-in-f142.1e100.net (172.217.24.142): icmp_seq=2 ttl=39 time=6.30 ms
64 bytes from nrt20s01-in-f142.1e100.net (172.217.24.142): icmp_seq=3 ttl=39 time=6.27 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 6.271/6.392/6.599/0.160 ms
```

#tracerouteを使って疎通確認をする
tracerouteをLinuxで使う場合、デフォルトのプロトコルはUDPです。
最後に宛先にたどり着いて処理が終了すれば疎通確認が取れていることがわかります。

```
traceroute google.com
traceroute to google.com (216.58.197.142), 64 hops max, 52 byte packets
 1  10.33.23.254 (10.33.23.254)  3.929 ms  3.392 ms  2.997 ms
 2  10.33.91.254 (10.33.91.254)  74.841 ms  74.608 ms  68.587 ms
 3  10.33.91.222 (10.33.91.222)  67.503 ms  75.631 ms  76.663 ms
 4  192.168.3.4 (192.168.3.4)  71.895 ms  84.070 ms  78.555 ms
 5  192.168.2.1 (192.168.2.1)  74.489 ms  61.916 ms  63.660 ms
 6  158.205.127.1 (158.205.127.1)  95.288 ms  65.370 ms  61.405 ms
 7  158.205.188.229 (158.205.188.229)  70.257 ms  50.754 ms  55.554 ms
 8  158.205.192.105 (158.205.192.105)  57.842 ms  58.442 ms  55.389 ms
 9  as15169.ix.jpix.ad.jp (210.171.224.96)  57.065 ms  62.574 ms  60.141 ms
10  108.170.242.97 (108.170.242.97)  62.677 ms
    108.170.242.129 (108.170.242.129)  71.308 ms
    108.170.242.97 (108.170.242.97)  69.742 ms
11  216.239.62.25 (216.239.62.25)  69.914 ms  6.564 ms  68.025 ms
12  nrt12s01-in-f142.1e100.net (216.58.197.142)  64.729 ms  58.575 ms  64.304 ms
```

#最後に
自身があまり詳しくないこともあり、簡単な使い方の紹介のみになってしまいましたが、他にも便利なコマンドがたくさんあるので時々更新しようと思います。