![Traceroute Linux Featured](https://jp.gamepuro.comhttps://imggamepuro.vercel.app/assets/uploads/2023/11/traceroute-linux-featured.jpg)
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.](https://jp.gamepuro.comhttps://imggamepuro.vercel.app/assets/uploads/2023/11/use-traceroute-diagnose-issues-linux-01-google-sample-traceroute.jpg)
Tracerouteで解決できるネットワークの問題とは?
Tracerouteは単なるネットワーク・プロービング・ツールであり、ネットワークの未解決の問題を最適化したり修正したりするものではありません。Tracerouteは、ネットワークとその上を移動するパケットがどのように振る舞うかを記述することしかできません。
にもかかわらず、潜在的なネットワーク問題を診断するための重要なツールであることに変わりはありません。良い例として、ローカルゲートウェイがパケットをネクストホップに転送できない場合があります。Tracerouteは、"TIME_EXCEEDED "レスポンスを送信しないコアネットワーク内のルーターをハイライトすることで、これに対処することができる。![A terminal showing a basic traceroute where gateways constantly fail to respond to the program.](https://jp.gamepuro.comhttps://imggamepuro.vercel.app/assets/uploads/2023/11/use-traceroute-diagnose-issues-linux-02-gateway-timing-out-sample.png)
それとは別に、tracerouteを使ってホスト間のレイテンシーの問題をチェックすることもできる。これは、リモート・マシンに接続する際に一貫した低遅延を確保するために、ローカル・ネットワークにVPNが必要かどうかを確認したい場合に役立つ。
知っておいて損はない:Linuxで sudo なしで nmap を使って、ネットワーク・プロービングの詳細を学ぶ。
LinuxでTracerouteを使う
新しいターミナルを開き、tracerouteと
入力し、その後に自分のマシンが接続したいマシン・アドレスを入力する。これはドメイン名でもIPアドレスでも構わない。例えば
traceroute ubuntu.myvpsserver.top
Enterキーを押して、リモートホストへのパスのマッピングを開始します。
![A terminal showing a basic traceroute to a small VPS.](https://jp.gamepuro.comhttps://imggamepuro.vercel.app/assets/uploads/2023/11/use-traceroute-diagnose-issues-linux-03-sample-ubuntu-traceroute-server.jpg)
ヒント ルーターの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.](https://jp.gamepuro.comhttps://imggamepuro.vercel.app/assets/uploads/2023/11/use-traceroute-diagnose-issues-linux-04-non-simultaneous-probe-sample.jpg)
最後に、tracerouteのデフォルトのTTL値を変更することもできる。これを行うには、-f
フラグの後に、最初のプローブパケットに必要なTTLを追加する。
![A terminal showing a traceroute where the program skips the first two gateways.](https://jp.gamepuro.comhttps://imggamepuro.vercel.app/assets/uploads/2023/11/use-traceroute-diagnose-issues-linux-05-skip-gateways-ttl.jpg)
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.](https://jp.gamepuro.comhttps://imggamepuro.vercel.app/assets/uploads/2023/11/use-traceroute-diagnose-issues-linux-06-tcp-syn-packet-sample.png)
一方、宛先ゲートウェイが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.](https://jp.gamepuro.comhttps://imggamepuro.vercel.app/assets/uploads/2023/11/use-traceroute-diagnose-issues-linux-07-custom-icmp-seq-number-sample.png)
tracerouteの使い方を学ぶことは、コンピューターがネットワーク上でどのように通信し合っているかを理解するための第一歩に過ぎません。tcpdumpを使ってTCPパケットの中身を解析することで、コンピューター・ネットワークについてさらに詳しく学ぶことができる。
一方、Linuxのdigツールを使うことで、DNSのような上位のOSI層についても学ぶことができる。
すべての改変とスクリーンショットはRamces Redによる。