【Linux】経路情報を取得する:tracerouteコマンド

 ネットワークのトラブルシューティングや診断において、経路情報の取得は非常に重要です。特に、ネットワーク上でどのルーターやゲートウェイを経由して通信が行われているかを把握することは、ネットワークの遅延や障害の原因を特定するのに役立ちます。そのために利用されるのが、tracerouteコマンドです。

tracerouteコマンドの概要

 tracerouteコマンドは、ネットワーク経路の診断に使用されるツールです。このコマンドを使用すると、指定した宛先に到達するまでに経由するネットワークデバイス(ルーターやゲートウェイ)を追跡し、それぞれのホップ(跳躍)での応答時間を確認できます。ネットワークのトラブルシューティングや、通信経路の特定に非常に役立ちます。

【構文】
traceroute [オプション] 宛先IPアドレス(もしくはホスト名)

中断方法Ctrl + C でコマンドの実行を中断できます。

tracerouteコマンド主なオプションと説明

オプション説明
-nホスト名を解決せず、IPアドレスを直接表示する。
-6IPv6を使用してtracerouteを実行する。traceroute6と同様。
tracerouteコマンド主なオプションと説明

tracerouteコマンドを使用する場面

 tracerouteコマンドは、ネットワーク上の経路を診断する際に使用されます。特に、以下のような場面で役立ちます。

  • ネットワークの遅延が発生している場所を特定する場合。
  • ネットワークが複数のルーターを経由している場合に、どのルーターで問題が発生しているかを確認する。
  • ネットワークの構成やトポロジーを把握するために、経路を可視化する場合。

tracerouteコマンドの出力例と項目の説明

以下は、tracerouteコマンドを使用した際の出力例です。

traceroute to google.com (172.217.17.46), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  1.123 ms  1.083 ms  1.065 ms
 2  10.0.0.1 (10.0.0.1)  2.234 ms  2.210 ms  2.190 ms
 3  203.0.113.1 (203.0.113.1)  12.345 ms  12.310 ms  12.298 ms
 4  172.217.17.46 (172.217.17.46)  15.678 ms  15.630 ms  15.608 ms
項目説明
Hopパケットが宛先に到達するまでに経由した各ネットワークデバイスの番号
IPアドレス経由したネットワークデバイスのIPアドレス
RTT (Round Trip Time)各ホップでの応答時間(ミリ秒)
tracerouteコマンドの出力項目

tracerouteのメカニズム

1.TTL(Time To Live)の設定

  • tracerouteコマンドは、最初にTTL(Time To Live)値を1に設定してパケットを送信します。TTLはパケットがルーターを通過するたびに1ずつ減少し、TTLが0になると、そのルーターはパケットを破棄し、「Time Exceeded」というICMPメッセージを送信元に返します。

2.ホップごとの経路追跡

  • 画像の①のように、最初のルーターでTTL=1となり、パケットが破棄されると、ルーターから送信元に「Time Exceeded」のメッセージが返されます。このとき、ルーターのIPアドレスと応答時間が記録されます。
  • 次に、TTL=2に設定したパケットが送信されます(②)。このパケットは、次のルーターでTTL=0となり、再び「Time Exceeded」メッセージが返されます。このプロセスが繰り返されることで、経路上の各ルーターの情報が取得されます。

3.宛先到達時の応答

  • TTLが目的地に到達するまで増加されます(③と④)。目的地に到達した場合、目的地のホストは通常「Echo Reply」メッセージを返します。このメッセージが受信されると、tracerouteは経路の追跡を完了します。

4.ポート到達不能時の応答

  • 目的地がICMPの「Echo Reply」を返さない場合、代わりに「Port Unreachable」などのメッセージが返されることがあります。これも経路追跡が完了したことを示します。

 このメカニズムにより、tracerouteは送信元から目的地までの各ホップ(ルーター)での遅延時間を測定し、ネットワークの経路を可視化します。これにより、ネットワークのどの部分に遅延や障害が発生しているかを特定するのに非常に役立ちます。

tracerouteのインストール(Ubuntu)

 Ubuntuにおいてtracerouteコマンドを使用するには、tracerouteパッケージをインストールする必要があります。

 sudo apt-get install tracerouteコマンドを実行することで、tracerouteコマンドがインストールされます。

【インストールコマンド】
sudo apt-get install traceroute

$ sudo apt-get install traceroute
[sudo] user01 のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下のパッケージが新たにインストールされます:
  traceroute
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 11 個。
45.4 kB のアーカイブを取得する必要があります。
この操作後に追加で 152 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu jammy/universe amd64 traceroute amd64 1:2.1.0-2 [45.4 kB]
45.4 kB を 1秒 で取得しました (45.4 kB/s)
以前に未選択のパッケージ traceroute を選択しています。
(データベースを読み込んでいます ... 現在 210782 個のファイルとディレクトリがインストールされています。)
.../traceroute_1%3a2.1.0-2_amd64.deb を展開する準備をしています ...
traceroute (1:2.1.0-2) を展開しています...
traceroute (1:2.1.0-2) を設定しています ...
update-alternatives: /usr/bin/traceroute (traceroute) を提供するために自動モードで /usr/bin/traceroute.db を使います
update-alternatives: /usr/bin/traceroute6 (traceroute6) を提供するために自動モードで /usr/bin/traceroute6.db を使います
update-alternatives: /usr/bin/lft (lft) を提供するために自動モードで /usr/bin/lft.db を使います
update-alternatives: /usr/bin/traceproto (traceproto) を提供するために自動モードで /usr/bin/traceproto.db を使います
update-alternatives: /usr/sbin/tcptraceroute (tcptraceroute) を提供するために自動モードで /usr/sbin/tcptraceroute.db を使います
man-db (2.10.2-1) のトリガを処理しています ...

コマンドの使用例と解説

1.ホスト名の解決を行わずに、tracerouteを実行する。

 このコマンドは、ホスト名の解決を行わずに、IPアドレスだけを表示します。これにより、DNSの影響を排除して純粋な経路情報を確認できます。

traceroute -n google.com

2.IPv6を使用してtracerouteを実行する。

 このコマンドは、IPv6を使用して経路情報を追跡します。IPv6ネットワークでの経路確認に使用します。

traceroute -6 ipv6.google.com

まとめ

 tracerouteコマンドは、ネットワークの経路を視覚化し、問題が発生しているポイントを特定するのに非常に役立つツールです。主にネットワークのトラブルシューティングや、経路の確認が必要な場合に使用されます。オプションを使いこなすことで、ネットワーク診断をより効率的に行うことができます。