【Cisco】CCNP学習 GRE + IPsec トンネル設定検証

CiscoIOS

はじめに

掲題の通り、CCNPの学習を深めるために検証した際の記録です。

IPsecやGREトンネルの説明は調べるとよくでてくるので、説明は割愛します。

検証

構成図

基本的な構成は下記です。RT01とRT04でGREトンネルとIPsecで接続しています。

通信の中を確認したいので、RT02とRT03の間にL2SWを接続し、RT02とRT03間の通信をパケットキャプチャします。

IPsecの設定有無で見え方の違いも確認してみます。

設定

※管理用(ログイン用)にVLAN99を作成しています。VLAN99はIPsecの設定には関係はありません。

流し込みconfig

以下、検証設定のために実行コマンドです。

RT01
RT02
RT03
RT04

sh run

検証に使用したconfigを載せます。

RT01# sh run
RT02# sh run
RT03# sh run
RT04# sh run

設定とパケットについて

ルーティングについて

当たり前ですが、RT02とRT03にはRT01とRT04が持つセグメントを持っていますが、トンネリングされているので問題なくRT01からRT04への通信が行うことができます。トンネリングされていないと、RT02やRT03が持つセグメントでIP重複が発生する可能性がありますので、トンネリングの効用についても一緒に確認しています。

暗号化の対象に注目する

紹介しているconfigを環境に合わせてIPを変更すればあまり考えずに使えますが、設定項目について少しだけ補足。

RT01内の「ip access-list extended Allow-ipsec-p2p」の「permit gre host 172.16.0.1 host 172.16.1.4」の部分。GREを使わないでIPsecだけを使う場合と比較すると、通信処理の部分の理解にもつながります。
IPsec単体の場合、この部分の指定は「permit ip 10.0.0.0 0.0.0.255 10.10.1.0 0.0.0.255」になります。このパラメータでIPsecで転送するパケットの範囲を指定します。10.0.0.0/24から10.0.1.0/24宛の通信があった場合、IPsecで暗号化するという意味になります。

では、今回の「permit gre host 172.16.0.1 host 172.16.1.4」はどうなるか。GREトンネルの通信が発生した場合IPsecの暗号化を行うこと言うことになります。つまり、通信処理の順序は
①ルーティングテーブルを確認
②トンネルインターフェースがネクストホップ
③GREのトンネリング
④IPsecの暗号化

となるわけです。GREのルーティング対象になるパケットはすべてIPsec暗号化してくれるので、configとしてすっきりするわけです。1行で収まってしまう分存在感がないので、注目してみました。

暗号化時のパケット

PC01からPC04にICMP(Ping)を行います。
IPSecによって暗号化されているので、ICMP自体の通信は見えません。(所々ISAKMPが挟まっています)

ステータス確認

コマンド:sh crypt isakmap sa

stateが「QM_Idle」になっていると、IKEフェーズ1の成功していることを示しています。このステータスが「-」や「MM_NO_STATE」の場合、IPsec通信の設定を見直しや構成しているルータの設定、途中経路の疎通を確認する必要があります。

実行結果

コマンド:sh crypt isakmap sa

注目するところは「 #pkts encaps: 4, #pkts encrypt: 4, #pkts digest: 4」「#pkts decaps: 4, #pkts decrypt: 4, #pkts verify: 4」の部分。IPsec通信が発生した分だけカウンタが上がるので、このカウンタが上がらない場合はIPsecの通信ができていないことになります。

IPsecを無効にしたときのパケット

一度IPsecを無効にしてみます。(RT04でも同じコマンドを実行)

isamkp、ipsecのステータスは下記の通り。

PC01からPingを実行し、その時のRT02とRT03間の通信を見てみます。先ほどとの違いは明確で、ICMPの通信がそのまま見えます。一見GREトンネルもされていなさそうですが、172.16.0.1から172.16.1.14宛のパケットでちゃんとカプセリングされています。

うまくいかないときはdebugを有効にする

下記コマンドでdebugを有効にしておきます。logはけっこうな量が出力されるので、logの保存容量も相応に大きくしておきます。

IPsec成功ログ

検証時は失敗する中で突如成功して、どこから成功のログ?という感じになることが多かったので、成功時に出力されるログを記録として残しておきます。少し長いですが。

RT01 # sh log

解除を忘れずに。下記で解除できます。