traceroute の成功例のサンプル
[root@localhost ~]# traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 gateway (192.168.100.1) 1.110 ms 0.920 ms 0.854 ms 2 118.23.9.239 (118.23.9.239) 4.274 ms 4.997 ms 4.958 ms 3 118.23.9.117 (118.23.9.117) 4.892 ms 4.834 ms 4.782 ms 4 118.23.30.209 (118.23.30.209) 8.694 ms 8.635 ms 8.544 ms 5 153.149.203.29 (153.149.203.29) 7.666 ms 8.418 ms 8.347 ms 6 153.149.218.65 (153.149.218.65) 12.719 ms 11.020 ms 10.782 ms 7 153.149.218.106 (153.149.218.106) 10.617 ms 9.957 ms 23.765 ms 8 122.1.245.70 (122.1.245.70) 10.533 ms 9.748 ms 10.366 ms 9 211.0.193.14 (211.0.193.14) 13.566 ms 13.492 ms 13.365 ms 10 * * * 11 64.233.175.160 (64.233.175.160) 12.147 ms 108.170.233.16 (108.170.233.16) 10.420 ms 209.85.242.44 (209.85.242.44) 11.088 ms 12 108.170.238.71 (108.170.238.71) 9.409 ms 209.85.253.167 (209.85.253.167) 13.389 ms 209.85.247.161 (209.85.247.161) 10.780 ms 13 google-public-dns-a.google.com (8.8.8.8) 10.633 ms 10.581 ms 9.614 ms [root@localhost ~]#
上記の例において、PC からは以下のような IP パケットが NW に流れます。
2パケット目=[宛先IP]=8.8.8.8 [IP TTL]=1 [宛先UDPポート]=33435
3パケット目=[宛先IP]=8.8.8.8 [IP TTL]=1 [宛先UDPポート]=33436
4パケット目=[宛先IP]=8.8.8.8 [IP TTL]=2 [宛先UDPポート]=33437
5パケット目=[宛先IP]=8.8.8.8 [IP TTL]=2 [宛先UDPポート]=33438
6パケット目=[宛先IP]=8.8.8.8 [IP TTL]=2 [宛先UDPポート]=33439
・・・・・
つまり、traceroute の仕組みとして、TTL=1 のパケットを 3 回、TTL を 1 増やしてまた 3 回、、、というのを宛先に辿り着くまで繰り返します。UDP ポートは 33434 から始まり、1 パケット毎に 1 ずつ増やしていきます。
TTL=1 の場合は 192.168.100.1 で TTL=0 となるので、ICMP の仕組みとして送信元 IP に対して ICMP Time Exceeded (type=11:一般的には TTL expired と呼ばれる)が返されます。
TTL=2 の場合はその次の NW 機器 (118.23.9.239) までルーティングされますが、やはりそこで TTL=0 となり、送信元 IP に対して Time Exceeded が返されます。
表示された結果の 12 行目までは途中経路であり、表示されているのは、UDP に対する Time Exceeded の送信元IPと、それが戻ってくるまでの時間(3回分)です。
また、最後の13行目は宛先そのものであり、この場合は ICMP Destination Unreachable (type=3) のうちの Port Unreachable(code=3)が返されます。
このあたりまでを読んでよく分からない人は、traceroute の仕組みについては、下記ページにて図解していますので参考にして下さい。
*(アスタリスク) の意味
先の例で、10 行目がアスタリスクになっています。アスタリスクは traceroute の timeout (デフォルト 5 秒) の間、送信した UDP に対して何も返って来なかったことを意味します。
もう 1 つの例として、Windows Firewall を有効にしている PC 宛の traceroute は、最後の Port Unreachable も返しません。traceroute としては宛先に着いたかどうかが分かりませんので、TTL を 30 まで増やし、そこで諦めます。以下は、1 hop 目から宛先に着くはずが、最初からWindows Firewall に弾かれているケースの例です。
[root@localhost ~]# traceroute 192.168.100.59 traceroute to 192.168.100.59 (192.168.100.59), 30 hops max, 60 byte packets 1 * * * 2 * * * 3 * * * 4 * * * ~~~途中省略~~~ 30 * * *
Windows Firewall を無効にすると以下のようになります。
[root@localhost ~]# traceroute 192.168.100.59 traceroute to 192.168.100.59 (192.168.100.59), 30 hops max, 60 byte packets 1 192.168.100.59 (192.168.100.59) 0.208 ms * *
最初の 1 回だけ成功し、2 回目以降はアスタリスクになります。これは Windows の DoS 攻撃への対策のようで、開放していない (Listen していない) ポート宛の TCP/UDP パケットを受信した場合は、一定秒間同じパケットを受け取ってもそれに対していちいち Port Unreachable を返さないようになっています。
!H の意味
! は [ICMP Type=3] Destination Unreachable であることを意味しています。その中でも !H は [Type=3/Code=1] Host Unreachable が返ってきたことを意味します。これは、宛先IPの1つ手前の NW 機器が宛先 IP の ARP を解決しようとしたが (ホストダウン等が原因で) ARP 解決できなかった場合に返されます。
!X の意味
!X は [Type=3/Code=13] Communication Administratively Prohibited が返ってきたことを意味します。これは主に、途中の NW 機器が ACL によりその通信を拒否していることが多いです。!X が表示されている行の IP がアサインされている NW 機器の設定を調べましょう。
!N の意味
!N は [Type=3/Code=0] Net Unreachable が返ってきたことを意味します。宛先の 2 つ以上手前のNW機器において、NextHop の ARP が応答しないときなどに返されます。
!P の意味
!P は [Type=3/Code=2] Protocol Unreachable が返ってきたことを意味します。そもそもそのホストの OS 等で UDP 自体をサポートしていない場合に返されます。
!F の意味
!F は [Type=3/Code=4] Fragmentation Needed and DF set が返ってきたことを意味します。途中経路でパケットサイズを下回る MTU サイズのインタフェースがあるはずです。
!S の意味
!S は [Type=3/Code=5] Source route failed が返ってきたことを意味します。最近の NW 機器はセキュリティ上よろしくない Source route オプションの付いた IP パケットなんぞは drop すると思いますので、その際にこの ICMP が返されることがあります。
!V の意味
!V は [Type=3/Code=14] Host Precedence Violation が返ってきたことを意味します。これは NW 機器で許可されていない IP Precedence (ToS) 値が使われた場合、その NW 機器が送信元に対してこの ICMP を返します。(主に RSVP を想定した使い方)
その他 !# が表示される場合の意味
それ以外の Code が返ってきた場合は ! のあとに Code 番号が付いたものが表示されます。
ICMP の Type や Code の種類や意味については以下を参考にして下さい。
pingが通るのにtracerouteが通らない原因と対処
ping は icmp を使うのに対し、Linux の traceroute はデフォルトでは udp を使います。
もし ping が通ったのに traceroute が通らないときは、-Iオプションをつけましょう。これで Windows の tracert と同様、icmp を使った traceroute が出来ます。
コメント