シナプス技術者ブログ

シナプスの技術者公式ブログ。インターネットで、鹿児島の毎日を笑顔にします。

traceroute コマンドの興味深いオプション

技術部ネットワーク課の二之宮です。

はじめに

なにげなく traceroute コマンドの man を見ていたら、大変、興味深いオプションが沢山ありましたので、試してみました。

環境

項目 内容
ディストリビューション CentOS 7.9.2009
linux カーネル 3.10.0-1160.11.1.el7.x86_64
traceroute 2.0.22

traceroute コマンドとは

送信したパケットが、宛先のホストに到達するまでに経由した経路を表示するコマンド。

いつもの使い方

いつもは、-n オプションや -A オプションを使用するくらいです。

オプション無し

$ traceroute google.com
traceroute to google.com (142.250.207.110), 30 hops max, 60 byte packets
 1  l3-1-01.kgo.synapse.ne.jp (202.208.174.253)  0.896 ms  0.977 ms  1.097 ms
 2  bb02-te5-15.kgo.synapse.ne.jp (202.208.178.169)  6.883 ms bb01-te5-15.kgo.synapse.ne.jp (202.208.178.161)  0.380 ms  0.358 ms
 3  bb15-po51.kgo.synapse.ne.jp (202.208.178.194)  0.185 ms  0.348 ms bb15-po52.kgo.synapse.ne.jp (202.208.178.198)  0.323 ms
 4  103.246.232.95 (103.246.232.95)  11.002 ms  10.981 ms  11.835 ms
 5  108.170.243.33 (108.170.243.33)  12.072 ms  10.998 ms 108.170.243.65 (108.170.243.65)  12.076 ms
 6  142.251.70.23 (142.251.70.23)  12.034 ms 142.251.69.231 (142.251.69.231)  10.101 ms  11.054 ms
 7  kix06s11-in-f14.1e100.net (142.250.207.110)  10.999 ms  11.990 ms  11.968 ms
$

-n

ホスト名を表示しない。

$ traceroute -n google.com
traceroute to google.com (142.250.207.110), 30 hops max, 60 byte packets
 1  202.208.174.253  1.128 ms  1.151 ms  1.261 ms
 2  202.208.178.161  0.162 ms  0.317 ms 202.208.178.169  0.145 ms
 3  202.208.178.198  1.264 ms  1.245 ms  1.219 ms
 4  103.246.232.95  10.918 ms  10.917 ms  11.855 ms
 5  108.170.243.33  11.917 ms  11.895 ms 108.170.243.65  12.085 ms
 6  142.251.69.231  10.188 ms 142.251.70.23  11.109 ms 142.251.69.231  10.225 ms
 7  142.250.207.110  10.963 ms  11.969 ms  11.935 ms
$

2列目に表示されていたホスト名が表示されなくなりました。

-A

AS番号を表示する。

$ traceroute -A -n google.com
traceroute to google.com (142.250.207.110), 30 hops max, 60 byte packets
 1  202.208.174.253 [AS7511]  1.402 ms  1.427 ms  1.459 ms
 2  202.208.178.169 [AS7511]  29.981 ms  29.959 ms 202.208.178.161 [AS7511]  0.164 ms
 3  202.208.178.198 [AS7511]  0.177 ms 202.208.178.194 [AS7511]  0.346 ms  0.316 ms
 4  103.246.232.95 [*]  11.000 ms  10.978 ms  10.990 ms
 5  108.170.243.33 [AS15169]  12.127 ms  12.252 ms  11.039 ms
 6  142.251.70.23 [AS15169]  12.114 ms  11.110 ms 142.251.69.231 [AS15169]  10.157 ms
 7  142.250.207.110 [AS15169]  12.063 ms  10.985 ms  11.972 ms
$

IPアドレスの右の [] に AS番号が表示されるようになりました。

興味深いオプションの数々

-f [最初の ttl]

開始する ttl を指定する。

5 から開始する場合。

$ traceroute -f 5 -n google.com
traceroute to google.com (142.250.207.110), 30 hops max, 60 byte packets
 5  108.170.243.65  11.145 ms 108.170.243.33  11.254 ms 108.170.243.65  12.036 ms
 6  142.251.70.23  11.062 ms 142.251.69.231  10.125 ms 142.251.70.23  12.051 ms
 7  142.250.207.110  10.996 ms  12.001 ms  11.999 ms
$

-I

経路の調査に ICMP ECHO を使用する。
※権限不足のエラーになるため、root で実行しています。

# traceroute -I -n google.com
traceroute to google.com (142.250.207.110), 30 hops max, 60 byte packets
 1  202.208.174.253  0.776 ms  0.920 ms  1.032 ms
 2  202.208.178.169  0.185 ms  0.198 ms  0.319 ms
 3  202.208.178.198  1.109 ms  1.113 ms  1.109 ms
 4  103.246.232.95  10.996 ms  11.008 ms  11.047 ms
 5  108.170.243.33  11.353 ms  11.355 ms  11.352 ms
 6  142.251.69.231  10.121 ms  10.092 ms  10.106 ms
 7  142.250.207.110  10.976 ms  10.993 ms  10.978 ms
#

-m [最大 ttl]

調査する最大ホップ数を指定する。

10 に指定した場合。

$ traceroute -m 10 -n yahoo.co.jp
traceroute to yahoo.co.jp (182.22.28.252), 10 hops max, 60 byte packets
 1  202.208.174.253  1.229 ms  1.332 ms  1.435 ms
 2  202.208.178.169  45.290 ms  45.263 ms  45.239 ms
 3  202.208.178.206  0.319 ms 202.208.178.202  0.300 ms 202.208.178.206  0.249 ms
 4  210.171.224.162  19.617 ms  19.595 ms  19.141 ms
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
$

デフォルトでは 30ホップまで調査しますが、10ホップで終わっています。

-q [パケット数]

各ホップに送信するパケット数を指定する。

$ traceroute -q 1 -n google.com
traceroute to google.com (142.250.207.110), 30 hops max, 60 byte packets
 1  202.208.174.253  0.794 ms
 2  202.208.178.169  0.157 ms
 3  202.208.178.198  0.170 ms
 4  103.246.232.95  12.814 ms
 5  108.170.243.33  12.258 ms
 6  142.251.69.231  10.145 ms
 7  142.250.207.110  11.008 ms
$

デフォルトでは、1つのホップに 3パケットづつ送信しますので、レスポンス時間が 3列表示されますが、1列しか表示されていません。

-r

ルーティングテーブルを無視して、直接ネットワーク上のホストに送信する。

$ traceroute -r -n dev2.synapse.ne.jp
traceroute to dev2.synapse.ne.jp (202.208.174.2), 30 hops max, 60 byte packets
 1  202.208.174.2  0.271 ms  0.231 ms  0.169 ms
$

同一ネットワーク上に宛先ホストが存在するので応答がありました。

$ traceroute -r -n google.com
traceroute to google.com (142.250.207.110), 30 hops max, 60 byte packets
connect: Network is unreachable
$

同一ネットワーク上に宛先ホストが存在しないのでエラーになりま した。

-T

調査に TCP SYN を使用する。
※権限不足のエラーになるため、root で実行しています。

# traceroute -T -n google.com
traceroute to google.com (142.250.207.110), 30 hops max, 52 byte packets
 1  202.208.174.253  0.889 ms  0.981 ms  1.104 ms
 2  202.208.178.161  0.173 ms  0.344 ms  0.328 ms
 3  202.208.178.198  0.173 ms  0.361 ms 202.208.178.194  0.343 ms
 4  103.246.232.95  10.979 ms  10.966 ms  11.834 ms
 5  108.170.243.33  11.894 ms 108.170.243.65  11.112 ms 108.170.243.33  11.153 ms
 6  142.251.69.231  10.204 ms 142.251.70.23  12.064 ms  11.058 ms
 7  142.250.207.110  10.026 ms  10.268 ms  12.070 ms
#

-p [宛先ポート番号]

宛先のポート番号を指定する。
以下の例は 443/tcp を宛先ポートに指定した場合です。
※-T オプションが権限不足のエラーになるため、root で実行しています。

# traceroute -T -p 443 -n google.com
traceroute to google.com (142.250.207.110), 30 hops max, 52 byte packets
 1  202.208.174.253  1.069 ms  1.330 ms  1.563 ms
 2  202.208.178.161  4.147 ms  4.135 ms  4.117 ms
 3  202.208.178.198  0.184 ms  0.361 ms 202.208.178.194  0.350 ms
 4  103.246.232.95  11.002 ms  10.987 ms  10.968 ms
 5  108.170.243.33  11.261 ms  11.945 ms  11.222 ms
 6  142.251.69.231  10.110 ms 142.251.70.23  12.050 ms 142.251.69.231  11.118 ms
 7  142.250.207.110  12.063 ms  11.101 ms  11.001 ms
#

-w [待ち時間]

応答待ちの時間を指定する。

1秒を指定した場合

$ traceroute -w 1 -n yahoo.co.jp
traceroute to yahoo.co.jp (183.79.217.124), 30 hops max, 60 byte packets
 1  202.208.174.253  1.037 ms  1.063 ms  1.152 ms
 2  202.208.178.169  0.153 ms  0.327 ms  0.302 ms
 3  202.208.178.198  26.465 ms  26.442 ms 202.208.178.194  26.393 ms
 4  103.246.232.162  11.050 ms  11.030 ms  11.871 ms
 5  * * *
 6  * * *
 7  * * *
  ~途中省略~
28  * * *
29  * * *
30  * * *
$

「*」で表示される応答待ち時間切れのところが、デフォルトでは 5秒待ちますが、1秒しか待ちませんので、どんどん進みます。

-z [パケット送信待ち時間]

調査用のパケットの送信間隔を指定する。

3 を指定した場合

$ traceroute -z 3 -n google.com
traceroute to google.com (142.250.207.110), 30 hops max, 60 byte packets
 1  202.208.174.253  0.930 ms  0.770 ms  0.785 ms
 2  202.208.178.169  0.157 ms  0.150 ms  0.152 ms
 3  202.208.178.194  0.170 ms  47.458 ms 202.208.178.198  0.189 ms
 4  103.246.232.95  10.882 ms  12.286 ms  13.708 ms
 5  108.170.243.65  12.075 ms 108.170.243.33  11.003 ms 108.170.243.65  11.104 ms
 6  142.251.69.231  10.112 ms  11.151 ms  10.114 ms
 7  142.250.207.110  11.987 ms  11.976 ms  11.991 ms
$

調査用のパケットの送信が 3秒間隔になりますので、次の応答時間が表示されるまでに 3秒程度かかるようになります。

--back

順方向と異なるようであれば、逆方向のホップ数を表示する。

$ traceroute --back -n google.com
traceroute to google.com (142.250.207.110), 30 hops max, 60 byte packets
 1  202.208.174.253 '-2'  1.305 ms  1.336 ms  1.363 ms
 2  202.208.178.169  0.158 ms  0.307 ms  0.281 ms
 3  202.208.178.198  0.203 ms  0.357 ms 202.208.178.194  0.330 ms
 4  103.246.232.95  10.967 ms  10.932 ms  10.953 ms
 5  108.170.243.33 '-7'  11.463 ms 108.170.243.65 '-8'  11.114 ms 108.170.243.33 '-7'  11.251 ms
 6  142.251.69.231 '-9'  10.159 ms 142.251.70.23 '-9'  11.077 ms 142.251.69.231 '-9'  11.074 ms
 7  142.250.207.110 '-10'  11.003 ms  11.963 ms  11.974 ms
$

「'」で囲まれた負の値が逆方向のホップ数らしいです。

番外編

traceroute の man に ping コマンドの -R オプションが登場したので試してみました。

ping -R

経路を表示する。

$ ping -n -c 1 -R twitter.com
PING twitter.com (104.244.42.129) 56(124) bytes of data.
64 bytes from 104.244.42.129: icmp_seq=1 ttl=58 time=27.0 ms
NOP
RR:     202.208.174.33
        202.208.178.170
        202.208.178.205
        218.100.6.134
        199.16.159.40
        199.16.159.39
        163.139.22.40
        163.139.136.54
        163.139.22.44


--- twitter.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 27.001/27.001/27.001/0.000 ms

ping なのに経路が表示されています。

おわりに

traceroute コマンドが、これほどまでに興味深いオプションの数々を取り揃えているとは思ってもみなかったので、夢中で試してしまいました。

また、興味深いコマンドを見つけたら、試してみようと思います。