tracepath コマンド:traceroute の代わりにホップと経路 MTU を確認

テスト環境RHEL系AlmaLinux 9.8iputils 20210202rootアカウントDebian 12 · traceroute 2.1.2 一般ユーザー
ネットワークコマンドtracepath場所/usr/bin/tracepath

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 コマンドの使い方

  • ↪️ 宛先までのホップと経路 MTU を確認

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 -V
tracepath from iputils 20210202

2️⃣ tracepath の出力の読み方

  • ↪️ ホップ番号、pmtu、asymm、reached

出力の 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 のオプション

  • ↪️ -n、-b、-m とパケット長 -l

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バージョンを出力して終了
オプションコピー説明
-4IPv4アドレスにだけ送る
-6IPv6アドレスにだけ送る
-pポート最初に送る宛先 UDP ポートを指定

4️⃣ tracepath と traceroute の違い

  • ↪️ インストール、権限、送るパケット

traceroute をインストールできないサーバーでは、traceroute の代わりに tracepath で経路を確認します。確認した AlmaLinux 9.8 サーバーには traceroute パッケージがなく、tracepath は iputils パッケージに含まれているため、別途インストールせずに実行しました。

rpm -q traceroute
package traceroute is not installed

Debian 12 サーバーは逆でした。traceroute 2.1.2 がインストールされていて、tracepath を含む iputils-tracepath パッケージはインストールされていない状態でした。

traceroute --version
Modern traceroute for Linux, version 2.1.2
Copyright (c) 2016  Dmitry Butskoy,   License: GPL v2 or any later
apt-cache policy iputils-tracepath
iputils-tracepath:
  Installed: (none)
  Candidate: 3:20221126-1+deb12u1

この 2 台のように、ディストリビューションによって入っているコマンドが違うため、接続したサーバーにどちらがあるかを先に確認します。tracepath は root 権限が不要で、UDP パケットを送れるアカウントなら実行できます。AlmaLinux 9.8 サーバーの tracepath 実行ファイルも権限は rwxr-xr-x で、別に付いた権限(capability)はありませんでした。

項目tracepathtraceroute
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 を直接入力して違いを確かめたりできます。

tracepath コマンドシミュレーターiputils 20210202
[root@server work]#
ブラウザー内でのみ動作し、実際のパケットは送りません。↑↓で前に入力したコマンドを呼び出せます。

🔢 FAQ & おすすめコンテンツ

終了コードではわかりません。example.com に -m 10 で実行し、reached なしで Too many hops で終わったときも終了コードは 0 でした。名前解決の失敗と不正な引数は 1、宛先を省いて実行したときは 255 でした。終了コードは実行エラーしか区別しないため、宛先に届いたかどうかは出力の reached の行で確認します。

localhost は IPv6 アドレス ::1 に送られ、最初の行 [LOCALHOST] にループバックインターフェースの MTU 65536 が表示されました。一方、IPv4 の 127.0.0.1 では IPv4 の既定のパケット長 65535 がそのまま表示されました。ip link で確認した lo インターフェースの MTU も 65536 でした。

-4 を付けると IPv4 アドレスにだけ送ります。localhost に -4 を付けると [LOCALHOST] の行なしで IPv4 で 1 ホップで reached が表示され、逆に 127.0.0.1 に -6 を付けると [Address family for hostname not supported] で終わりました。

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 4   +   1   =