【備忘録】ネットワーク障害発生時の基本的な切り分けの流れ

久しぶりの投稿になります。

 

いきなりですが、この前ネットワーク回りでトラブルが発生し、基本的な切り分けを改めて勉強したので備忘録として書きます。

※すみません、ちょっと雑になります

 

▼前提

・Apache Webサーバー(IP:192.168.33.82、ポート:80番)を題材に切り分けを進める

 

▼項目

  1. ネットワーク(IP)層 (第3層)の切り分け
  2. トランスポート層(第4層)の切り分け
  3. アプリケーション層(第7層)の切り分け

▼手順

  1. ネットワーク(IP)層 (第3層)の切り分け

目的: クライアント⇔サーバ間で IP レベルの疎通やルーティングに問題がないかを確認する。

・ローカルからpingで確認する

ping 192.168.33.82

→応答が返ってくることを確認する

PING 192.168.33.82 (192.168.33.82) 56(84) bytes of data.
64 bytes from 192.168.33.82: icmp_seq=1 ttl=63 time=1.66 ms
64 bytes from 192.168.33.82: icmp_seq=2 ttl=63 time=1.80 ms
64 bytes from 192.168.33.82: icmp_seq=3 ttl=63 time=1.37 ms
64 bytes from 192.168.33.82: icmp_seq=4 ttl=63 time=1.30 ms

 

※サーバーが起動していない場合

PING 192.168.33.82 (192.168.33.82) 56(84) bytes of data.
From 192.168.33.1 icmp_seq=3 Destination Host Unreachable
^C
--- 192.168.33.82 ping statistics ---
13 packets transmitted, 0 received, +1 errors, 100% packet loss, time 12242ms

→Destination Host Unreachable などのエラーになる

 

・ローカルからtraceroute(Linux)で確認する

traceroute 192.168.33.82

→応答が返ってくることを確認する

traceroute to 192.168.33.82 (192.168.33.82), 30 hops max, 60 byte packets
1 _gateway (xxxx.xxxx.xxxx.xxxx) 0.476 ms 0.443 ms 0.659 ms
2 test.com (192.168.33.82) 1.105 ms 1.667 ms 1.339 ms

 

※サーバーが起動していない場合

4 * * *
5 * * *
6 * * *
7 * * *
8 * * *

→目的のサーバーまで到達できず、ホップ数の数だけループしたのちタイムアウトする

 

・ローカルからtracert(windows)で確認する

tracert 192.168.33.82

→応答が返ってくることを確認する

test.com [192.168.33.82] へのルートをトレースしています
経由するホップ数は最大 30 です:
1 1 ms <1 ms <1 ms test.com [192.168.33.82]

※サーバーが起動していない場合

→目的のサーバーまで到達できず、ホップ数の数だけループしたのちタイムアウトする

 

2. トランスポート層(第4層)の切り分け

目的: TCP/UDP のポートレベルでの到達性やファイアウォール設定、TCPハンドシェイクの成否を確認する

・nsコマンドで確認

nc -vz 192.168.33.82 80

→Connectedが出力されることを確認する

Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.33.82:80.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

 

※80ポートが開いていない場合

Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connection refused.

→Connection refused になる

 

・telnetコマンドで確認する

telnet 192.168.33.82 80

→Connected to が出力されることを確認する

Trying 192.168.33.82...
Connected to 192.168.33.82.

 

※80ポートが開いていない場合

Trying 192.168.33.82...
telnet: connect to address 192.168.33.82: Connection refused

→Connection refusedになる

 

・サーバー側リッスン状況を確認する

netstat -lntp

→80番ポートがLISTENしていることを確認する

tcp6 0 0 :::80 :::* LISTEN 16740/httpd

※80ポートが開いていない場合

Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connection refused.

 

3. アプリケーション層(第7層)の切り分け

・curlで確認

curl -I http://192.168.33.82/

→HTTP/1.1 200 OK が返ってくることを確認する

HTTP/1.1 200 OK
Date: Fri, 27 Jun 2025 11:38:53 GMT
Server: Apache/2.4.62 (AlmaLinux)
Last-Modified: Fri, 27 Jun 2025 10:24:49 GMT
ETag: "a-6388b167dce7c"
Accept-Ranges: bytes
Content-Length: 10
Content-Type: text/html; charset=UTF-8

 

※Apacheが起動していない場合

curl: (7) Failed to connect to 192.168.33.82 port 80: Connection refused

→Connection refused になる

 

・curlでコンテンツ取得確認

curl -v http://192.168.33.82/index.html

→コンテンツが出力されることを確認する

※Apacheが起動していない場合

Trying 192.168.33.82:80...
connect to 192.168.33.82 port 80 failed: Connection refused
Failed to connect to 192.168.33.82 port 80: Connection refused
Closing connection 0
curl: (7) Failed to connect to 192.168.33.82 port 80: Connection refused

→Connection refused になる

 

・Apacheのログ確認

→アクセスログなどにリクエストが出力されていることを確認する

 

▼切り分けフローの例

  1. まず L3: ping → 応答なければネットワーク機器やケーブル、VLAN設定を疑う
  2. 次に L4: nc -vztelnet → ポート80が拒否されるならファイアウォールやサーバのリスン設定確認
  3. 最後に L7: curl → 200以外ならApache設定やアプリケーション内部の問題、ログで詳細を追う

下流レイヤーで問題が発生していると、上流レイヤーまで到達しないので、

基本的には 下流 → 上流のレイヤー順に順序立ててテストしていくことで、どこで障害が発生しているのか目星をつけやすくなる

 

以上となります。

おそらく現実は上記をそれぞれ確認したうえで、ファイアウォールやルーティングの設定を確認していくことになるかなと思います。

この辺りはまたどこかで書いていきたいと思います。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA