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)で待ち受けていることが分かる
オプションの意味
| オプション | 意味 |
|---|---|
| -t | TCPの接続を表示 |
| -u | UDPの接続を表示 |
| -l | LISTEN状態(待ち受け中)を表示 |
| -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分