Cisco ASAをNATルータとして使用している環境でtracerouteを正常に動作させるためにはいくつかの設定が必要となる。
インターネット接続部分でNAPT、inspect、ACL、policy-mapといった各種設定を見直したためメモ。
Cisco, Linuxのtracerouteの仕組み、違い、FW通過させる設定はこちら。
Cisco,LinuxのtracerouteをFWで許可(通過)する - designetwork
前提条件
ネットワーク構成
Cisco ASAでフレッツとPPPoE(DynamicIP)接続。
インターネット通信はSrcNAPT(PAT)、DstNATなし。
セキュリティレベル
inside(management):SecLevel 100
outside(internet) :SecLevel 0
Access Rules
inside -> outside : no access rules(SecLevel permission)
outside -> inside : deny any
使用バージョン
Cisco ASA :9.2(3) Cisco ADSM:7.2(1)
ASAでtracerouteを通過させる設定
私の環境では次のような変更を実施した。
before/after項目を示すためDFの比較結果を記載する。
! | ||00084 R|object-group icmp-type DM_INLINE_ICMP_1 | ||00085 R| icmp-object time-exceeded | ||00086 R| icmp-object unreachable ! 00084 |access-list Web extended permit tcp any any eq www||00089 |access-list Web extended permit tcp any any eq www | ||00090 R|access-list Web extended permit icmp any any objec ! 00094 L|icmp unreachable rate-limit 1 burst-size 1 ||00100 R|icmp unreachable rate-limit 10 burst-size 5 ! 00100 L|nat (management,outside) source static any interfa||00106 R|nat (management,outside) source dynamic Internet-P 00101 |access-group Web in interface outside ||00107 |access-group Web in interface outside ! | ||00210 R|class-map ttl | ||00211 R| match any ! 00210 |policy-map global_policy ||00218 |policy-map global_policy 00211 | class inspection_default ||00219 | class inspection_default | ||00235 R| inspect icmp | ||00236 R| inspect icmp error | ||00237 R| class ttl | ||00238 R| set connection decrement-ttl !
outsideインタフェースでICMP戻りパケットを許可する
それぞれ許可すると次の表示が可能になる。
time-exceeded:経由ホップ
unreachable:目標ホスト
object-group icmp-type DM_INLINE_ICMP_1 icmp-object time-exceeded icmp-object unreachable access-list Web extended permit icmp any any object-group DM_INLINE_ICMP_1 access-group Web in interface outside
ちなみに、ICMP Type tracerouteは許可/拒否でも動作に違いはなかった。
ICMPパケット受信バッファ調整
こちらの設定をしておかないと、ホップ表示に時間がかかる。
icmp unreachable rate-limit 10 burst-size 5
NAPT(PAT)時のICMP inspection設定
tracerouteのホップ検出時のICMPヘッダには元パケットのUDPヘッダが引き継がれる。
そのICMPヘッダの内容をinspectして確認することでNAT(NAPT/PAT)のコネクションと紐付ける。
policy-map global_policy class inspection_default inspect icmp inspect icmp error
NAPT設定誤り
初期構築時に設定を間違えたのか、NAPTが想定通りに設定できていなかった。
nat (management,outside) source static any interface ↓ nat (management,outside) source dynamic Internet-PAT interface
ちなみに、NAPT設定誤り時Logは
Src:(Global) Dst:0.0.0.0
と表示され、戻りパケットを処理できていなかった。
inspectionが正常に動作しないと考えられる。
ASAをtracerouteホップとしてカウントさせる
Cisco ASAはデフォルトでは通過パケットのTTLをdecrementしない。
そのため、tracerouteのパケットをそのまま転送し、ホップとしてカウントされず表示されない。
以下の設定でTTL decrement (=traceroute表示) が可能となる。
! class-map ttl match any ! policy-map global_policy class ttl set connection decrement-ttl !
クラス名は適宜変更する。
Ciscoオフィシャル情報
Ciscoのサポートコミュニティでも同様の議論あり。
ASA Versionが新しくなってからinspect icmp errorも必要になった?ような話がある。
traceroute出力結果
上記の設定変更後のLinuxからのtracerouteの結果は以下の通り。
Before
すぐにRequest Timed Out...
[root@CentOS-01 ~]# traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 * * *
8 * * *
9 * * *
After
正常にtraceroute表示されるようになった。
(直近のホストはマスク)
[root@CentOS-01 ~]# 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.1.5) 3.603 ms 3.534 ms 4.618 ms
2 133.160.xx.xx (133.160.xx.xx) 6.507 ms 7.588 ms 7.583 ms
3 133.160.xx.xx (133.160.xx.xx) 6.430 ms 8.271 ms 8.244 ms
4 133.160.148.53 (133.160.148.53) 18.182 ms 27.957 ms 27.933 ms
5 133.160.182.41 (133.160.182.41) 8.054 ms 133.160.182.25 (133.160.182.25) 8.850 ms 9.808 ms
6 72.14.243.78 (72.14.243.78) 10.662 ms 4.739 ms 6.580 ms
7 216.239.54.13 (216.239.54.13) 7.627 ms 7.643 ms 7.614 ms
8 72.14.238.247 (72.14.238.247) 7.601 ms 209.85.243.49 (209.85.243.49) 7.597 ms 209.85.246.89 (209.85.246.89) 9.421 ms
9 google-public-dns-a.google.com (8.8.8.8) 10.523 ms 10.470 ms 10.373 ms