Traceroute Linux Featured

Tracerouteは、インターネット・パケットが送信元から宛先ホストまでの経路をトレースできるシンプルなネットワーク・ユーティリティだ。この記事では、Tracerouteを使ってLinuxのネットワークの健全性をチェックし、新たな問題を診断する方法を紹介する。

注:この記事ではLinuxでのtracerouteに焦点を当てていますが、macOSやWindowsでもこのユーティリティを使うことができます。

Tracerouteの仕組み

Tracerouteは、短いTTL長を持つUDPパケットをリモートホストへのパスに沿ってすべてのインターネットゲートウェイに送信することによって動作します。これらの短いTTL長は、これらのゲートウェイにICMP "TIME_EXCEEDED "応答をそのインターフェースのIPアドレスとともに報告させる。

これら2つの要素が組み合わさることで、tracerouteは、パケットが外部サーバーに接続する際に通過するマシンの詳細なリストを作成することができます。例えば、私のネットワークで "google.com "にtracerouteを実行すると、Googleのサーバーに到達するまでに9~10のゲートウェイがリストアップされます。

A terminal showing a basic traceroute for google.com.

Tracerouteで解決できるネットワークの問題とは?

Tracerouteは単なるネットワーク・プロービング・ツールであり、ネットワークの未解決の問題を最適化したり修正したりするものではありません。Tracerouteは、ネットワークとその上を移動するパケットがどのように振る舞うかを記述することしかできません。

にもかかわらず、潜在的なネットワーク問題を診断するための重要なツールであることに変わりはありません。良い例として、ローカルゲートウェイがパケットをネクストホップに転送できない場合があります。Tracerouteは、"TIME_EXCEEDED "レスポンスを送信しないコアネットワーク内のルーターをハイライトすることで、これに対処することができる。

A terminal showing a basic traceroute where gateways constantly fail to respond to the program.

それとは別に、tracerouteを使ってホスト間のレイテンシーの問題をチェックすることもできる。これは、リモート・マシンに接続する際に一貫した低遅延を確保するために、ローカル・ネットワークにVPNが必要かどうかを確認したい場合に役立つ。

知っておいて損はない:Linuxで sudo なしで nmap を使って、ネットワーク・プロービングの詳細を学ぶ。

LinuxでTracerouteを使う

新しいターミナルを開き、tracerouteと入力し、その後に自分のマシンが接続したいマシン・アドレスを入力する。これはドメイン名でもIPアドレスでも構わない。例えば

traceroute ubuntu.myvpsserver.top

Enterキーを押して、リモートホストへのパスのマッピングを開始します。

A terminal showing a basic traceroute to a small VPS.

ヒント ルーターのIPアドレスを見つけることによって、ローカルインターネットゲートウェイをチェックする方法を学びます。

トレースルートでカスタムTTLでパケットを送信する

基本的な使い方はtracerouteを使うだけで十分ですが、フラグを使ってプログラムの動作を微調整することもできます。これは特にネットワークのトリアージを行う場合に役立つ。

tracerouteの最も一般的な調整は、ゲートウェイに送信するパケット量を変更することである。これを行うには、-qフラグの後にリクエストごとに送信するパケット量を指定する:

traceroute-q 1ubuntu.myvpsserver.top

traceroute -q 1 ubuntu.myvpsserver.top-Nフラグの後に "1 "を付けると、同時パケット要求を明示的に無効にすることもできる。これは、TTLの短いUDPパケットをレート制限するゲートウェイがある場合に役立つ。

A terminal showing a traceroute with simultaneous packets disabled.

最後に、tracerouteのデフォルトのTTL値を変更することもできる。これを行うには、-fフラグの後に、最初のプローブパケットに必要なTTLを追加する。

A terminal showing a traceroute where the program skips the first two gateways.

Linuxのトレースルートプロトコルの変更

デフォルトでは、Linuxのtracerouteは、ネットワーク・ゲートウェイへのプローブ・パケットの送信にUDPを使う。これは、積極的にtracerouteパケットをブロックしているゲートウェイをプローブしている場合に問題になることがある。

これを解決するには、-Tフラグを使って、単純なTCP SYNパケットを使ってtracerouteを実行することができる。

A terminal showing a traceroute where the program uses the TCP SYN packet instead of UDP.

一方、宛先ゲートウェイがUDPのみを制限している場合、tracerouteにICMP ECHOパケットを使わせることもできる:

sudotraceroute-Imyvpsserver.top

Tracerouteでインターフェースとポートを変更する

Tracerouteはカスタムネットワークインターフェースもサポートしている。これは、tracerouteがパケットの経路を調べるために、あなたのマシンの別のネットワークカードを使うというものだ。

これを行うには、インターフェイスのデバイス名に続けて-iフラグを付けてプログラムを実行する。

traceroute-ienp1s0 myvpsserver.top

メモ: ifconfig -s | awk '{print $1}' を実行することで、あなたのマシンで利用可能なネットワークインターフェイスを見つけることができる。

それはさておき、-pフラグを使って、tracerouteがUDPプロービングに使う開始ポート番号を指定することができる:

traceroute-p 34543myvpsserver.top

traceroute -p 34543 myvpsserver.top 最後に、-pフラグも使用しているプロトコルによって動作が変わります。Iと組み合わせると、-pの値が宛先ポートではなく、最初のICMPシーケンス番号に設定される。

A terminal showing a traceroute using ICMP ECHO with a custom ICMP sequence number.

tracerouteの使い方を学ぶことは、コンピューターがネットワーク上でどのように通信し合っているかを理解するための第一歩に過ぎません。tcpdumpを使ってTCPパケットの中身を解析することで、コンピューター・ネットワークについてさらに詳しく学ぶことができる。

一方、Linuxのdigツールを使うことで、DNSのような上位のOSI層についても学ぶことができる。

すべての改変とスクリーンショットはRamces Redによる。

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。