traceroute は、Linuxで指定したホストまでの通信経路(経由するルーターやゲートウェイ)を1ホップずつ表示するコマンドです。まずはこれだけ覚えれば使えます。
traceroute example.com
ping で「繋がらない」ことは分かっても「どこで途切れているか」までは分かりません。traceroute を使うと、自宅のルーター・プロバイダ・中継サーバーのどこで通信が止まっているかを切り分けられます。
インストール方法
ディストリビューションによっては traceroute コマンドが標準では入っていません。「command not found」と表示された場合は、以下でインストールします。
| ディストリビューション | インストールコマンド |
|---|---|
| Ubuntu / Debian | sudo apt install traceroute |
| CentOS / RHEL | sudo yum install traceroute |
| Fedora | sudo dnf install traceroute |
| Arch Linux | sudo pacman -S traceroute |
構文(Syntax)
traceroute [オプション] ホスト名またはIPアドレス
traceroute の仕組み(TTLとICMP)
traceroute は、パケットの TTL(Time To Live) を1から順に増やしながら送信することで、経路上のルーターを1台ずつ検出します。
- TTL=1のパケットを送ると、最初のルーターがTTLを0にして破棄し、送信元へ「Time Exceeded」というICMPエラーを返す
- このエラーを返したルーターのIPアドレスと応答時間を1行目として記録する
- TTL=2、TTL=3…と1つずつ増やして同じ処理を繰り返し、宛先ホストに到達するまでホップを積み上げていく
デフォルトではUDPパケットを使用しますが、環境やオプションによりICMP(-I)やTCP(-T)を使う方式に切り替えられます。ファイアウォールでUDPが遮断されている環境では、この切り替えが有効です。
主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-n | ホスト名を解決せずにIPアドレスのみ表示(応答が速くなる) | traceroute -n example.com |
-w 秒数 | 応答のタイムアウト秒数を指定 | traceroute -w 2 example.com |
-q 回数 | 各ホップに送信するパケット数(デフォルト3) | traceroute -q 1 example.com |
-m TTL | 最大ホップ数(デフォルト30) | traceroute -m 20 example.com |
-f TTL | 調査を開始する最初のTTL(デフォルト1) | traceroute -f 5 example.com |
-I | ICMP Echo Requestを使用(pingと同様の方式) | sudo traceroute -I example.com |
-T | TCP SYNパケットを使用(UDP/ICMPが遮断された環境向け) | sudo traceroute -T -p 443 example.com |
-p PORT | TCP/UDPの宛先ポートを指定 | traceroute -T -p 80 example.com |
-4 | IPv4を強制的に使用 | traceroute -4 example.com |
-6 | IPv6を強制的に使用 | traceroute -6 example.com |
実行例
基本的な経路調査
traceroute example.com
出力例:
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.456 ms 0.412 ms 0.398 ms
2 203.0.113.1 (203.0.113.1) 5.321 ms 5.287 ms 5.240 ms
3 198.51.100.2 (198.51.100.2) 12.123 ms 12.099 ms 12.088 ms
4 93.184.216.34 (93.184.216.34) 20.456 ms 20.432 ms 20.401 ms
ホスト名解決を省略して高速化
traceroute -n example.com
出力例:
1 192.168.1.1 0.456 ms 0.412 ms 0.398 ms
2 203.0.113.1 5.321 ms 5.287 ms 5.240 ms
3 198.51.100.2 12.123 ms 12.099 ms 12.088 ms
4 93.184.216.34 20.456 ms 20.432 ms 20.401 ms
IPv4 / IPv6 を指定して調査
traceroute -4 example.com
traceroute -6 example.com
ICMPモードでの経路調査
sudo traceroute -I example.com
TCP SYNパケットを使用(ファイアウォール回避用)
sudo traceroute -T -p 443 example.com
UDPやICMPがファイアウォールで遮断されている環境でも、443番ポート宛のTCP SYNなら通ることが多いため、経路調査ができる可能性が高くなります。
最大ホップ数を制限して調査
traceroute -m 10 example.com
エラー例(DNS解決できない場合)
traceroute unknown.host
出力例:
traceroute: unknown.host: Name or service not known
出力の読み方
各行は「ホップ番号」「IPアドレス(またはホスト名)」「3回分の応答時間(RTT)」の順に表示されます。
- 応答時間が急に大きくなるホップ:そのルーター区間で遅延が発生している可能性が高い
- 特定のホップだけ
* * *(アスタリスク)が並ぶ:そのルーターがICMP応答を返さない設定(多くは意図的なブロック)で、必ずしも通信断とは限らない - 最後のホップまで
* * *が続く:宛先または途中の経路で応答がすべて拒否されている、あるいは実際に到達できていない
うまく動かないときの対処法
command not found と表示される
traceroute パッケージが未インストールです。「インストール方法」の章のコマンドを実行してください。パッケージを入れずにすぐ使いたい場合は、標準搭載されていることが多い tracepath example.com(root権限不要)や mtr example.com でも代用できます。
Operation not permitted / 権限エラーが出る
-I(ICMP)や -T(TCP)オプションはRAWソケットを使うため、root権限が必要な場合があります。sudo を付けて実行してください。デフォルトのUDPモードであれば、root権限なしで動作する環境がほとんどです。
すべてのホップが * * * になる
途中経路やクラウド事業者のファイアウォールでUDP/ICMPが遮断されているケースが多いです。-I(ICMPモード)や -T -p 443(TCP SYNモード)に切り替えると経路が見えることがあります。
traceroute / ping / mtr の違い
| コマンド | 用途 | 特徴 |
|---|---|---|
ping | 宛先ホストへの疎通確認 | 「繋がるか・繋がらないか」だけを確認。経路は分からない |
traceroute | 宛先までの経路(ホップ)を1つずつ確認 | どのルーターで遅延・断絶しているかを切り分けられる |
mtr | pingとtracerouteをリアルタイムに統合 | 各ホップの応答時間・パケットロス率を継続的に監視できる |
よくある質問
Windowsの tracert との違いは?
Windowsの tracert はデフォルトでICMPを使用しますが、Linuxの traceroute はデフォルトでUDPを使用します。表示される情報の見方はほぼ同じです。
Macでも同じコマンドが使える?
macOSにも traceroute が標準搭載されており、基本的なオプション(-n、-m など)はLinuxと共通です。一部のオプション(-T など)は環境によって非対応の場合があります。
sudo(root権限)は必須?
デフォルトのUDPモードでは不要です。-I(ICMP)や -T(TCP)オプションを使う場合はRAWソケットが必要になるため、sudo を付けて実行してください。
nslookup や dig との違いは?
nslookup・dig はDNSの名前解決結果を調べるコマンドで、経路は表示しません。「ドメインが正しいIPに解決されているか」を調べたいときはnslookup・digを、「そのIPまでの通信経路や遅延箇所」を調べたいときはtracerouteを使います。
関連コマンド
ping: 指定ホストとの疎通を確認するmtr:pingとtracerouteを組み合わせたリアルタイム経路調査ツールtracepath: root権限不要で使える簡易版traceroutenmap: ネットワーク探索とポートスキャンss/netstat: ローカルのソケット状態を確認する
ネットワーク障害の切り分け手順をまとめて確認したい場合は、接続不良の原因を特定!ネットワークトラブルシュートの基本コマンド一覧もあわせて参照してください。
備考
- 一般的に
tracerouteは UDP パケットを利用しますが、環境やオプションにより ICMP や TCP を使用できます。 - Linux では
tracerouteパッケージが必要(インストールされていない場合はtracerouteコマンドが使えない)。 traceroute実行には root 権限が必要な場合があります(特に ICMP/TCP オプション使用時)。
参考
- manページ: https://man7.org/linux/man-pages/man8/traceroute.8.html
- traceroute公式ドキュメント: https://traceroute.sourceforge.net/

コメント