コマンドラインのマニュアル

Man » tracerouteオンラインマニュアル - tracerouteマニュアルページの詳細なオンラインドキュメント

🌍
traceroute - ネットワークホストへのパケットがたどる経路を表示

構文

traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...]
[-i device] [-m max_ttl] [-p port] [-s src_addr]
[-q nqueries] [-N squeries] [-t tos]
[-l flow_label] [-w waittimes] [-z sendwait] [-UL] [-D]
[-P proto] [--sport=port] [-M method] [-O mod_options]
[--mtu] [--back]
host [packet_len]
traceroute6  [options]
tcptraceroute  [options]
lft  [options]

説明

tracerouteは、IPネットワークから特定のホストへのパケットがたどる経路を追跡します。
IPプロトコルのTTL(Time to Live)フィールドを使用し、ホストへの経路にある各ゲートウェイからICMP TIME_EXCEEDED応答を生成しようとします。

traceroute6は、traceroute -6と同等です。

tcptracerouteは、traceroute -Tと同等です。

lftは、Layer Four Tracerouteで、traceroute -Tと同様にTCPトレースを行いますが、オリジナルの実装(「lft」と呼ばれる)との互換性を高めるように設計されています。

必須パラメータは、宛先ホストの名前またはIPアドレスです。
オプションの`packet_len`は、プローブパケットの合計サイズです(IPv4の場合はデフォルトで60バイト、IPv6の場合は80バイト)。指定されたサイズは、特定の状況で無視されるか、最小値まで増やすことができます。

このプログラムは、小さなTTL(Time to Live)を持つプローブパケットを起動し、ホストへの経路にあるゲートウェイからICMP "time exceeded"応答をリッスンすることで、インターネットホストへのIPパケットがたどる経路を追跡しようとします。
TTLを1から開始し、1ずつ増やして、ICMP "port unreachable"(またはTCPリセット)を取得するまで、つまり「ホスト」に到達するか、最大(デフォルトは30ホップ)に達するまで繰り返します。
デフォルトでは、各TTL設定で3つのプローブが送信され、TTL、ゲートウェイのアドレス、および各プローブの往復時間が表示されます。
アドレスの後に、要求された場合にさらに情報が表示されることがあります。
プローブからの応答が異なるゲートウェイから来た場合、応答する各システムの住所が印刷されます。
一定の時間内に応答がない場合、そのプローブに対して"*"(アスタリスク)が印刷されます。

往復時間の後、いくつかの追加のアノテーションが印刷されることがあります:!H、!N、または!P(ホスト、ネットワーク、またはプロトコルに到達不能)、!S(ソースルーティングに失敗)、!F(フラグメント化が必要)、!X(管理的に通信が禁止されている)、!V(ホストの優先順位違反)、!C(優先順位カットオフが有効)、または!<num>(ICMP到達不能コード<num>)。
ほとんどのプローブが何らかの形で到達不能になった場合、tracerouteは終了します。

宛先ホストが UDP プローブパケットを処理しないように、宛先ポートは可能性の低い値に設定されます(-pフラグを使用して変更できます)。ICMPまたはTCPトレースルートの場合、そのような問題はありません(TCPの場合は、宛先ホスト上のアプリケーションがプローブを受信しないようにする「ハーフオープン」技術を使用します)。

最新のネットワーク環境では、従来のトレースルートメソッドは常に適用できるとは限りません。これは、ファイアウォールが広く使用されているためです。このようなファイアウォールは、「可能性の低い」UDPポート、またはICMPエコーでさえフィルタリングします。これを解決するために、いくつかの追加のトレースルートメソッド(TCPを含む)が実装されています。これらのメソッドは、特定のプロトコルとソース/宛先ポートを使用して、ファイアウォールを回避しようとします(ファイアウォールから見て、許可されたタイプのネットワークセッションの開始として認識されるようにします)。

オプション

--help ヘルプ情報を表示して終了します。

-4, -6 明示的にIPv4またはIPv6トレースルートを使用します。デフォルトでは、プログラムは与えられた名前を解決し、適切なプロトコルを自動的に選択します。ホスト名の解決によってIPv4とIPv6の両方のアドレスが返される場合、トレースルートはIPv4を使用します。

-I, --icmp プローブにICMPエコーを使用します。

-T, --tcp プローブにTCP SYNを使用します。

-d, --debug ソケットレベルのデバッグを有効にします(Linuxカーネルがサポートしている場合)。

-F, --dont-fragment プローブパケットをフラグメント化しません。(IPv4の場合、DFビットも設定され、これにより、中間ルーターがリモートでフラグメント化しないように指示します。)

プローブパケットのサイズをpacket_lenコマンドラインパラメータによって変更することにより、個々のネットワークホップのMTUに関する情報を手動で取得できます。--mtuオプション(以下を参照)は、これを自動的に試みます。

フラグメント化されていない機能(-Fまたは--mtuなど)は、Linuxカーネル6.22以降で正しく機能します。それ以前のバージョンでは、IPv6は常にフラグメント化され、IPv4は、ルートキャッシュから検出された最終的なMTU(デバイスの実際のMTUよりも小さい場合があります)のみを使用できました。

-f first_ttl, --first=first_ttl 開始するTTL値を指定します。デフォルトは1です。

-g gateway, --gateway=gateway トレースルートに、送信パケットにIPソースルーティングオプションを追加するように指示します。このオプションは、ネットワークにパケットを指定されたゲートウェイを通してルーティングするように指示します(ほとんどのルーターはセキュリティ上の理由からソースルーティングを無効にしています)。一般に、複数のゲートウェイが許可されます(カンマで区切ります)。IPv6の場合、`num,addr,addr...`の形式が許可されます。ここで、`num`はルートヘッダーのタイプ(デフォルトはタイプ2)です。タイプ0のルートヘッダーは現在非推奨になっていることに注意してください(RFC5095)。

-i interface, --interface=interface トレースルートがパケットを送信するインターフェースを指定します。デフォルトでは、インターフェースはルーティングテーブルに従って選択されます。

-m max_ttl, --max-hops=max_ttl トレースルートがプローブする最大ホップ数(最大TTL値)を指定します。デフォルトは30です。

-N squeries, --sim-queries=squeries

同時に送信するプローブパケットの数を指定します。複数のプローブを同時に送信すると、トレースルートの速度が大幅に向上します。デフォルト値は16です。 ただし、一部のルーターやホストはICMPレート制限を使用する場合があります。このような状況では、大きな数を指定すると、一部の応答が失われる可能性があります。

-n     IPアドレスを表示する際に、ホスト名に解決しようとしません。

-p port, --port=port

UDPトレースの場合、トレースルートで使用する宛先ポートのベースを指定します(宛先ポート番号は各プローブでインクリメントされます)。 ICMPトレースの場合、初期ICMPシーケンス値を指定します(これも各プローブでインクリメントされます)。 TCPおよびその他のプロトコルの場合、接続する(固定の)宛先ポートを指定します。tcptracerouteラッパーを使用する場合、-pはソースポートを指定します。

-t tos, --tos=tos

IPv4の場合、サービスタイプ(TOS)および優先度値を設定します。有用な値は、16(低遅延)および8(高スループット)です。一部のTOS優先度値を使用するには、スーパーユーザーである必要があります。 IPv6の場合、トラフィック制御値を設定します。

-l flow_label, --flowlabel=flow_label

IPv6パケットに指定されたflow_labelを使用します。

-w max[,here,near], --wait=max[,here,near]

プローブへの応答を待つ時間を決定します。

3つの(一般的には)浮動小数点値がカンマ(またはスラッシュ)で区切られています。maxは、いずれの場合も、待つ時間の最大値(秒単位、デフォルトは5.0)を指定します。

従来のトレースルートの実装では、常にmax秒全体をすべてのプローブに対して待機していました。しかし、すでに同じホップからの応答がある場合、または一部の次のホップからの応答がある場合、そのような応答のラウンドトリップ時間をヒントとして使用して、実際に待つ適切な時間を決定できます。

オプションのhere(デフォルトは3.0)は、すでに受信した同じホップからの応答のラウンドトリップ時間に掛ける係数を指定します。結果の値は、プローブのタイムアウトとして使用され、maxを超えないようにします。オプションのnear(デフォルトは10.0)は、いくつかの次のホップからの応答に対して同様の係数を指定します。(最初に検出された結果の時間が両方のケースで使用されます)。

最初に、同じホップを探します(このプローブは、これ以降最初に表示されます)。何も見つからない場合は、いくつかの次のホップを探します。何も見つからない場合は、maxを使用します。hereおよび/またはnearの値がゼロの場合、対応する計算はスキップされます。maxのみが指定された場合、herenearは常にゼロに設定されます(以前のバージョンとの互換性のために)。

-q nqueries, --queries=nqueries

ホップあたりのプローブパケットの数を設定します。デフォルトは3です。

-r     通常のルーティングテーブルをバイパスし、接続されたネットワーク上のホストに直接送信します。ホストが直接接続されたネットワーク上にない場合、エラーが返されます。このオプションは、ルートを持たないインターフェイスを介してローカルホストにpingするために使用できます。

-s source_addr, --source=source_addr

別のソースアドレスを選択します。インターフェイスのいずれかのアドレスを選択する必要があります。デフォルトでは、発信インターフェイスのアドレスが使用されます。


-z sendwait, --sendwait=sendwait

プローブ間の最小時間間隔(デフォルトは0)。値が10より大きい場合、ミリ秒で指定されます。それ以外の場合は、秒数(浮動小数点数も可)で指定されます。一部のルーターがICMPメッセージのレート制限を使用する場合に役立ちます。

-e, --extensions

ICMP拡張(rfc4884)を表示します。一般的な形式はCLASS/TYPE:の後に16進数ダンプが続きます。MPLS(rfc4950)は、次のような形式で解析されて表示されます:MPLS:L=ラベル、E=exp_use、S=スタックの最下部、T=TTL(より多くのオブジェクトは/で区切られます)。インターフェイス情報(rfc5837)も、次のような形式で解析されて表示されます:{INC|SUB|OUT|NXT}:index、IP_addr、「名前」、mtu=MTU(4つのフィールドすべてが存在しない場合があります)。

-A, --as-path-lookups

ルーティングレジストリでASパス検索を実行し、対応するアドレスの直後に結果を表示します。

-V, --version

バージョンを表示して終了します。

高度な使用を目的とした追加のオプション(代替トレース方法など)があります。

--sport=port

使用する送信元ポートを選択します。-N 1 -w 5 を意味します。通常、送信元ポート(該当する場合)はシステムによって選択されます。

--fwmark=mark

送信パケットのファイアウォールマークを設定します(Linuxカーネル2.6.25以降)。

-M method, --module=name

トレースルート操作に使用するメソッドを指定します。デフォルトの従来のUDPメソッドの名前はdefault、ICMP(-I)とTCP(-T)の名前はそれぞれicmpとtcpです。メソッド固有のオプションは、-Oで渡すことができます。ほとんどのメソッドには、独自の簡単なショートカットがあります(-Iは-M icmpを意味するなど)。

-O option, --options=options

メソッド固有のオプションを指定します。複数のオプションはカンマで区切るか、コマンドラインで複数の-Oを使用します。各メソッドには、独自の特定のオプションがある場合もあれば、オプションがない場合もあります。利用可能なオプションに関する情報を表示するには、-O helpを使用します。

-U, --udp

特定の宛先ポートへのUDPを使用してトレースルートを行います(各プローブでポートを増やす代わりに)。デフォルトのポートは53(DNS)です。

-UL    UDPLITEを使用してトレースルートを行います(デフォルトのポートは53です)。

-D, --dccp

DCCPリクエストをプローブに使用します。

-P protocol, --protocol=protocol

指定されたプロトコルの生のパケットを使用してトレースルートを行います。デフォルトのプロトコルは253(rfc3692)です。

--mtu    トレース中のパスに沿ってMTUを検出します。-F -N 1を意味します。新しいMTUは、そのようなMTUに到達する必要があるホップの最初のプローブで、F=NUMという形式で一度表示されます。実際には、対応する「フラグが必要」ICMPメッセージは通常、前のホップによって送信されます。

一部のルーターは、フラグメントに関する情報を一度キャッシュする可能性があります。したがって、最終的なMTUをより近いホップから受信する可能性があります。-tで珍しいTOSを指定してみてください。これにより、1回の試行で役立つ場合があります(その後、そこでもキャッシュされる可能性があります)。詳細については、-Fオプションを参照してください。

--back 転送方向と逆方向で数が異なるように見える場合に、逆方向のホップ数を表示します。この数は、リモートホップが、初期TTLを64、128、または255に設定して応答パケットを送信するという仮定に基づいて推測されます(これは一般的な方法です)。これは、'-NUM'という形式の負の値として表示されます。

利用可能なメソッドのリスト

一般に、特定のトレースルートメソッドは、-M 名前 で選択する必要がありますが、ほとんどのメソッドには、コマンドラインスイッチ(メソッド名の後に表示されている場合)があります。

default

伝統的な、昔ながらのトレースルートメソッド。デフォルトで使用されます。

プローブパケットは、いわゆる「ありそうもない」宛先ポートを持つUDPデータグラムです。「ありそうもない」ポートの最初のプローブは33434で、次のプローブごとに1つずつ増分されます。これらのポートは使用されていないと予想されるため、宛先ホストは通常、最終的な応答として「icmp 宛先ポートに到達不能」を返します(これらのポートをリッスンするアプリケーションがある場合、どうなるかは誰にもわかりません)。

このメソッドは、権限のないユーザーが使用できます。

icmp       -I

現在、最も一般的なメソッドで、ICMPエコーパケットをプローブに使用します。 宛先ホストにping(8)できる場合、ICMPトレースルートも適用できます。

このメソッドは、カーネル3.0以降(IPv4)、および11以降(新しいdgram ICMP(または「ping」)ソケットをサポートするIPv6)で、権限のないユーザーが使用できる場合があります。このようなソケットを許可するには、システム管理者がnet/ipv4/ping_group_range sysctl範囲を設定して、ユーザーのグループに一致するようにする必要があります。 オプション:

raw    常にrawソケットのみを使用します(従来の方式)。

この方式は、まず(互換性のために)試され、次に新しいdgram ICMPソケットがフォールバックとして使用されます。

dgram  dgram ICMPソケットのみを使用します。

tcp        -T

ファイアウォールを回避するために設計された、よく知られた最新の方法。 常に宛先ポート(デフォルトは80、http)を使用します。

ネットワークパスに一部のフィルターが存在する場合、ほとんどの場合、「ありそうもない」UDPポート(デフォルトメソッドの場合)またはICMPエコー(ICMPの場合)がフィルターでブロックされ、トレースルート全体がそこで停止します。ネットワークフィルターを回避するには、許可されたプロトコル/ポートの組み合わせのみを使用する必要があります。たとえば、メールサーバーをトレースする場合、-T -p 25を使用すると、-Iが使用できない場合でも、メールサーバーに到達できる可能性があります。

このメソッドは、宛先ホスト上のアプリケーションがプローブをまったく受信しないようにする、有名な「半開接続」技術を使用します。通常、TCP SYNが送信されます。リッスンされていないポートの場合、TCP RSTを受信して処理が完了します。アクティブにリッスンしているポートの場合、TCP SYN + ACKを受信しますが、TCP RSTで応答します(予想されるTCP ACKの代わりに)。これにより、リモートTCPセッションは、アプリケーションが気付くことなくドロップされます。

TCPメソッドには、いくつかのオプションがあります。

syn,ack,fin,rst,psh,urg,ece,cwr

プローブパケットのTCPフラグを任意の組み合わせで指定します。

flags=num

TCPヘッダーのフラグフィールドをnumに正確に設定します。

ecn    TCPフラグECEとCWR(Explicit Congestion Notification、rfc3168用)を持つSYNパケットを送信します。

sack,timestamps,window_scaling

送信されるプローブパケットで、対応するTCPヘッダーオプションを使用します。


sysctl 現在の sysctl (/proc/sys/net/*) 設定を、上記の TCP ヘッダーオプションと ECN に使用します。
デフォルトでは常に設定されます。特に何も指定されていない場合は。

fastopen
初期クッキーネゴシエーションでのみ、fastopen TCP オプション(SYN時)を使用します。

mss=[num]
最大セグメントサイズ (MSS) TCP ヘッダーオプションの値(または変更なし)を SYN で使用し、パスに沿ってその値を調整します。変更された新しい MSS は、最初に検出されたプローブで M=NUM という形式で 1 回だけ表示されます。ただし、一部のルーターは、タイムアウトメッセージで短すぎる元のフラグメントを返すため、チェックが不可能になる場合があります。さらに、応答が異なる順序で来る可能性があります。これらすべてにより、レポートが後になって表示される可能性があります(-N 1 を使用すると順序が改善される可能性があります)。

info TCP フラグと、最終的な TCP 応答でサポートされているオプションを表示します。これにより、ターゲットホストがポートをリッスンしているかどうか、その他の有用な情報を判断できます。サポートされている TCP オプションは、-T -O で設定できるすべてのオプション(mss、sack、タイムスタンプ、ウィンドウスケーリング、fastopen)であり、出力形式は同様です(mss の場合は値、それ以外の場合は単に存在するかどうか)。

デフォルトのオプションは、syn、sysctl です。

tcpconn
TCP メソッドの初期実装で、connect(2) 呼び出しを使用して、完全な TCP セッションを開きます。通常の使用には推奨されません。これは、宛先アプリケーションに常に影響を与え(混乱させる可能性があるため)です。

udp -U
一定の宛先ポート(デフォルトは 53、DNS)を持つ UDP データグラムを使用します。
ファイアウォールをバイパスすることを目的としています。

TCP メソッドとは異なり、宛先ホストの対応するアプリケーションは常にプローブを受信します(ランダムなデータ付き)。ほとんどの場合、これによってアプリケーションが混乱します。ほとんどの場合、応答がないため、トレースの最終ホップが表示されないことがあります(幸いなことに、少なくとも DNS サーバーは、何らかの形で応答します)。

このメソッドは、権限のないユーザーが使用できます。

udplite -UL
プローブに UDPLite データグラム(一定の宛先ポート、デフォルトは 53)を使用します。

このメソッドは、権限のないユーザーが使用できます。
オプション:

coverage=num
UDPLite 送信カバレッジを num に設定します。

dccp -D
プローブに DCCP 要求パケット(RFC4340)を使用します。

このメソッドは、TCP で使用されるのと同じ「半開接続」技術を使用します。デフォルトの宛先ポートは 3343 です。

オプション:

service=num
DCCP サービスコードを num に設定します(デフォルトは 1885957735)。

raw -P proto
プロトコル proto の生パケットを送信します。
プロトコル固有のヘッダーは使用されず、IP ヘッダーのみが使用されます。
-N 1 -w 5 を暗黙的に設定します。
オプション:

protocol=proto
IP プロトコル proto を使用します(デフォルトは 253)。

注意事項

通常、複数のプローブを同時に送信することで、処理速度を向上させます。一方、これは特に応答方向で「パケットの洪水」を引き起こします。ルーターは ICMP 応答のレートを制限し、一部の応答が失われる可能性があります。これを回避するには、同時プローブの数を減らすか、初期の traceroute 実装のように 1 に設定します(例:-N 1)。

最終ホストは、同時送信されるプローブの一部を破棄したり、最新のプローブにのみ応答したりする場合があります。これにより、最終ホップの近くで「期限切れのように見える」ホップが追加で発生する可能性があります。そのような状況を自動的に検出しようとするスマートなアルゴリズムを使用していますが、それでも解決できない場合は、-N 1 オプションを使用してください。

プログラムの動作をさらに安定させるには、-z オプションを使用して、プローブ間の時間を遅らせることができます。たとえば、-z 5 を使用すると、0.5秒の待機時間がプローブ間に挿入されます。

余分な待機を避けるために、適応タイムアウトアルゴリズムを使用しています(詳細については、-w オプションを参照)。これにより、応答時間が変動する場合、期限切れが早めに発生する可能性があり、代わりに * が表示されます。そのような場合は、-w オプションに希望するタイムアウト値を指定して、このアルゴリズムをオフにしてください(例:-w 5)。

いくつかのホップがすべての方法で何も報告しない場合、何らかの情報を取得する最後の手段は、ping -R コマンドを使用することです(IPv4、および最初の8ホップのみ)。

関連項目

ping(8), ping6(8), tcpdump(8), netstat(8)