Unix: traceroute を高速に実施

こんにちは。ccieojisan です。

今回はネットワーク屋さんなら良く使う traceroute について紹介したいと思います。

皆さん、普通に traceroute <宛先> としてデフォルトで実行していませんか?もちろんデフォルトで使ってもまったく問題ありません。

私が最近経路の確認で何回も traceroute をする必要があった際に高速に traceroute を行う方法を模索したため、それを紹介したいと思います。 (traceroute結果が出るまでの待ち時間を短縮したかった)

まずは default のまま、www.yahoo.co.jp へ traceroute した結果です。実行時間を測るため、time コマンドを先頭に入れてます。 ※プロバイダから支給されたルータが traceroute(UDP) をフィルタしているみたいなので、-I オプションを付けて ICMP で実行しています。

virl@virl:~$ time sudo traceroute -I www.yahoo.co.jp
traceroute to www.yahoo.co.jp (118.151.235.191), 30 hops max, 60 byte packets
 1  XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)  0.345 ms  0.199 ms  0.186 ms
 2  XXXXXX (XXX.XXX.XXX.XXX)  6.755 ms  6.735 ms  6.841 ms
 3  XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)  15.653 ms  21.272 ms  22.135 ms
 4  blk-212-126-173.eastlink.ca (XXX.XXX.XXX.XXX)  22.438 ms  22.375 ms  22.171 ms
 5  ns-hlfx-dr001.ns.eastlink.ca (24.222.79.57)  23.001 ms  22.918 ms  22.798 ms
 6  ns-hlfx-br001.ns.eastlink.ca (24.215.101.221)  22.480 ms  14.201 ms  19.373 ms
 7  ns-hlfx-br002.ns.eastlink.ca (24.215.102.10)  18.464 ms  14.797 ms  19.513 ms
 8  core1.nyc4.he.net (198.32.118.57)  42.887 ms  26.993 ms  32.529 ms
 9  100ge11-1.core1.ash1.he.net (184.105.223.165)  44.436 ms  39.393 ms  38.835 ms
10  100ge11-1.core1.lax1.he.net (184.105.80.202)  114.742 ms  114.580 ms  106.539 ms
11  100ge11-1.core1.lax2.he.net (72.52.92.122)  106.271 ms  101.377 ms  101.188 ms
12  softbank221111203001.bbtec.net (221.111.203.1)  215.298 ms  219.079 ms  218.992 ms
13  * * *
14  61.202.251.242 (61.202.251.242)  209.243 ms  202.090 ms  202.701 ms
15  202.93.95.142 (202.93.95.142)  184.046 ms  180.288 ms  185.643 ms
16  202.93.95.198 (202.93.95.198)  187.933 ms  189.960 ms  189.728 ms
17  118.151.224.90 (118.151.224.90)  194.922 ms  189.253 ms  189.439 ms
18  f1.top.vip.bbt.yahoo.co.jp (118.151.235.191)  195.028 ms  193.694 ms  194.790 ms

real    0m7.329s
user    0m0.004s
sys     0m0.032s

特に何もオプションをしなければ、完全な traceroute の出力を得るのに 7秒 もかかってしまいます。

下記のオプションを付けることで高速に実行できます。

  • -q1 : クエリを1回のみにする(デフォルトは3回)
  • -w1 : タイムアウトを1秒にする
  • -n : 名前解決をしない
virl@virl:~$ time sudo traceroute -I -q1 -w1 -n www.yahoo.co.jp
traceroute to www.yahoo.co.jp (182.22.40.240), 30 hops max, 60 byte packets
 1  XXX.XXX.XXX.XXX  0.121 ms
 2  XXX.XXX.XXX.XXX  1.743 ms
 3  XXX.XXX.XXX.XXX  11.465 ms
 4  173.212.126.XXX  19.975 ms
 5  24.222.79.57  21.344 ms
 6  24.215.101.221  21.273 ms
 7  24.215.102.10  22.192 ms
 8  198.32.118.57  40.659 ms
 9  184.105.223.165  42.160 ms
10  184.105.80.202  108.039 ms
11  72.52.92.122  118.242 ms
12  221.111.203.1  222.179 ms
13  *
14  61.202.251.242  223.295 ms
15  202.93.95.142  203.048 ms
16  118.151.224.250  205.376 ms
17  182.22.34.94  224.557 ms
18  182.22.40.240  213.383 ms

real    0m1.243s
user    0m0.008s
sys     0m0.008s

おっと、約1秒弱とかなり高速になり、およそ6倍に高速化されました。※宛先や区間によって差異は当然異なります。

経路確認だと、名前解決は欲しいなという場合は -n を外してこんな感じの結果。

virl@virl:~$ time sudo traceroute -I -q1 -w1 www.yahoo.co.jp
traceroute to www.yahoo.co.jp (118.151.231.231), 30 hops max, 60 byte packets
 1  192.168.163.2 (192.168.163.2)  0.252 ms
 2  MG6002 (192.168.1.1)  4.245 ms
 3  10.86.0.1 (10.86.0.1)  14.666 ms
 4  blk-212-126-173.eastlink.ca (173.212.126.173)  15.704 ms
 5  ns-hlfx-dr001.ns.eastlink.ca (24.222.79.57)  15.267 ms
 6  ns-hlfx-br001.ns.eastlink.ca (24.215.101.221)  22.687 ms
 7  ns-hlfx-br002.ns.eastlink.ca (24.215.102.10)  21.286 ms
 8  core1.nyc4.he.net (198.32.118.57)  35.765 ms
 9  100ge11-1.core1.ash1.he.net (184.105.223.165)  39.856 ms
10  100ge11-1.core1.lax1.he.net (184.105.80.202)  105.130 ms
11  100ge11-1.core1.lax2.he.net (72.52.92.122)  105.829 ms
12  softbank221111203001.bbtec.net (221.111.203.1)  219.180 ms
13  *
14  61.202.251.242 (61.202.251.242)  212.950 ms
15  202.93.95.142 (202.93.95.142)  194.904 ms
16  202.93.95.198 (202.93.95.198)  197.377 ms
17  118.151.224.90 (118.151.224.90)  196.820 ms
18  f2.top.vip.bbt.yahoo.co.jp (118.151.231.231)  202.357 ms

real    0m2.318s
user    0m0.003s
sys     0m0.025s

名前解決ありだと、ちょっとタルくなり2秒くらい。まぁ7秒よりは大分マシですね。

他のオプションなども man traceroute で調べてみてくださいね。

スポンサーリンク