Linuxでtracerouteコマンドを使用する方法
Linuxtraceroute
コマンドを使用して、ネットワークパケットの移動の遅い区間を特定し、ネットワーク接続の遅延をトラブルシューティングできます。方法をお見せします!
tracerouteのしくみ
どのようにtraceroute
機能するかを理解すると、結果の理解がはるかに簡単になります。ネットワークパケットが宛先に到達するために必要なルートが複雑になるほど、速度低下が発生している可能性のある場所を特定するのが難しくなります。
小規模な組織のローカルエリアネットワーク(LAN)は比較的単純な場合があります。おそらく、少なくとも1台のサーバーと1台または2台のルーターがあります。異なる場所間またはインターネットを介して通信するワイドエリアネットワーク(WAN)では、複雑さが増します。次に、ネットワークパケットは、ルーターやゲートウェイなどの多くのハードウェアに遭遇します(そして転送およびルーティングされます)。
データパケットのメタデータのヘッダーは、その長さ、送信元、送信先、使用しているプロトコルなどを記述します。プロトコルの仕様はヘッダーを定義します。プロトコルを識別できる場合は、ヘッダーの各フィールドの開始と終了を判別し、メタデータを読み取ることができます。
traceroute
TCP / IPプロトコルスイートを使用し、ユーザーデータグラムプロトコルパケットを送信します。ヘッダーには、8ビット整数値を含む存続時間(TTL)フィールドが含まれています。名前が示すように、それは期間ではなくカウントを表します。
パケットは、発信元からルーターを経由して宛先に移動します。パケットがルーターに到着するたびに、TTLカウンターがデクリメントされます。TTL値が1に達すると、パケットを受信するルーターは値をデクリメントし、値がゼロになったことを認識します。その後、パケットは「タイムアウト」したため、破棄され、そのジャーニーのネクストホップに転送されません。
ルーターは、インターネットメッセージ制御プロトコル(ICMP)のTime Exceededメッセージをパケットの発信元に送り返し、パケットがタイムアウトしたことを通知します。Time Exceededメッセージには、元のヘッダーと元のパケットのデータの最初の64ビットが含まれています。これは、Request for Comments792の6ページで定義されています。
したがって、traceroute
パケットを送信した後、TTL値を1に設定した場合、パケットは破棄される前に最初のルーターまでしか到達しません。ルータからICMP時間を超えたというメッセージを受信し、ラウンドトリップにかかった時間を記録できます。
次に、TTLを2に設定して演習を繰り返しますが、2ホップ後に失敗します。traceroute
TTLを3に増やして、再試行します。このプロセスは、宛先に到達するか、最大ホップ数(デフォルトでは30)がテストされるまで繰り返されます。
一部のルーターはうまく再生されません
一部のルーターにはバグがあります。TTLがゼロのパケットを破棄して、ICMP timeexceededメッセージを発生させるのではなく転送しようとします。
Ciscoによると、一部のインターネットサービスプロバイダー(ISP)は、ルーターが中継するICMPメッセージの数をレート制限しています。
一部のデバイスは、ICMPパケットを送信しないように構成されています。これは多くの場合、スマーフ攻撃のように、デバイスが無意識のうちに分散型サービス拒否攻撃に参加するように強制されないようにするためです。
traceroute
返信のデフォルトのタイムアウトは5秒です。その5秒以内に応答がない場合、試行は中止されます。これは、非常に遅いルーターからの応答が無視されることを意味します。
tracerouteのインストール
traceroute
すでにFedora31にインストールされていますが、Manjaro18.1およびUbuntu18.04にインストールする必要があります。traceroute
Manjaroにインストールするには、次のコマンドを使用します。
sudo pacman -Sy traceroute
traceroute
Ubuntuにインストールするには、次のコマンドを使用します。
sudo apt-get install traceroute
tracerouteの使用
上で説明したように、traceroute's
目的は、コンピューターから宛先への各ホップでルーターからの応答を引き出すことです。口がきつくて何も与えないものもあれば、豆を無条件でこぼすものもあります。
例として、traceroute
有名なブラーニーストーンの本拠地であるアイルランドのブラーニー城のウェブサイトにアクセスします。伝説によると、ブラーニーストーンにキスをすると、「ギャブの贈り物」に恵まれます。途中で遭遇するルーターが適切に危険であると期待しましょう。
次のコマンドを入力します。
traceroute www.blarneycastle.ie
最初の行は、次の情報を提供します。
- 宛先とそのIPアドレス。
- ホップの数は、
traceroute
あきらめる前に試行します。 - 送信するUDPパケットのサイズ。
他のすべての行には、ホップの1つに関する情報が含まれています。ただし、詳細を掘り下げる前に、コンピューターとブラーニー城のWebサイトの間に11のホップがあることがわかります。ホップ11は、目的地に到着したことも示しています。
各ホップラインの形式は次のとおりです。
- デバイスの名前、またはデバイスがそれ自体を識別しない場合はIPアドレス。
- IPアドレス。
- 3つのテストのそれぞれで往復にかかった時間。アスタリスクがここにある場合は、そのテストに対する応答がなかったことを意味します。デバイスがまったく応答しない場合は、3つのアスタリスクが表示され、デバイス名やIPアドレスは表示されません。
以下にあるものを確認しましょう。
- ホップ1:最初の呼び出しポート(しゃれは意図されていません)は、ローカルネットワーク上のDrayTekVigorルーターです。これが、UDPパケットがローカルネットワークを離れてインターネットに到達する方法です。
- ホップ2:このデバイスは応答しませんでした。おそらく、ICMPパケットを送信しないように構成されています。または、おそらく応答しましたが、遅すぎたため、
traceroute
タイムアウトしました。 - ホップ3:デバイスが応答しましたが、名前は取得できず、IPアドレスのみが取得されました。この行にアスタリスクがあることに注意してください。これは、3つの要求すべてに対する応答が得られなかったことを意味します。これは、パケット損失を示している可能性があります。
- ホップ4および5:より多くの匿名ホップ。
- ホップ6: 3つのUDPリクエストのそれぞれを異なるリモートデバイスが処理したため、ここには多くのテキストがあります。各デバイスの(かなり長い)名前とIPアドレスが印刷されました。これは、大量のトラフィックを処理するためのハードウェアが多数ある「人口の多い」ネットワークに遭遇した場合に発生する可能性があります。このホップは、英国で最大のISPの1つです。したがって、同じリモートハードウェアが3つの接続要求を処理した場合、それは小さな奇跡です。
- ホップ7:これは、UDPパケットがISPネットワークを離れるときに作成したホップです。
- ホップ8:繰り返しますが、IPアドレスは取得しますが、デバイス名は取得しません。3つのテストすべてが正常に返されました。
- ホップ9および10:さらに2つの匿名ホップ。
- ホップ11:ブラーニー城のウェブサイトに到着しました。城はアイルランドのコークにありますが、IPアドレスの地理的位置によると、ウェブサイトはロンドンにあります。
それで、それは混合バッグでした。一部のデバイスはボールをプレーし、一部は応答したが名前を教えてくれなかった、その他は完全に匿名のままでした。
ただし、目的地には到着しました。11ホップ離れていることがわかっており、移動の往復時間は13.773ミリ秒と14.715ミリ秒でした。
デバイス名を非表示にする
これまで見てきたように、デバイス名を含めると表示が乱雑になることがあります。データを見やすくするために、-n
(マッピングなし)オプションを使用できます。
この例でこれを行うには、次のように入力します。
traceroute -n blarneycastle.ie
これにより、ボトルネックを示している可能性のあるラウンドトリップタイミングの多数を簡単に選択できます。
ホップ3は少し疑わしいように見え始めています。前回は2回しか応答しませんでしたが、今回は1回だけ応答しました。もちろん、このシナリオでは、それは私たちの制御の及ばないものです。
ただし、企業ネットワークを調査している場合は、そのノードをもう少し深く掘り下げる価値があります。
tracerouteタイムアウト値の設定
おそらく、デフォルトのタイムアウト期間(5秒)を延長すると、より多くの応答が得られます。これを行うには、-w
(待機時間)オプションを使用して7秒に変更します。(これは浮動小数点数であることに注意してください。)
次のコマンドを入力します。
traceroute -w 7.0 blarneycastle.ie
それはあまり違いがなかったので、応答はおそらくタイムアウトしています。匿名ホップが意図的に秘密にされている可能性があります。
テスト数の設定
デフォルトでは、traceroute
各ホップに3つのUDPパケットを送信します。-q
(クエリ数)オプションを使用して、これを上下に調整できます。
traceroute
テストを高速化するために、次のように入力して、送信するUDPプローブパケットの数を1つに減らします。
traceroute -q 1 blarneycastle.ie
これにより、各ホップに1つのプローブが送信されます。
初期TTL値の設定
TTLの初期値を1以外に設定し、いくつかのホップをスキップすることができます。通常、TTL値は最初のテストセットでは1に設定され、次のテストセットでは2に設定されます。5に設定すると、最初のテストではホップ5に到達し、ホップ1から4をスキップしようとします。
ブラーニー城のウェブサイトはこのコンピューターから11ホップであることがわかっているため、次のように入力してホップ11に直接移動します。
traceroute -f 11 blarneycastle.ie
これにより、宛先への接続の状態に関する優れた要約レポートが得られます。
思いやりがある
traceroute
は、ネットワークルーティングの調査、接続速度の確認、またはボトルネックの特定に最適なツールです。Windowsにもtracert
同様に機能するコマンドがあります。
ただし、UDPパケットの急流で未知のデバイスを攻撃したくない場合はtraceroute
、スクリプトや無人のジョブに含めることに注意してください。
traceroute
ネットワークにかかる可能性のある負荷は、ネットワークのパフォーマンスに悪影響を与える可能性があります。今すぐ修正するような状況でない限り、通常の営業時間外に使用することをお勧めします。