【Linux】traceroute の結果(!X, !H, *アスタリスク)の原因/理由,利用ポートについて~

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に流れます。

1パケット目=[宛先IP]=8.8.8.8 [IP TTL]=1 [宛先UDPポート]=33434
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 の仕組みについては、下記ページにて図解していますので参考にして下さい。

【図解】tracerouteの仕組み/見方〜WindowsとLinuxの違い(icmp/udp),戻りの経路,経路途中のIPが表示されない理由〜
【図解】tracerouteの仕組み/見方〜WindowsとLinuxの違い(icmp/udp),戻りの経路,経路途中のIPが表示されない理由〜
traceroute (tracert)とは tracert(Linux系の場...

*(アスタリスク) の意味

先の例で、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 の種類や意味については以下を参考にして下さい。

ICMP ポート番号, Type/Code一覧 ~種類とメッセージの意味について~
ICMP ポート番号, Type/Code一覧 ~種類とメッセージの意味について~
ICMPのポート番号 TCP/UDPとは異なり、ICMPにはポート番号という概...

pingが通るのにtracerouteが通らない原因と対処

pingはicmpを使うのに対し、Linuxのtracerouteはデフォルトではudpを使います。

もしpingが通ったのにtracerouteが通らないときは、-Iオプションをつけましょう。これでWindowsのtracertと同様、icmpを使ったtracerouteが出来ます。

シェアする

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

フォローする