「特定のサーバーやWebサイトになかなか繋がらない」「通信が遅い原因がどこにあるのか知りたい」といったネットワークのトラブルシューティングに直面して困ったことはありませんか?
ネットワークの障害や遅延が発生しているとき、自分のパソコンから宛先のサーバーまでに「どのルーターを経由してパケットが届いているのか」を把握することは非常に重要です。
この記事では、LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネル環境でネットワーク経路を調査するための定番ツールである traceroute コマンドの使い方と実行結果の見方を初心者向けに分かりやすく解説します。この記事を読むことで、パケットのルーティングを可視化し、通信経路上のどこで問題が起きているのかを自力で切り分けられるようになります。
確認した環境
本記事の検証およびコマンド実行例は、以下の環境をベースにしています。
- OSOS [オーエス]Operating System。基本ソフトウェア: UbuntuUbuntu [ウブントゥ]人気のLinuxディストリビューション 22.04 LTS
- ツール: traceroute(traceroute パッケージ または inetutils-traceroute)
tracerouteコマンドとは?
traceroute は、自分のコンピュータから目的地のホスト(IPIP [アイピー]Internet Protocol。インターネット通信の基本プロトコルアドレスまたはドメイン名)に至るまで、パケットが通過するネットワーク経路(ルーターやゲートウェイ)を特定するためのコマンドです。
ネットワークエンジニアやシステム管理者にとって、通信トラブルの原因究明(どこでパケットが止まっているか、どこで遅延が発生しているか)を行うための必須ツールとなっています。
tracerouteの基本的な仕組み
traceroute は、IPパケットのヘッダーに含まれる TTL(Time to Live:生存時間) というフィールドの仕組みを巧みに利用して経路を特定します。
- 最初、
tracerouteは TTL を1に設定したパケットを送信します。 - 最初のルーター(デフォルトゲートウェイ)がパケットを受信し、転送しようとする際に TTL が
1減算され0になるため、そのルーターはパケットを破棄し、送信元(自分のPC)に対して「TTLが超過しました(Time Exceeded)」というエラーメッセージ(ICMPICMP [アイシーエムピー]Internet Control Message Protocol。IP通信のエラー報告や制御メッセージを転送するプロトコルパケット)を送り返します。これで1つ目のルーターのIPアドレスがわかります。 - 次に TTL を
2に増やして同じ宛先にパケットを送ります。これにより2つ目のルーターのIPアドレスが判明します。 - この処理を宛先に到達するまで(あるいは最大ホップ数に達するまで)TTLを1ずつ増やしながら繰り返すことで、すべての経由ルーターを特定します。
なお、Linux の traceroute はデフォルトで UDPパケット(宛先ポート33434番〜)を送信します。宛先に到達した際は、宛先ホストが「ICMP Port Unreachable(ポート到達不能)」メッセージを返すことで、経路の終点であることを認識します。一方、Windowsの tracert コマンドはデフォルトでICMP Echo Requestを使う点が異なります。
pingとの違い
ネットワークの疎通確認といえば ping コマンドが有名ですが、両者には明確な役割の違いがあります。
- pingコマンド: 宛先のサーバーと通信ができるか(生きているか)、往復の遅延(応答時間)がどれくらいかを測定するために使います。「点」の確認です。
- tracerouteコマンド: 宛先までに「どのようなルート(経路)」を通っているのか、どの経由地で遅延やパケットロスが発生しているのかを調査するために使います。「線(経路)」の確認です。
tracerouteの基本の使い方と実行例
それでは、実際に traceroute コマンドをLinux環境で使ってみましょう。多くのLinuxディストリビューションでは標準でインストールされていますが、もし見つからない場合は sudo apt install traceroute(Ubuntu/DebianDebian [デビアン]コミュニティ主導で開発される安定性の高いLinuxディストリビューション系)や sudo dnf install traceroute(RHEL/CentOSCentOS [セントオーエス]Red Hat Enterprise Linux互換の安定したLinuxディストリビューション系、旧バージョンでは yum)などでインストールしてください。
コマンドの基本構文
traceroute の基本的な構文は非常にシンプルです。
traceroute <宛先ホスト名またはIPアドレス>例えば、GoogleのパブリックDNSDNS [ディーエヌエス]Domain Name System。インターネット上のドメイン名とIPアドレスを紐付けて管理・変換するシステム(8.8.8.8)へtracerouteを実行する場合は、以下のように入力します。
traceroute 8.8.8.8実行結果の読み方・見方
実際に traceroute 8.8.8.8 を実行したときの出力例を元に、見方を解説します。
$ traceroute 8.8.8.8traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 _gateway (192.168.1.1) 1.234 ms 1.102 ms 0.985 ms 2 10.0.0.1 (10.0.0.1) 5.432 ms 5.120 ms 5.011 ms 3 172.16.10.5 (172.16.10.5) 12.345 ms 11.980 ms 12.110 ms 4 * * * 5 dns.google (8.8.8.8) 15.234 ms 14.987 ms 15.102 ms出力結果の各項目の意味は以下の通りです。
- 1行目(ヘッダー情報): 宛先のIPアドレス、最大ホップ数(デフォルトは30)、送信するパケットのサイズが表示されます。
- ホップ番号(左端の数字:
1,2,3…): パケットが経由したルーターの順番(ホップ数)です。数字が大きいほど宛先に近づいています。 - ルーター情報(ホスト名とIPアドレス): そのホップにあるルーターのホスト名とIPアドレスが表示されます。名前解決ができない場合はIPアドレスのみが表示されます。
- 往復時間(3つの数値
ms): 各ホップに対して通常3回パケットを送信するため、それぞれの応答時間(ミリ秒)が3つ表示されます。ここを見ることで、どの区間で遅延(ネットワークの遅さ)が発生しているかを特定できます。 - アスタリスク(
*): タイムアウト(一定時間内に応答が返ってこなかった)を示します。ルーターのセキュリティ設定(ファイアウォール)でtracerouteのパケット(UDPやICMP)を意図的にブロックしている場合によく見られます。
よく使う便利なオプション
traceroute には、調査をスムーズにするための便利なオプションが多数用意されています。実務でよく使われる代表的なオプションを紹介します。
DNS逆引きを省略してIPアドレスのみで表示する(-n)
デフォルトでは、経由するルーターのIPアドレスから逆引きDNS解決を行い、可能な限りホスト名を表示しようとします。この名前解決に時間がかかり、コマンドの実行が遅くなることがあります。
-n オプションを指定すると、DNSの逆引きを行わずにIPアドレスのみで高速に表示させることができます。
traceroute -n 8.8.8.8応答がない場合のタイムアウト時間を変更する(-w)
ネットワークが混雑している環境などでは、ルーターからの応答が遅く、デフォルトのタイムアウト時間(通常5秒、環境や実装により3〜5秒程度)では測定に時間がかかることがあります。
-w オプションを使用すると、応答を待つ最大秒数(秒単位)を指定できます。以下の例では、タイムアウトを1秒に設定しています。
traceroute -w 1 8.8.8.8最大ホップ数を制限する(-m)
デフォルトでは最大30ホップまでパケットを追跡しますが、宛先が近距離であることが分かっている場合や、無駄な探索を減らしたい場合は、-m オプションで最大ホップ数を制限できます。
以下の例では、最大ホップ数を10に制限しています。
traceroute -m 10 8.8.8.8ファイアウォール環境でプロトコルを変更する(-I, -T)
クラウド環境(AWSAWS [エーダブリュエス]Amazon Web Services。Amazonのクラウドサービス、GCP、Azureなど)や企業ネットワークでは、デフォルトのUDP高位ポートがファイアウォールで遮断され、宛先までずっと * * * になってしまうことがあります。
そのような場合は、-I オプションでICMP Echo Requestを使用するか、-T オプションでTCPTCP [ティーシーピー]Transmission Control Protocol。信頼性の高い通信プロトコル SYNパケットを使用すると通信できることがあります。
# ICMPモード(pingと同じプロトコルを使用)sudo traceroute -I 8.8.8.8
# TCPモード(Webポート80番を使用)sudo traceroute -T -p 80 8.8.8.8-I や -T オプションはraw socketを使用するため、通常 sudo(root権限)が必要です。
ネットワークトラブルシューティングでの活用法
traceroute を実際のトラブルシューティングにどのように活かすかのポイントを解説します。
途中でパケットがロスしている場合の確認
特定のWebサイトに繋がらない際、tracerouteを実行した結果、途中のホップからすべて * * * になり、それ以降宛先に到達しない場合があります。
5 192.168.100.10 (192.168.100.10) 14.234 ms 14.112 ms 14.055 ms 6 * * * 7 * * * 8 * * *このような状態が見られた場合、以下の可能性が考えられます。
- 経由するルーターやプロバイダーの障害: 途中のネットワーク機器に何らかのトラブルが発生しており、パケットが転送されていません。
- ファイアウォールによるブロック: 経由するルーターのセキュリティポリシーによって、tracerouteで使われるパケット(UDPやICMP)が意図的に破棄されているケースです(この場合でも、パケット自体は宛先へ通過していることがよくあります)。
トラブルシューティングのコツ:
途中から * が続く場合でも、最後のほうのホップや宛先自体から正常に応答が返ってくるのであれば、単に途中のルーターがtracerouteのパケットを無視しているだけなので問題ありません。しかし、**「あるホップを境に、それ以降のすべてのパケットが完全に届かなくなる」**場合は、そのホップ地点のネットワーク機器や回線に障害が発生していると強く疑うことができます。
また、特定のホップだけ異常に往復時間(ms)が跳ね上がっている場合でも、その後のホップで正常な値に戻っているなら、ルーターのICMP応答の処理優先度が低いだけの可能性が高く、必ずしも問題ではありません。あるホップ以降、すべてのホップで遅延が持続的に増加している場合は、その区間で輻輳(混雑)が発生していると判断できます。
なお、tracerouteが表示する往復時間(RTT)は「行きのパケット」と「戻りのICMP応答」の合計です。インターネットでは行きと帰りで異なるルートを通る(非対称ルーティング)ことが珍しくないため、表示されている遅延には戻り経路の影響も含まれている点に留意してください。
まとめ
今回は、Linuxの traceroute コマンドの基本的な仕組み、使い方、そして実行結果の見方について解説しました。
記事のポイントを以下にまとめます。
tracerouteは、宛先サーバーまでにパケットが通過するネットワーク経路(ルーター)を特定するコマンドである。- TTL(Time to Live)の仕組みを利用して、経由するルーターを1つずつあぶり出す。
pingが「点(疎通・遅延)」の確認であるのに対し、tracerouteは「線(経路)」の確認を行う。- 実行結果の往復時間(ms)を確認することで、どこで遅延が発生しているかを特定できる。
-nオプションを使うことで、名前解決を省略して高速にIPアドレスを表示させることができる。- 途中にある
* * *はタイムアウトを示すが、ファイアウォールによるブロックの場合もあるため、前後の状況と合わせて判断することが重要である。
ネットワークの不具合や遅延に直面した際は、ぜひ traceroute を活用して原因箇所の切り分けを行ってみてください。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。