ネットワーク障害が発生したとき、原因を素早く特定し解決するためには、適切なトラブルシューティングコマンドを使いこなす必要があります。「インターネットに接続できない」「Webサイトが表示されない」といった問題に直面したとき、闇雲に設定を変更するのではなく、コマンドを使って問題の所在を切り分けることが重要です。
本記事では、ネットワークトラブルシューティングに役立つコマンドについて以下の内容を解説します。
- 接続性確認のためのping、traceroute/tracertコマンド
- DNS名前解決を調査するnslookup、digコマンド
- ネットワーク接続状態を確認するnetstat、ssコマンド
- HTTP通信をテストするcurl、wgetコマンド
- パケットキャプチャを行うtcpdumpコマンド
- トラブルシューティングの体系的な手順
この記事を読むことで、ネットワーク障害の原因を特定するためのコマンド操作ができるようになります。
前提条件
本記事を理解するために、以下の知識があることを前提としています。
- OSI参照モデルまたはTCP/IPモデルの基礎を把握している(OSI参照モデルとTCP/IPモデルを図解で理解するを参照)
- IPアドレスとサブネットの基本概念を理解している(IPアドレスとサブネットマスクの基礎を理解するを参照)
- TCPとUDPの違いを把握している(TCPとUDPの違いを理解するを参照)
- コマンドラインの基本操作ができる
実行環境
本記事で使用するコマンドは以下の環境で動作確認を行っています。
| 項目 | 環境 |
|---|---|
| Linux | Ubuntu 22.04/24.04、Rocky Linux 9 |
| macOS | macOS 14(Sonoma)以降 |
| Windows | Windows 10/11(PowerShell/コマンドプロンプト) |
| 必要なツール | ping、traceroute/tracert、nslookup、dig、netstat、ss、curl、tcpdump |
| 権限 | 一部のコマンド(tcpdumpなど)で管理者権限が必要 |
Linux/macOSでは標準でほとんどのコマンドが利用可能です。Windowsでも主要なコマンドは標準搭載されていますが、digやtcpdump相当の機能を使う場合は追加ツールが必要な場合があります。
期待される学習成果
本記事を読み終えると、以下のことができるようになります。
- ネットワーク障害の原因を体系的に切り分けできる
- pingとtracerouteで接続性とルーティングを診断できる
- nslookup/digでDNS名前解決の問題を調査できる
- netstat/ssで接続状態とポートの使用状況を確認できる
- curlでHTTP通信のトラブルを診断できる
- tcpdumpでパケットレベルの問題を調査できる
トラブルシューティングの基本アプローチ
ネットワークトラブルシューティングでは、OSI参照モデルの下位層から上位層へ順に確認していく方法が効果的です。物理層・データリンク層に問題があれば、上位層の確認は意味がありません。
以下の図は、トラブルシューティングの体系的なアプローチを示しています。
flowchart TD
Start[障害発生] --> L1[物理層・データリンク層の確認<br/>ケーブル接続、リンク状態]
L1 --> L1Check{問題あり?}
L1Check -->|Yes| L1Fix[物理的な接続を修正]
L1Check -->|No| L2[ネットワーク層の確認<br/>IPアドレス、ルーティング]
L2 --> L2Check{問題あり?}
L2Check -->|Yes| L2Fix[IP設定、ルーティングを修正]
L2Check -->|No| L3[トランスポート層の確認<br/>ポート、ファイアウォール]
L3 --> L3Check{問題あり?}
L3Check -->|Yes| L3Fix[ファイアウォール、ポート設定を修正]
L3Check -->|No| L4[アプリケーション層の確認<br/>DNS、HTTP、サービス設定]
L4 --> L4Check{問題あり?}
L4Check -->|Yes| L4Fix[アプリケーション設定を修正]
L4Check -->|No| End[原因特定・解決]各層で使用する主要なコマンドは以下のとおりです。
| 確認項目 | 主要コマンド | 確認内容 |
|---|---|---|
| 物理層・データリンク層 | ip link、ifconfig | インターフェース状態、リンク状態 |
| ネットワーク層 | ping、traceroute、ip route | 接続性、ルーティング経路 |
| トランスポート層 | netstat、ss、telnet | ポート状態、接続状況 |
| アプリケーション層 | nslookup、dig、curl | DNS解決、HTTP通信 |
| 全体調査 | tcpdump、wireshark | パケットキャプチャ |
pingコマンドによる接続性確認
pingは、ネットワークトラブルシューティングで最初に使用する最も基本的なコマンドです。ICMPエコー要求パケットを送信し、対象ホストからの応答を確認することで、ネットワーク層での接続性を確認できます。
基本的な使い方
|
|
実行結果の見方
以下は、正常な場合のping結果の例です。
|
|
各項目の意味は以下のとおりです。
| 項目 | 説明 |
|---|---|
| 64 bytes | 受信したパケットサイズ |
| icmp_seq | シーケンス番号(パケットの順序) |
| ttl | Time To Live(残りホップ数) |
| time | 往復時間(RTT: Round Trip Time) |
| packet loss | パケット損失率 |
| rtt min/avg/max | RTTの最小/平均/最大値 |
トラブルシューティングのポイント
pingの結果から、以下のような問題を診断できます。
応答がない場合(Request timeout)
|
|
応答がない原因として、以下が考えられます。
- 対象ホストが起動していない
- ネットワーク経路に問題がある
- ファイアウォールでICMPがブロックされている
- 対象ホストのIPアドレスが間違っている
パケット損失がある場合
|
|
部分的なパケット損失は、以下の問題を示唆します。
- ネットワークの混雑
- ケーブルの接触不良
- 無線LANの電波干渉
- ルーターやスイッチの過負荷
RTTが異常に長い場合
通常、同一LAN内では1ms未満、インターネット経由でも100ms程度が目安です。これを大幅に超える場合は、ネットワークの混雑や遠回りなルーティングが疑われます。
段階的な接続確認
ネットワーク障害を切り分けるため、以下の順序でpingを実行します。
|
|
この順序で確認することで、問題の所在を絞り込めます。
| 確認対象 | 結果 | 推測される問題 |
|---|---|---|
| 127.0.0.1 | NG | TCP/IPスタックの問題 |
| ゲートウェイ | NG | LAN内の接続、IP設定の問題 |
| 8.8.8.8 | NG | ルーティング、インターネット接続の問題 |
| google.com | NG | DNS名前解決の問題 |
traceroute/tracertによる経路確認
traceroute(Windowsではtracert)は、パケットが宛先に到達するまでの経路(ホップ)を表示するコマンドです。ネットワーク層の問題がどこで発生しているかを特定するのに役立ちます。
基本的な使い方
|
|
実行結果の見方
以下は、tracerouteの実行結果の例です。
|
|
各列の意味は以下のとおりです。
| 列 | 説明 |
|---|---|
| 1番目 | ホップ番号 |
| 2番目 | ルーターのホスト名またはIPアドレス |
| 3-5番目 | 3回の測定によるRTT |
トラブルシューティングのポイント
アスタリスク(* * *)が表示される場合
|
|
アスタリスクは応答がないことを示します。これは以下の理由で発生します。
- ルーターがICMPに応答しないよう設定されている(セキュリティ目的で一般的)
- パケットがドロップされている
- ファイアウォールでブロックされている
途中でアスタリスクが続き、最終的に宛先に到達する場合は、セキュリティ設定による応答拒否であることが多く、問題ではありません。
特定のホップで遅延が増加する場合
|
|
4番目のホップで急激に遅延が増加しています。ただし、これが問題かどうかは以下のポイントで判断します。
- 以降のホップでも遅延が継続する場合: そのルーターでボトルネックが発生している
- そのホップだけ遅延が大きい場合: ルーターがICMP応答を低優先で処理しているだけで、実際の通信には影響がない可能性がある
TCPを使用したtraceroute
一部のルーターはICMPをブロックしていますが、TCPの特定ポート宛のパケットは通過させる場合があります。
|
|
nslookup/digによるDNS診断
DNSの名前解決に問題がある場合、nslookupまたはdigコマンドを使用して原因を調査します。digはより詳細な情報を取得でき、DNS管理者やエンジニアに広く利用されています。
nslookupの基本的な使い方
nslookupはWindows、Linux、macOSすべてで利用可能です。
|
|
nslookupの実行結果の見方
|
|
| 項目 | 説明 |
|---|---|
| Server | クエリを送信したDNSサーバー |
| Non-authoritative answer | キャッシュからの応答(権威サーバーからの直接応答ではない) |
| Address | 解決されたIPアドレス(IPv4とIPv6) |
digコマンドの基本的な使い方
digはnslookupより詳細な情報を取得でき、DNS関連のトラブルシューティングに適しています。
|
|
digの実行結果の見方
|
|
重要な項目は以下のとおりです。
| セクション | 説明 |
|---|---|
| status | クエリの結果(NOERROR=成功、NXDOMAIN=存在しない、SERVFAIL=サーバーエラー) |
| QUESTION SECTION | 送信したクエリ |
| ANSWER SECTION | 応答結果(レコード名、TTL、レコードタイプ、値) |
| Query time | クエリにかかった時間 |
| SERVER | 応答したDNSサーバー |
トラブルシューティングのポイント
NXDOMAINが返される場合
|
|
NXDOMAINはドメインが存在しないことを示します。ドメイン名のスペルミスや、ドメインの有効期限切れが考えられます。
SERVFAILが返される場合
|
|
SERVFAILはDNSサーバーがクエリを処理できなかったことを示します。DNSサーバーの設定問題やネットワーク障害が原因です。別のDNSサーバーを指定して確認します。
|
|
DNSキャッシュのクリア
DNSキャッシュが原因で古い情報が返される場合は、キャッシュをクリアします。
|
|
netstat/ssによる接続状態確認
netstatおよびss(Socket Statistics)コマンドは、現在のネットワーク接続状態、待ち受けポート、ルーティングテーブルなどを確認するのに使用します。ssはnetstatの後継であり、大規模なシステムでより高速に動作します。
基本的な使い方
|
|
オプションの意味
| オプション | 説明 |
|---|---|
| -t | TCPのみ表示 |
| -u | UDPのみ表示 |
| -l | 待ち受け(LISTEN)状態のみ表示 |
| -n | ポート番号を数値で表示(名前解決しない) |
| -p | プロセスIDとプロセス名を表示(要root権限) |
| -a | すべての接続を表示 |
実行結果の見方
|
|
| 列 | 説明 |
|---|---|
| State | 接続状態(LISTEN、ESTABLISHED、TIME_WAITなど) |
| Local Address:Port | ローカルのIPアドレスとポート番号 |
| Peer Address:Port | 接続先のIPアドレスとポート番号 |
| Process | プロセス情報 |
Local Addressの意味は以下のとおりです。
0.0.0.0:80: すべてのインターフェースでポート80を待ち受け127.0.0.1:3306: ローカルホストのみでポート3306を待ち受け192.168.1.10:443: 特定のIPアドレスでのみ待ち受け
トラブルシューティングのポイント
特定のポートが使用されているか確認
|
|
接続状態の確認
|
|
| 状態 | 説明 |
|---|---|
| LISTEN | 接続待ち受け中 |
| ESTABLISHED | 接続確立済み |
| TIME_WAIT | 接続終了処理中(正常) |
| CLOSE_WAIT | 相手から切断要求を受け取り、自分の終了処理待ち |
| SYN_SENT | 接続要求送信済み、応答待ち |
TIME_WAITが大量にある場合
TIME_WAITが大量に蓄積している場合、短時間に多数の接続が行われていることを示します。Webサーバーなどで大量のリクエストを処理している場合は正常ですが、ポート枯渇の原因になることがあります。
curlによるHTTP通信テスト
curlは、HTTPやHTTPS通信のテストに最適なコマンドラインツールです。Webサーバーへの接続性確認、レスポンスヘッダの確認、APIのテストなどに幅広く使用されます。
基本的な使い方
|
|
実行結果の見方(詳細モード)
|
|
出力の記号の意味は以下のとおりです。
| 記号 | 説明 |
|---|---|
| * | 接続情報、TLSハンドシェイクなど |
| > | 送信したリクエストヘッダ |
| < | 受信したレスポンスヘッダ |
トラブルシューティングのポイント
接続タイムアウト
|
|
接続タイムアウトは、対象サーバーに到達できないか、ファイアウォールでブロックされていることを示します。
SSL/TLS証明書エラー
|
|
証明書エラーの場合、証明書の有効期限切れ、ホスト名の不一致、信頼されていない認証局などが原因です。開発環境でテストする場合は-kオプションで証明書検証をスキップできます(本番環境では使用しないでください)。
|
|
HTTPステータスコードの確認
|
|
| ステータスコード | 意味 |
|---|---|
| 200 | 成功 |
| 301/302 | リダイレクト |
| 403 | アクセス禁止 |
| 404 | リソースが見つからない |
| 500 | サーバー内部エラー |
| 502 | Bad Gateway |
| 503 | サービス利用不可 |
tcpdumpによるパケットキャプチャ
tcpdumpは、ネットワークインターフェースを流れるパケットをキャプチャして表示するコマンドです。他のコマンドでは原因を特定できない場合に、パケットレベルで通信内容を確認できます。
基本的な使い方
tcpdumpはroot権限が必要です。
|
|
フィルタの組み合わせ
tcpdumpは複数の条件を組み合わせて使用できます。
|
|
実行結果の見方
|
|
TCPフラグの意味は以下のとおりです。
| フラグ | 意味 |
|---|---|
| [S] | SYN(接続要求) |
| [S.] | SYN-ACK(接続要求応答) |
| [.] | ACK(確認応答) |
| [P.] | PSH-ACK(データ送信) |
| [F.] | FIN-ACK(接続終了) |
| [R] | RST(接続リセット) |
トラブルシューティングのポイント
3ウェイハンドシェイクの確認
正常なTCP接続では、以下の3つのパケットが交換されます。
1. クライアント → サーバー: [S] (SYN)
2. サーバー → クライアント: [S.] (SYN-ACK)
3. クライアント → サーバー: [.] (ACK)
SYNパケットは送信されているがSYN-ACKが返ってこない場合は、サーバーが応答していないか、ファイアウォールでブロックされている可能性があります。
RSTパケットが返される場合
|
|
RSTパケットは、対象ポートでサービスが待ち受けていないか、ファイアウォールによって明示的に拒否されていることを示します。
Windowsでの代替手段
Windowsにはtcpdumpがありませんが、以下の方法でパケットキャプチャが可能です。
|
|
また、WiresharkをインストールすればGUIでパケットキャプチャと解析が可能です。
その他の便利なコマンド
ip/ifconfigによるネットワーク設定確認
|
|
arp/ip neighによるARPテーブル確認
|
|
ARPテーブルを確認することで、同一LAN内のホストとのレイヤー2レベルでの通信問題を診断できます。
telnet/ncによるポート接続テスト
特定のポートに接続できるかテストするには、telnetまたはnc(netcat)を使用します。
|
|
Windowsでは、PowerShellのTest-NetConnectionを使用できます。
|
|
mtrによる統合的な経路診断
mtrはpingとtracerouteを組み合わせたツールで、継続的に経路を監視してパケット損失や遅延を可視化します。
|
|
トラブルシューティングのフローチャート
ここまで紹介したコマンドを使用した、体系的なトラブルシューティングの手順をまとめます。
flowchart TD
Start[通信障害発生] --> Q1{ping 127.0.0.1<br/>は成功?}
Q1 -->|No| A1[TCP/IPスタックの問題<br/>ネットワーク設定を確認]
Q1 -->|Yes| Q2{ping ゲートウェイ<br/>は成功?}
Q2 -->|No| A2[LAN内の問題<br/>ケーブル、IP設定を確認]
Q2 -->|Yes| Q3{ping 8.8.8.8<br/>は成功?}
Q3 -->|No| A3[WAN接続の問題<br/>tracerouteで経路を確認]
Q3 -->|Yes| Q4{nslookup/dig<br/>は成功?}
Q4 -->|No| A4[DNS問題<br/>DNSサーバー設定を確認]
Q4 -->|Yes| Q5{curl/telnet<br/>で接続成功?}
Q5 -->|No| A5[アプリケーション層の問題<br/>ポート、ファイアウォールを確認<br/>ssで待ち受け状態を確認]
Q5 -->|Yes| Q6{サービスは<br/>正常に応答?}
Q6 -->|No| A6[サービス設定の問題<br/>アプリケーションログを確認]
Q6 -->|Yes| End[問題解決]各ステップで問題が発見された場合、該当するコマンドでさらに詳細を調査します。
| 問題箇所 | 追加調査コマンド |
|---|---|
| TCP/IPスタック | ip addr、ifconfig |
| LAN内接続 | arp -a、ip neigh |
| WAN接続 | traceroute、mtr |
| DNS | dig +trace、nslookup |
| ポート/ファイアウォール | ss -tlnp、iptables -L |
| パケットレベル | tcpdump |
まとめ
ネットワークトラブルシューティングでは、問題を体系的に切り分けることが重要です。OSI参照モデルの下位層から順に確認することで、効率的に原因を特定できます。
本記事で紹介したコマンドと用途を改めて整理します。
| コマンド | 主な用途 | 確認できる内容 |
|---|---|---|
| ping | 接続性確認 | ネットワーク層の疎通、RTT、パケット損失 |
| traceroute/tracert | 経路確認 | パケットの経由ルーター、遅延箇所 |
| nslookup/dig | DNS診断 | 名前解決、DNSレコード |
| netstat/ss | 接続状態確認 | 待ち受けポート、確立中の接続 |
| curl | HTTP通信テスト | HTTPレスポンス、TLS接続 |
| tcpdump | パケットキャプチャ | パケットレベルの詳細な通信内容 |
これらのコマンドを使いこなすことで、「なぜ通信できないのか」を論理的に解明し、適切な対処ができるようになります。