このエントリーをはてなブックマークに追加

tracerouteは、ICMPプロトコルまたはUDPプロトコルを使用して目的のホストまでの経路上のルータをトレースします。なお、Windowsの場合は類似のコマンドでtracertというのがあります。WindowsのtracertはICMPプロトコルを使用しますが、LinuxはUDPを使用しするなど、OSによってプロトコルに違いがある場合があります。そのため、WindowsとLinuxでは結果が異なったりします。

また、後述するように最近のLinuxに添付されているtracerouteはオプションによってICMPやTCPを切り替える機能も持っていますので知っておくと幸せになれることがあるかもしれません。

以下の記事はCentOS 6.4で確認してあります。

インストール

CentOS 6のminimal構成ではtracerouteはデフォルトでインストールされませんので、インストールが必要です。

$ sudo yum install traceroute
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.riken.jp
 * rpmforge: mirror.hmc.edu
 * updates: centos.ustc.edu.cn
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package traceroute.x86_64 3:2.0.14-2.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================
 Package             Arch            Version                   Repository     Size
===================================================================================
Installing:
 traceroute          x86_64          3:2.0.14-2.el6            base           51 k

Transaction Summary
===================================================================================
Install       1 Package(s)

Total download size: 51 k
Installed size: 80 k
Is this ok [y/N]: y
Downloading Packages:
traceroute-2.0.14-2.el6.x86_64.rpm                          |  51 kB     00:03
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : 3:traceroute-2.0.14-2.el6.x86_64                                1/1
  Verifying  : 3:traceroute-2.0.14-2.el6.x86_64                                1/1

Installed:
  traceroute.x86_64 3:2.0.14-2.el6

Complete!

使い方

基本的な使い方ですが、tracerouteの実行に必須のオプションはターゲットとなるホストまたはIPアドレスです。

# traceroute google.co.jp
traceroute to google.co.jp (xxx.xxx.xxx.xxx), 30 hops max, 60 byte packets
 1  192.168.245.2 (192.168.245.2)  0.397 ms  0.416 ms  0.266 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 (省略)
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

Linux版のtracerouteに何もオプション与えなければ、アスタリスク(*)が表示されて経路情報が表示されません。ちなみにwindowsから実行するとこんな感じになります。

C:\>tracert google.co.jp
google.co.jp [xxx.xxx.xxx.xxx] へのルートをトレースしています
経由するホップ数は最大 30 です:

  1     1 ms     1 ms     2 ms  xxx.xxx.xxx.xxx(途中のルートは伏せています。)
  2    11 ms    15 ms    11 ms  xxx.xxx.xxx.xxx
  3    12 ms    10 ms    11 ms  xxx.xxx.xxx.xxx
  4    13 ms    11 ms    11 ms  xxx.xxx.xxx.xxx
  5    12 ms    11 ms    12 ms  xxx.xxx.xxx.xxx
  6    13 ms    10 ms    11 ms  xxx.xxx.xxx.xxx
  7    12 ms    14 ms    16 ms  xxx.xxx.xxx.xxx
  8    11 ms    10 ms    11 ms  xxx.xxx.xxx.xxx
  9    12 ms    11 ms    11 ms  xxx.xxx.xxx.xxx
 10    12 ms    10 ms    12 ms  xxx.xxx.xxx.xxx
 11    12 ms    11 ms    11 ms  xxx.xxx.xxx.xxx

トレースを完了しました。

Linuxで有効な経路情報を取得するためには、Windowsと同じくICMPパケットでtracerouteをする必要があります。ICMPパケットでtracerouteを行うためには、-Iオプションをつけます。-Iオプションを利用するにはroot権限が必要です。こうすることでWindows版と同様に下のような経路情報を取得することが出来ます。(途中のルートは伏せています。)

# traceroute google.co.jp -I
traceroute to google.co.jp (xxx.xxx.xxx.xxx), 30 hops max, 60 byte packets
 1  xxx.xxx.xxx.xxx(途中のルートは伏せています。) 0.216 ms  0.155 ms  0.132 ms
 2  xxx.xxx.xxx.xxx 3.272 ms  3.191 ms  3.240 ms
 3  xxx.xxx.xxx.xxx 14.516 ms  14.432 ms  14.013 ms
 4  xxx.xxx.xxx.xxx 12.921 ms  12.485 ms  11.850 ms
 5  xxx.xxx.xxx.xxx 11.321 ms  10.989 ms
 6  xxx.xxx.xxx.xxx 16.748 ms  13.777 ms  13.589 ms
 7  xxx.xxx.xxx.xxx 11.122 ms  14.226 ms  14.062 ms
 8  xxx.xxx.xxx.xxx 16.380 ms  15.119 ms  14.931 ms
 9  xxx.xxx.xxx.xxx 49.735 ms  12.487 ms  12.325 ms
10  xxx.xxx.xxx.xxx 12.181 ms  14.035 ms  13.597 ms
11  xxx.xxx.xxx.xxx 13.171 ms  12.655 ms  12.479 ms
12  xxx.xxx.xxx.xxx 12.114 ms  13.051 ms  12.678 ms

代表的なオプションを以下に掲載します。この辺はディストリごとに異なっていることが多いので、man tracerouteで確認してください。 CentOSでは-Iや-Tオプションがありますが、ディストリビューションによってはないと思います。

オプション 概要
-I UDPパケットではなく、ICMP Echo Requestを用いる(root権限が必要)
-T UDPパケットではなく、TCP SYN Packetを用いる(root権限が必要)
-p 使用するUDPパケットのポート番号を指定する(DPパケットを使用する場合のみ)
-i 指定されたインターフェイス(ネットワークカード名)を用いて実行する。
-s 指定されたIPアドレスから実行する(Source Addressを指定する)
-f fで指定されたTTLからチェックする。つまりTTLの開始値を指定する。10と指定した場合は10ホップ以上離れたルータから表示しはじめます。
-m mで指定されたTTLまでしかチェックしない。つまりTTLの最大値を指定する。20と指定した場合は20ホップ離れたルータまで表示します。デフォルトは30です。
-q 1つのゲートウェイに対する試行回数を指定する。デフォルトは3です。
-t パケットのTOS(Type Of Service:サービスタイプ)を指定された値に設定する
-w タイムアウト時間を秒で指定する。デフォルトは5秒です。

tracerouteはホップ数が多いと結構時間がかかるので計測時間節約の場合には、TTL(ホップ数)の開始値(-fオプション)、TTLの最大値(-mオプション)、試行回数(-qオプション)、タイムアウト(-wオプション)を指定することで短縮することができる。

# traceroute -I -f 3 google.co.jp
traceroute to google.co.jp (xxx.xxx.xxx.xxx), 30 hops max, 60 byte packets
 3  xxx.xxx.xxx.xxx(途中のルートは伏せています。) 14.516 ms  14.432 ms  14.013 ms
 4  xxx.xxx.xxx.xxx 12.921 ms  12.485 ms  11.850 ms
 5  xxx.xxx.xxx.xxx 11.321 ms  10.989 ms
 6  xxx.xxx.xxx.xxx 16.748 ms  13.777 ms  13.589 ms
 7  xxx.xxx.xxx.xxx 11.122 ms  14.226 ms  14.062 ms
 8  xxx.xxx.xxx.xxx 16.380 ms  15.119 ms  14.931 ms
 9  xxx.xxx.xxx.xxx 49.735 ms  12.487 ms  12.325 ms
10  xxx.xxx.xxx.xxx 12.181 ms  14.035 ms  13.597 ms
11  xxx.xxx.xxx.xxx 13.171 ms  12.655 ms  12.479 ms
12  xxx.xxx.xxx.xxx 12.114 ms  13.051 ms  12.678 ms

# traceroute -I -m 10 google.co.jp
traceroute to google.co.jp (xxx.xxx.xxx.xxx), 10 hops max, 60 byte packets
 1  xxx.xxx.xxx.xxx(途中のルートは伏せています。) 0.216 ms  0.155 ms  0.132 ms
 2  xxx.xxx.xxx.xxx 3.272 ms  3.191 ms  3.240 ms
 3  xxx.xxx.xxx.xxx 14.516 ms  14.432 ms  14.013 ms
 4  xxx.xxx.xxx.xxx 12.921 ms  12.485 ms  11.850 ms
 5  xxx.xxx.xxx.xxx 11.321 ms  10.989 ms
 6  xxx.xxx.xxx.xxx 16.748 ms  13.777 ms  13.589 ms
 7  xxx.xxx.xxx.xxx 11.122 ms  14.226 ms  14.062 ms
 8  xxx.xxx.xxx.xxx 16.380 ms  15.119 ms  14.931 ms
 9  xxx.xxx.xxx.xxx 49.735 ms  12.487 ms  12.325 ms
10  xxx.xxx.xxx.xxx 12.181 ms  14.035 ms  13.597 ms

他にも、環境によっては複数NICがあることがあると思いますので、-iや-sオプションでNICやIPアドレスを指定することもできますので、環境によっては試してみてください。




記事一覧へ