LESSON 25分

tracerouteで経路を追跡しよう

ストーリー

「先輩、ping で接続できることは確認できましたが、データがどこを通っているかは分かりますか?」

「traceroute というコマンドを使えば、パケットが通る経路を追跡できるよ」

「経路を追跡!探偵みたいですね」

「まさに。どのルーターを何個通って相手に届いているかが分かるんだ」


traceroute とは

一言で言うと

パケットが相手に届くまでの経路(通過するルーター)を表示するコマンド

[あなたのPC] → [ルーター1] → [ルーター2] → [ルーター3] → [相手のサーバー]

各ルーターを「ホップ」と呼び、何ホップで到達したかが分かります。


基本的な使い方

Linux / Mac

bash
traceroute 対象

Windows

bash
tracert 対象

実行例

bash
traceroute 8.8.8.8

出力例:

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  gateway (192.168.1.1)          1.234 ms  1.112 ms  1.089 ms
 2  10.0.0.1                       5.432 ms  5.321 ms  5.234 ms
 3  isp-router.example.net         8.765 ms  8.654 ms  8.543 ms
 4  72.14.232.136                  12.345 ms 12.234 ms 12.123 ms
 5  dns.google (8.8.8.8)           3.456 ms  3.345 ms  3.234 ms

出力の読み方

各行の意味

 3  isp-router.example.net (203.0.113.1)  8.765 ms  8.654 ms  8.543 ms
 │  │                       │              │         │         │
 │  │                       │              └─────────┴─────────┴── 3回の応答時間
 │  │                       └──────────────────────────── ルーターのIP
 │  └──────────────────────────────────────────────────── ルーターのホスト名
 └─────────────────────────────────────────────────────── ホップ番号
  • ホップ番号: 何番目のルーターか
  • ホスト名 / IP: そのルーターの情報
  • 応答時間: 3回パケットを送り、各回の応答時間を表示

特殊な表示

 4  * * *

* * * は応答がなかったことを意味します。

原因:

  • ルーターがICMPに応答しない設定
  • ファイアウォールでブロックされている
  • パケットが到達しなかった

traceroute の仕組み

traceroute は TTL(Time To Live) を利用して経路を調べます。

仕組み

Step 1: TTL=1 のパケットを送信
        → 1番目のルーターが「TTL切れ」エラーを返す
        → 1番目のルーターが判明

Step 2: TTL=2 のパケットを送信
        → 2番目のルーターが「TTL切れ」エラーを返す
        → 2番目のルーターが判明

Step 3: TTL=3 のパケットを送信
        → 目的地に到達
        → 経路の調査完了

TTLを1ずつ増やしながら送ることで、通過するルーターを1つずつ特定していきます。


traceroute の活用場面

遅延の原因箇所を特定

 1  gateway (192.168.1.1)       1 ms
 2  isp-router                  5 ms
 3  backbone-router            50 ms   ← ここで急に遅くなっている!
 4  remote-router             200 ms
 5  target-server             205 ms

3番目のルーターで応答時間が急増しているので、そこに問題がありそうだと分かります。

接続できない場所を特定

 1  gateway (192.168.1.1)       1 ms
 2  isp-router                  5 ms
 3  * * *                            ← ここから先に進めない
 4  * * *
 5  * * *

3番目以降で応答がないので、ISPのルーターとその先の間に問題がありそうだと推測できます。


netstat / ss コマンド(補足)

自分のコンピュータのネットワーク接続状況やポートの使用状況を確認するコマンドです。

ss コマンド(Linux / 推奨)

bash
# 現在の接続一覧
ss -tuln

出力例:

State    Recv-Q  Send-Q   Local Address:Port    Peer Address:Port
LISTEN   0       128      0.0.0.0:22             0.0.0.0:*
LISTEN   0       128      0.0.0.0:80             0.0.0.0:*
LISTEN   0       128      0.0.0.0:443            0.0.0.0:*
  • ポート22(SSH)、80(HTTP)、443(HTTPS)で待ち受けていることが分かる

オプションの意味

オプション意味
-tTCPの接続を表示
-uUDPの接続を表示
-lLISTEN状態(待ち受け中)を表示
-nポート番号を数字で表示

トラブルシューティングの流れ

「Webサイトにアクセスできない」と言われたときの調査手順:

Step 1: ping localhost
        → 自分のネットワークスタックは正常?

Step 2: ping ルーター(192.168.1.1 など)
        → LAN内の接続は正常?

Step 3: ping 8.8.8.8
        → インターネットには接続できる?

Step 4: nslookup 対象ドメイン
        → DNS の名前解決はできる?

Step 5: traceroute 対象
        → 経路のどこに問題がある?

Step 6: curl 対象URL
        → HTTPレベルで問題がある?

このステップを順番に試すことで、問題の箇所を絞り込めます。


まとめ

ポイント内容
tracerouteパケットの経路を追跡するコマンド
ホップパケットが通過するルーターの数
* * *応答がない(ブロックされているか到達できない)
トラブルシュートping → nslookup → traceroute → curl の順

チェックリスト

  • traceroute の基本的な使い方が分かる
  • 出力結果の読み方(ホップ、応答時間)を理解した
  • * * * の意味を知っている
  • トラブルシューティングの手順を理解した

次のステップへ

traceroute と診断の流れが分かりましたね。

次は演習です。ネットワーク診断コマンドを使って、実際の問題を調査してみましょう。


推定読了時間: 25分