Linux / コマンド / traceroute - 目的地までのルーター経路追跡

tracerouteは、IPv4のTTL(Time To Live)またはIPv6のホップ制限を段階的に増やして、宛先への経路上で応答するルーターなどを調べます。TTLは途中のルーターを通るたびに減る値で、その期限切れへの応答を手掛かりにします。ホップごとの応答や遅延の現れ方を比較できます。

各ホップの応答は診断パケットに対する結果であり、アプリが実際に使う経路を確定するものではありません。ここで扱うTraceroute for Linuxは、既定でUDP(User Datagram Protocol)を使います。-IはICMP(Internet Control Message Protocol)のEcho、-TはTCP(Transmission Control Protocol)の接続開始要求(SYN)を使う探索です。方式や権限の条件は、利用する実装の説明書で確認してください。

基本的な文法

traceroute [オプション] 宛先

インストールされている実装とオプションは、配布版によって異なる場合があります。man tracerouteで現在のシステムの説明を確認してください。

使用例

基本経路追跡

example.comは説明用ドメインなので、調査してよい実際のホストに置き換えます。経路上で応答した機器と、それぞれへの往復時間を表示します。

traceroute example.com


数字アドレスで表示

出力アドレスをホスト名へ逆引きする処理を省きます。ただし、宛先をホスト名で指定した場合は、その名前をIPアドレスに解決する処理が必要です。

traceroute -n example.com


ICMPプローブ選択

基本のUDP方式で応答が制限される場合、他の方式で比較します。

traceroute -I example.com

ホップごとの応答の読み方

tracerouteはTTLを変えた検出パケットで目的地までのホップを調査します。次は数字のIPで出力してホスト名への逆引きによる遅延を減らす例です。

traceroute -n example.com

出力構造の例(実際の経路・時間は毎回異なります):

1  192.0.2.1  1.0 ms  0.9 ms  1.1 ms
2  * * *

1行は1ホップの探索を表し、既定では3回の探索それぞれの往復時間が並びます。この値は送信元からそのホップまでの往復であり、前のホップから次のホップへの区間時間ではありません。*は、その探索への応答を待ち時間内に得られなかったことを示します。後続ホップが表示されるなら、その機器だけが診断応答を制限している可能性もあります。往路と復路が異なる場合もあるため、この結果だけで障害機器を断定しないでください。

主なオプションと形式

オプション・形式 説明
-n アドレスは数字で表示します。
-I ICMP Echoプローブを使用します。
-T TCPプローブを使用します。
-m ホップ 最大ホップ数を制限します。
-q 回数 ホップごとに送信するプローブ数を指定します。
-w 時間 応答待ち時間を調整します。

使用する際の注意点

あるホップで * が表示されても、次のホップが引き続き表示される場合、そのルーターの診断応答のみが制限されている可能性があります。ある区間で往復時間(RTT:Round Trip Time)が増えただけでボトルネックと断定せず、最終目的地の応答と繰り返し測定を比較してください。一部のプローブ方式では追加の権限が必要です。経路MTUも調べる場合は、tracepathによる経路とMTUの確認を併用できます。

よくある質問

中間ホップが * と表示される場合、パケットはそこで途切れたのでしょうか?

いいえ。そのルーターが TTL 期限切れ応答を送信していないか、制限している可能性があります。その後のホップや目的地の応答を合わせて確認してください。

公式ドキュメント

オプションの正確な動作と実装による差は、traceroute 関連公式ドキュメントで確認できます。