CiscoのACLでtracerouteを許可する

CiscoのACLでtracerouteを許可するポリシーで少しハマったのでメモ。


結論から言うと、ICMP応答メッセージの「Port Unreachable」を許可するポリシーを入れて解決しました。
以下、詳細。

そもそもtracerouteの仕組みとは?
tracerouteでは「TTL」の値を利用します。TTLはルータを経由すると値が1つ減ります。TTLが0になったら、ルータは送信元に対してなんらかのICMPメッセージを返します。
この特性を利用して。。。

1.まずは宛先ホストに対して、TTLを「1」にセットしたパケットを送ります。
2.すると最初のネクストホップのルータがTTLを1つ減らすので「0」にります。
3.TTLが「0」になったら、ルータは「Time Exceeded」メッセージを返します。「Time Exceeded」は「TTLが途中で0になったからパケットを破棄しました」という意味になります。
4.「Time Exceeded」メッセージには、メッセージを返したルータのIPが含まれているので、送信元ホストはそのIPを記憶します。
5.今度はTTLを「2」にセットして宛先ホストに送信します。
6.すると2つ先のルータでTTLが「0」になり、「Time Exceeded」メッセージが返されます。
7.「Time Exceeded」メッセージに含まれる2つ目のルータのIPを記憶します
8.宛先ホストに到達するまでTTLを1つずつ増やしながらパケットを送信し続けます。
9.宛先ホストにパケットが到達したら、宛先ホストは「Echo Reply」もしくは「Port Unreachable」メッセージを送って、パケットを受け取ったことを知らせます。


つまり、CiscoのACLでtracerouteを許可するには「Time Exceeded」、「Echo Reply」、「Port Unreachable」の3種類のICMP応答メッセージを許可するポリシーを入れる必要があります。
私の場合は「Time Exceeded」と「Echo Reply」は許可していたのですが、「Port Unreachable」を許可していなかったので最後の宛先ホストからのICMP応答メッセージを受け取れていませんでした。

以下のような感じでACLを入れました。

permit icmp [source] [destination] echo-reply
permit icmp [source] [destination] time-exceeded
permit icmp [source] [destination] port-unreachable



※宛先のネットワークでICMP応答メッセージを返さないようなフィルタリングがされていれば、当然応答はありません。

tracerouteの解説は以下のリンクが分かりやすいです。↓
http://www5e.biglobe.ne.jp/%257eaji/3min/36.html
http://atnetwork.info/tcpip/tcpip89.html

以上

この記事へのComments:

What do you do when your Achilles tendon hurts? : 2017/07/22 (土) 02:46:29

Link exchange is nothing else except it is simply placing the other person's webpage link on your page at suitable place and other person will also
do same for you.

管理人のみ通知 :

Trackbacks:


プロフィール

トニヒコ

Author:トニヒコ
趣味は旅行と読書とマンガ。
将来の夢はコスモポリタン!

リンク・フリーです。

My hobby is traveling and reading(include manga).
My dream is to become cosmopolitan!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
スポンサード リンク
マクロミルへ登録
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR