tracepath コマンド:traceroute の代わりにホップと経路 MTU を確認
Linux サーバーで宛先までパケットが通る経路(ホップ)と経路 MTU は、tracepath コマンドで root 権限なしに確認できます。traceroute がインストールされていない AlmaLinux 9 サーバーでホップ数を 10 に制限して example.com までの経路を確認したところ、4 番目のホップまでは応答時間と経路 MTU 1500 が読み取れ、その後の 6 ホップからは応答がありませんでした。
下の出力は AlmaLinux 9.8 サーバー(root アカウント)で実行した結果で、traceroute のバージョンとパッケージの状態は Debian 12 サーバー(一般アカウント)で確認しました。最初のホップと途中のルーターの IPv6 アドレスはドキュメント用の例のアドレスに置き換え、応答時間と pmtu の値はそのままにしています。
1️⃣ tracepath コマンドの使い方
tracepath は宛先の名前か IP アドレスを 1 つ受け取って UDP パケットを送り、応答したホップを TTL の順に 1 行ずつ出力します。既定の最大ホップ数は 30 で、-m で変更できます。
example.com には -m 10 を付けて、10 番目のホップまでだけ確認しました。
tracepath -n -m 10 example.com 1?: [LOCALHOST] 0.006ms pmtu 9001
1: fe80::1%eth0 0.077ms pmtu 1500
1: 2001:db8:a::5b 2.627ms asymm 8
2: 2001:db8:a::52 1.473ms asymm 12
3: 2001:db8:b::1e 19.653ms asymm 9
4: 2001:db8:c:: 3.642ms asymm 11
5: no reply
6: no reply
7: no reply
8: no reply
9: no reply
10: no reply
Too many hops: pmtu 1500
Resume: pmtu 1500 このサーバーは example.com の IPv6 アドレスにパケットを送り、4 番目のホップまでは応答時間が表示されました。5 番目のホップからは no reply が続き、10 ホップ以内に宛先に届いたことを示す reached の行は出ず、終わるまで約 18 秒かかりました。
同じ宛先に -m なしで実行したときは、30 秒以内に終わりませんでした。応答しないホップが多い経路では、-m で確認するホップ数を減らして実行します。
インストールされている tracepath のバージョンは -V で確認でき、このサーバーの tracepath は iputils 20210202 でした。
tracepath -Vtracepath from iputils 202102022️⃣ tracepath の出力の読み方
出力の 1 行は、ホップ番号、応答したアドレス、往復時間の順に並びます。経路 MTU が変わった地点には pmtu が、行きと帰りのホップ数が異なると asymm が付きます。各行で確認する内容は次のとおりです。
| 出力 | 意味 |
|---|---|
| 1?: | ホップ番号の欄 — 応答から TTL を得られず推定した番号には ? が付く |
| [LOCALHOST] | パケットがまだネットワークに出ていない、サーバー自身の行 |
| 0.077ms | そのホップまでの往復時間 |
| pmtu 1500 | その地点で変わった経路 MTU(バイト)— 変わったときだけ付く |
| asymm 8 | 行きと帰りのホップ数の差 — 公式マニュアルは信頼できる値ではないと説明 |
| no reply | その TTL で送ったパケットに応答がなかったホップ |
| reached | 宛先に届いた行 |
| Too many hops | -m で決めたホップ数まで確認して止まる |
| Resume: pmtu … hops … back … | 経路全体の MTU、宛先までのホップ数、帰りのホップ数の推定値 |
example.com の出力では、最初の行 [LOCALHOST] の pmtu が 9001 で、最初のホップで 1500 に変わりました。TTL 1 の行がアドレスだけ変わって 2 回出たのも、公式マニュアルの例にある形です。マニュアルは、最初のパケットが経路 MTU のために最初のホップで拒否されると、同じ TTL の行がもう一度出ると説明しています。
宛先に届くと行の末尾に reached が付き、最後の Resume 行に宛先までのホップ数が表示されます。127.0.0.1 に送ると 1 ホップで reached が出て、Resume 行は [pmtu 65535 hops 1 back 1] でした。
tracepath -n 127.0.0.1 1: 127.0.0.1 0.047ms reached
Resume: pmtu 65535 hops 1 back 1 reached なしで Too many hops で終わった経路は、-m で決めたホップ内で宛先から応答を受け取れなかったということです。example.com の経路も 10 ホップまで reached がなく、Resume 行にはホップ数がなく pmtu だけが残りました。
3️⃣ tracepath のオプション
tracepath のオプションは -4、-6、-n、-b、-l、-m、-p、-V の 8 つだけで、宛先を省いて実行するとこの一覧が使い方として表示されます。オプションなしで実行すると応答したアドレスを名前に解決して出力し、localhost に送るとホップの欄に localhost が表示されました。
tracepath localhost 1?: [LOCALHOST] 0.003ms pmtu 65536
1: localhost 0.048ms reached
1: localhost 0.030ms reached
Resume: pmtu 65536 hops 1 back 1 [tracepath -n] は名前を解決せず IP アドレスだけを出力します。同じ localhost に -n を付けるとホップの欄が IPv6 アドレス ::1 に変わり、example.com の経路も -n で実行してホップの欄にはアドレスだけが表示されました。
tracepath -n localhost 1?: [LOCALHOST] 0.005ms pmtu 65536
1: ::1 0.039ms reached
1: ::1 0.010ms reached
Resume: pmtu 65536 hops 1 back 1 -b は名前とアドレスを両方出力します。127.0.0.1 に -b を付けると、名前の後ろの括弧にアドレスが付いて [localhost (127.0.0.1)] と表示されました。
tracepath -b 127.0.0.1 1: localhost (127.0.0.1) 0.050ms reached
Resume: pmtu 65535 hops 1 back 1 -m は確認する最大ホップ数を決めるオプションで、0 から 255 まで指定できました。-m 0 を付けるとホップの行なしで Too many hops と Resume の行だけが表示され、256 を入れると [out of range] で拒否されました。
tracepath -m 0 127.0.0.1 Too many hops: pmtu 65535
Resume: pmtu 65535 -l は最初に送るパケットの長さで、既定値は IPv4 が 65535 バイト、IPv6 が 128000 バイトです。127.0.0.1 に -l 1500 を付けると、Resume 行の pmtu が 65535 から 1500 に変わりました。
tracepath -l 1500 -n 127.0.0.1 1: 127.0.0.1 0.028ms reached
Resume: pmtu 1500 hops 1 back 1 -p は最初に送る宛先 UDP ポートを決めるオプションです。127.0.0.1 に -p 33434 を付けた結果は、付けないときと同じでした。
| オプション | コピー | 説明 |
|---|---|---|
| -n | 名前を解決せず IP アドレスだけを出力 | |
| -b | 名前とアドレスを両方出力 | |
| -mホップ数 | 確認する最大ホップ数を指定、既定 30 | |
| -l長さ | 最初に送るパケットの長さを指定、既定 IPv4 65535、IPv6 128000 | |
| -V | バージョンを出力して終了 |
| オプション | コピー | 説明 |
|---|---|---|
| -4 | IPv4アドレスにだけ送る | |
| -6 | IPv6アドレスにだけ送る | |
| -pポート | 最初に送る宛先 UDP ポートを指定 |
4️⃣ tracepath と traceroute の違い
traceroute をインストールできないサーバーでは、traceroute の代わりに tracepath で経路を確認します。確認した AlmaLinux 9.8 サーバーには traceroute パッケージがなく、tracepath は iputils パッケージに含まれているため、別途インストールせずに実行しました。
rpm -q traceroutepackage traceroute is not installedDebian 12 サーバーは逆でした。traceroute 2.1.2 がインストールされていて、tracepath を含む iputils-tracepath パッケージはインストールされていない状態でした。
traceroute --versionModern traceroute for Linux, version 2.1.2
Copyright (c) 2016 Dmitry Butskoy, License: GPL v2 or any laterapt-cache policy iputils-tracepathiputils-tracepath:
Installed: (none)
Candidate: 3:20221126-1+deb12u1この 2 台のように、ディストリビューションによって入っているコマンドが違うため、接続したサーバーにどちらがあるかを先に確認します。tracepath は root 権限が不要で、UDP パケットを送れるアカウントなら実行できます。AlmaLinux 9.8 サーバーの tracepath 実行ファイルも権限は rwxr-xr-x で、別に付いた権限(capability)はありませんでした。
| 項目 | tracepath | traceroute |
|---|---|---|
| AlmaLinux 9.8 サーバー | iputils パッケージに含まれ、すぐに実行 | インストールされていない |
| Debian 12 サーバー | iputils-tracepath パッケージ未インストール | traceroute 2.1.2 インストール済み |
| 送るパケット | UDP | 既定は UDP、-I で ICMP、-T で TCP |
| ホップごとの出力 | 1 行 | 既定で 3 回送り時間は 3 つ(-q で変更) |
| オプション数 | -4 -6 -n -b -l -m -p -V の 8 つ | --help の最初の画面だけで 20 個以上 |
ICMP や TCP で経路を見たり、ホップごとに何度も送って時間を比べたりする必要があるなら、traceroute コマンドをインストールして使うことになります。インストールが難しいサーバーや、経路 MTU まで一緒に見たいサーバーでは tracepath が合っています。
🔲 tracepath コマンドシミュレーター
下のシミュレーターでは、example.com の経路をホップ数だけ変えてもう一度見たり、localhost と 127.0.0.1 に -n、-b、-m、-l を直接入力して違いを確かめたりできます。
🔢 FAQ & おすすめコンテンツ
ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。