ping で繋がらない時の原因調査方法

# 背景

ネットに接続できなくなった時にどこで問題が発生しているのかを特定する方法について記載します。それもこれも最近そのようなことが発生した際に、少し困ってしまったので、どのような手順で原因調査すべきだったかを改めてまとめておいて、次からはシンプルに原因にたどり着きたいな、と思ったことがこのまとめを作成するに至った背景です。このような原因調査は闇雲に進めてもなかなか原因にはたどり着けないため、クライアント側に近いところから順に進めていくべきです。僕は以下のように進めていくべきだと考えています。

    1. 家庭用 or 社内用ルーターからPCにIPアドレスが付与されていることを確認する
    2. 家庭用 or 社内用ルーターのIPアドレスを確認する
    3. 家庭用 or 社内用ルーターまでの接続を確認する
    4. DNSの名前解決に問題ないことを確認する
    5. 接続先までのネットワーク経路を確認する

調査手順はこれに限りませんので、参考程度にしていただけると嬉しいです。この手順で見ていくと、どこで問題が発生しているかをざっと特定することができます。ここからは具体的に、コマンドを利用した調査方法を記載していきます。

# コマンドを使った具体的な調査方法

## 1. 家庭用 or 社内用ルーターからPCにIPアドレスが付与されていることを確認する

`ifconfig` を実行して、PCにIPアドレスが付与されていることを確認する。以下が実行結果になります。

※ [ifconfig](http://www.atmarkit.co.jp/ait/articles/0109/29/news004.html)コマンドの使い方

```
MacBook-Pro:hoge hogehoge$ ifconfig
....
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
     ether < MACアドレス >
     inet < IPアドレス > netmask 0xfffffff0 broadcast xxx.xxx.xxx.xxx
     nd6 options=201<PERFORMNUD,DAD>
     media: autoselect <full-duplex>
     status: active
....
```

IPアドレスを取得できない場合、以下を確認する。

- セキュリティソフトを無効化する
- 不要なネットワークアダプタを無効化する
- IPアドレスが自動取得になっていることを確認する
- ルーターのつなぎ込みを確認する
- ルーターの設定に問題がないことを確認する

## 2. 家庭用 or 社内用ルーターのIPアドレスを確認する

`netstat -rn` を実行することで、ルーティングテーブルを表示します。
以下の `default Gateway` に記載されているのが、ルーターのIPアドレスです。

※ [netstat](http://www.atmarkit.co.jp/fnetwork/netcom/netstat/netstat.html)コマンドの使い方

```
MacBook-Pro:hoge hogehoge$ netstat -rn
Routing tables
Internet:
Destination        Gateway                 Flags        Refs      Use   Netif Expire
default            < ルーターのIPアドレス >   UGSc           93        0     en0
127                127.0.0.1               UCS             0        0     lo0       
127.0.0.1          127.0.0.1               UH              5    17699     lo0       
....
```

## 3. 家庭用 or 社内用ルーターまでの接続を確認する

`ping < ルーターのIPアドレス >` を実行することで家庭用 or 社内用のルーターまで接続できていることを確認できます。以下が実行結果になります。

※ [ping](http://www.atmarkit.co.jp/ait/articles/0108/30/news002.html)コマンドの使い方

```
MacBook-Pro:hoge hogehoge$ ping hogehoge.com
PING hogehoge.com (xxx.xxx.xxx.xxx): 56 data bytes
64 bytes from xxx.xxx.xxx.xxx: icmp_seq=0 ttl=53 time=52.242 ms
64 bytes from xxx.xxx.xxx.xxx: icmp_seq=1 ttl=53 time=146.980 ms
....
```

以下のように `Request timeout` になった場合、 PCに設定しているIPアドレスやサブネットマスクの値に問題ないかを確認してください。

```
MacBook-Pro:hoge hogehoge$ ping hogehoge.com
PING hogehoge.com (xxx.xxx.xxx.xxx): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 0
....
```

## 4. DNSクライアントの名前解決に問題ないことを確認する

`nslookup hogehoge.com` を実行することで、DNSサーバーに名前解決を問い合わせます。以下が実行結果になります。

※ [nslookup](http://www.atmarkit.co.jp/ait/articles/0203/21/news003.html)コマンドの使い方

```
MacBook-Pro:hoge hogehoge$ nslookup hogehoge.com
Server:        xxx.xxx.xxx.xxx
Address:    xxx.xxx.xxx.xxx#xx
Non-authoritative answer:
Name:    hogehoge.com
Address: xxx.xxx.xxx.xxx
```

失敗すると、以下のようになります。ドメイン名が間違えている可能性がありますので、確認してください。

```
MacBook-Pro:hoge hogehoge$ nslookup hogehoge.com
Server:        xxx.xxx.xxx.xxx
Address:    xxx.xxx.xxx.xxx#xx
** server can't find hogehoge.com: NXDOMAIN
```

## 5. 相手先までのネットワーク経路を確認する

`traceroute hogehoge.com` を実行することで、相手先までたどり着くまでにどのルーティングを通っていくかを確認することができます。また、どこでルーティングが途切れているかも確認することができます。実行結果は以下のようになります。

※ [traceroute](http://www.atmarkit.co.jp/ait/articles/0108/30/news003.html)コマンドの使い方

```
MacBook-Pro:api hogehoge$ traceroute hogehoge.com
traceroute to hogehoge.com (xxx.xxx.xxx.xxx), 64 hops max, 52 byte packets
 1  xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)  0.988 ms  0.678 ms  0.608 ms
2  pw126211240146.5.panda-world.ne.jp (126.211.240.146)  65.435 ms  19.193 ms  19.947 ms
3  pw126211240169.5.panda-world.ne.jp (126.211.240.169)  20.006 ms  25.297 ms  20.029 ms
4  101.110.27.245 (101.110.27.245)  20.015 ms  20.376 ms  32.363 ms
5  209.85.149.253 (209.85.149.253)  20.514 ms  16.825 ms  19.778 ms
6  216.239.62.28 (216.239.62.28)  42.637 ms
   108.170.233.16 (108.170.233.16)  21.071 ms
   72.14.234.198 (72.14.234.198)  53.575 ms
7  216.239.41.71 (216.239.41.71)  30.019 ms
   108.170.242.208 (108.170.242.208)  20.234 ms
   216.239.41.71 (216.239.41.71)  37.812 ms
8  hogehoge.net (xxx.xxx.xxx.xxx)  28.866 ms  22.112 ms
```

このコマンドを実施した結果、 `reports: Destination host unreachable.` と表示され、途中でルーティングが途切れた場合、相手先にたどり着く間のルーターで障害が発生している、もしくはルートテーブルの設定ミスなどの可能性があります。

# 最後に

最後まで目を通してくださり、ありがとうございました。色々わかりにくい記事になってしまいましたが、ご容赦ください。w ネットワークについて色々調べながら、記事を書いていたのですが、その際に以下のサイトはネットワークの知識の全体感を理解するのに、すごく参考になりましたのでおすすめです。参考までに。

[ネットワークエンジニアとして](https://www.infraexpert.com/)