LESSON 25分

ストーリー

あなた
先輩、ping で接続できることは確認できましたが、データがどこを通っているかは分かりますか?
先輩
traceroute というコマンドを使えば、パケットが通る経路を追跡できるよ
あなた
経路を追跡!探偵みたいですね
先輩
まさに。どのルーターを何個通って相手に届いているかが分かるんだ

traceroute とは

一言で言うと

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

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

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


基本的な使い方

Linux / Mac

traceroute 対象

Windows

tracert 対象

実行例

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

出力の読み方

各行の意味

graph LR
    A["3\nホップ番号"] --- B["isp-router.example.net\nルーターのホスト名"] --- C["203.0.113.1\nルーターのIP"] --- D["8.765 / 8.654 / 8.543 ms\n3回の応答時間"]
    style A fill:#dbeafe,stroke:#2563eb,color:#1e40af
    style B fill:#d1fae5,stroke:#059669,color:#065f46
    style C fill:#fef3c7,stroke:#d97706,color:#92400e
    style D fill:#fee2e2,stroke:#dc2626,color:#991b1b
  • ホップ番号: 何番目のルーターか
  • ホスト名 / 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 / 推奨)

# 現在の接続一覧
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分