ルーティング・NAT・アクセスリストの処理順序

処理順序【ルーティング・NAT・アクセスリスト】
目次

処理順序

Ciscoルーターでは、「insideからoutsideへの通信」と「outsideからinsideへの通信」でルーティングとNATの処理順序が異なります。

   insideからoutsideへの通信    outsideからinsideへの通信
  1. パケット着信
  2. 入力アクセスリストをチェック
  3. ルーティング
  4. NAT変換
  5. 出力アクセスリストをチェック
  6. パケット送信
  1. パケット着信
  2. 入力アクセスリストをチェック
  3. NAT変換
  4. ルーティング
  5. 出力アクセスリストをチェック
  6. パケット送信

※注意※
“outside側の送信元NAT”の設定のみで、「outsideからinsideへの通信」の場合だけ動作が異なるのですが、基本的に上記となります。詳しくは下記で説明します。

検証準備

ネットワーク構成

CML上でIOSvを3台設置し、「Router1 ー NAT-Router ー Router2」というネットワーク構成で検証します。

CMLのネットワーク構成

ルーターの設定

下記の通り各ルーターを設定します。

NAT-Routerに関しては、純粋なIPルーティングを確認したいため、CEFを無効化します。

デバッグコマンド

NAT-Routerに下記のコマンドを設定し、デバッグログが出力されるようにします。
※本番環境でのデバッグコマンドの実施は、ルーターの処理性能に影響を与えますので十分注意してください。最悪の場合、ルーターへのアクセスができなくなります。

[IPパケット処理(ルーティング等)]

debug ip packet detail

[NAT処理]

debug ip nat

[アクセスリスト処理]

debug ip access-list data-plane

デバッグログ確認

NAT無し

NAT設定を入れない状態でデバッグログを確認します。

insideからoutsideへの通信の場合

insideからoutsideへの通信(NATなし)

デバッグログを確認すると、「パケット着信→入力ACLチェック→ルーティング→出力ACLチェック→パケット送信」の順序で処理されているのが分かります。

19:57:06.848: IP: s=192.168.1.1 (GigabitEthernet0/0), d=172.16.1.1, len 100, input feature
19:57:06.853: IPACL-DP: Pkt matched ACL: Gi0/0_in seq: 10 Action: Permit
19:57:06.860: IP: tableid=0, s=192.168.1.1 (GigabitEthernet0/0), d=172.16.1.1 (GigabitEthernet0/1), routed via RIB
19:57:06.867: IPACL-DP: Pkt matched ACL: Gi0/1_out seq: 10 Action: Permit
19:57:06.873: IP: s=192.168.1.1 (GigabitEthernet0/0), d=172.16.1.1 (GigabitEthernet0/1), len 100, sending full packet

outsideからinsideへの通信の場合

outsideからinsideへの通信(NATなし)

デバッグログを確認すると、「パケット着信→入力ACLチェック→ルーティング→出力ACLチェック→パケット送信」の順序で処理されているのが分かります。

19:59:09.676: IP: s=172.16.1.1 (GigabitEthernet0/1), d=192.168.1.1, len 100, input feature
19:59:09.681: IPACL-DP: Pkt matched ACL: Gi0/1_in seq: 10 Action: Permit
19:59:09.686: IP: tableid=0, s=172.16.1.1 (GigabitEthernet0/1), d=192.168.1.1 (GigabitEthernet0/0), routed via RIB
19:59:09.691: IPACL-DP: Pkt matched ACL: Gi0/0_out seq: 10 Action: Permit
19:59:09.698: IP: s=172.16.1.1 (GigabitEthernet0/1), d=192.168.1.1 (GigabitEthernet0/0), len 100, sending full packet

Inside側のNATのみ

Inside側の送信元NATのみを設定した状態でデバッグログを確認します。

NAT-Router

ip nat inside source static 192.168.1.1 172.16.2.1

insideからoutsideへの通信の場合

insideからoutsideへの通信(inside側の送信元NATのみ)

デバッグログを確認すると、「パケット着信→入力ACLチェックルーティングNAT→出力ACLチェック→パケット送信」の順序で処理されているのが分かります。

14:27:09.465: IP: s=192.168.1.1 (GigabitEthernet0/0), d=172.16.1.1, len 100, input feature
14:27:09.471: IPACL-DP: Pkt matched ACL: Gi0/0_in seq: 10 Action: Permit
14:27:09.477: IP: tableid=0, s=192.168.1.1 (GigabitEthernet0/0), d=172.16.1.1 (GigabitEthernet0/1), routed via RIB
14:27:09.479: NAT: s=192.168.1.1->172.16.2.1, d=172.16.1.1 [22]
14:27:09.485: IPACL-DP: Pkt matched ACL: Gi0/1_out seq: 10 Action: Permit
14:27:09.493: IP: s=172.16.2.1 (GigabitEthernet0/0), d=172.16.1.1 (GigabitEthernet0/1), len 100, sending full packet

outsideからinsideへの通信の場合

outsideからinsideへの通信(inside側の送信元NATのみ)

デバッグログを確認すると、「パケット着信→入力ACLチェックNATルーティング→出力ACLチェック→パケット送信」の順序で処理されているのが分かります。

14:29:36.886: IP: s=172.16.1.1 (GigabitEthernet0/1), d=172.16.2.1, len 100, input feature
14:29:36.893: IPACL-DP: Pkt matched ACL: Gi0/1_in seq: 10 Action: Permit
14:29:36.898: NAT: s=172.16.1.1, d=172.16.2.1->192.168.1.1 [22]
14:29:36.901: IP: tableid=0, s=172.16.1.1 (GigabitEthernet0/1), d=192.168.1.1 (GigabitEthernet0/0), routed via RIB
14:29:36.907: IPACL-DP: Pkt matched ACL: Gi0/0_out seq: 10 Action: Permit
14:29:36.915: IP: s=172.16.1.1 (GigabitEthernet0/1), d=192.168.1.1 (GigabitEthernet0/0), len 100, sending full packet

Outside側のNATのみ

Outside側の送信元NATのみを設定した状態でデバッグログを確認します。

NAT-Router

ip nat outside source static 172.16.1.1 192.168.2.1 add-route

insideからoutsideへの通信の場合

insideからoutsideへの通信(outside側の送信元NATのみ)

デバッグログを確認すると、「パケット着信→入力ACLチェックルーティングNAT→出力ACLチェック→パケット送信」の順序で処理されているのが分かります。

14:33:37.814: IP: s=192.168.1.1 (GigabitEthernet0/0), d=192.168.2.1, len 100, input feature
14:33:37.820: IPACL-DP: Pkt matched ACL: Gi0/0_in seq: 10 Action: Permit
14:33:37.825: IP: tableid=0, s=192.168.1.1 (GigabitEthernet0/0), d=192.168.2.1 (GigabitEthernet0/1), routed via RIB
14:33:37.826: NAT: s=192.168.1.1, d=192.168.2.1->172.16.1.1 [24]
14:33:37.831: IPACL-DP: Pkt matched ACL: Gi0/1_out seq: 10 Action: Permit
14:33:37.839: IP: s=192.168.1.1 (GigabitEthernet0/0), d=172.16.1.1 (GigabitEthernet0/1), len 100, sending full packet

outsideからinsideへの通信の場合

outsideからinsideへの通信(outside側の送信元NATのみ)

デバッグログを確認すると、「パケット着信→入力ACLチェックルーティングNAT→出力ACLチェック→パケット送信」の順序で処理されているのが分かります。

14:35:41.905: IP: s=172.16.1.1 (GigabitEthernet0/1), d=192.168.1.1, len 100, input feature
14:35:41.914: IPACL-DP: Pkt matched ACL: Gi0/1_in seq: 10 Action: Permit
14:35:41.923: IP: tableid=0, s=172.16.1.1 (GigabitEthernet0/1), d=192.168.1.1 (GigabitEthernet0/0), routed via RIB
14:35:41.925: NAT: s=172.16.1.1->192.168.2.1, d=192.168.1.1 [23]
14:35:41.933: IPACL-DP: Pkt matched ACL: Gi0/0_out seq: 10 Action: Permit
14:35:41.944: IP: s=192.168.2.1 (GigabitEthernet0/1), d=192.168.1.1 (GigabitEthernet0/0), len 100, sending full packet

※注記:この場合だけ処理順序が異なります※
“debug ip nat detail”を設定して確認したところ、下記のログが出力されており、ルーティングが先に処理されるようです。

NAT: Processing out-2-in packet in after_routing2

Inside側とOutside側のNAT

Inside側とOutside側の送信元NATを設定した状態でデバッグログを確認します。

NAT-Router

ip nat inside source static 192.168.1.1 172.16.2.1
ip nat outside source static 172.16.1.1 192.168.2.1 add-route

insideからoutsideへの通信の場合

insideからoutsideへの通信(inside側とoutside側の送信元NAT)

デバッグログを確認すると、「パケット着信→入力ACLチェックルーティングNAT→出力ACLチェック→パケット送信」の順序で処理されているのが分かります。

14:39:10.319: IP: s=192.168.1.1 (GigabitEthernet0/0), d=192.168.2.1, len 100, input feature
14:39:10.327: IPACL-DP: Pkt matched ACL: Gi0/0_in seq: 10 Action: Permit
14:39:10.333: IP: tableid=0, s=192.168.1.1 (GigabitEthernet0/0), d=192.168.2.1 (GigabitEthernet0/1), routed via RIB
14:39:10.335: NAT: s=192.168.1.1->172.16.2.1, d=192.168.2.1 [25]
14:39:10.335: NAT: s=172.16.2.1, d=192.168.2.1->172.16.1.1 [25]
14:39:10.341: IPACL-DP: Pkt matched ACL: Gi0/1_out seq: 10 Action: Permit
14:39:10.350: IP: s=172.16.2.1 (GigabitEthernet0/0), d=172.16.1.1 (GigabitEthernet0/1), len 100, sending full packet

outsideからinsideへの通信の場合

outsideからinsideへの通信(inside側とoutside側の送信元NAT)

デバッグログを確認すると、「パケット着信→入力ACLチェックNATルーティング→出力ACLチェック→パケット送信」の順序で処理されているのが分かります。

14:40:46.269: IP: s=172.16.1.1 (GigabitEthernet0/1), d=172.16.2.1, len 100, input feature
14:40:46.275: IPACL-DP: Pkt matched ACL: Gi0/1_in seq: 10 Action: Permit
14:40:46.280: NAT: s=172.16.1.1->192.168.2.1, d=172.16.2.1 [24]
14:40:46.280: NAT: s=192.168.2.1, d=172.16.2.1->192.168.1.1 [24]
14:40:46.283: IP: tableid=0, s=192.168.2.1 (GigabitEthernet0/1), d=192.168.1.1 (GigabitEthernet0/0), routed via RIB
14:40:46.288: IPACL-DP: Pkt matched ACL: Gi0/0_out seq: 10 Action: Permit
14:40:46.297: IP: s=192.168.2.1 (GigabitEthernet0/1), d=192.168.1.1 (GigabitEthernet0/0), len 100, sending full packet

【補足】CEFが利用される場合のデバッグログ

NAT-RouterのCEFを有効にし、Inside側とOutside側の送信元NATを設定した状態でデバッグログを確認すると、下記の通り通常のルーティング処理と比較して、高速で処理されていることが分かります。

NATルーターの設定

NAT-Router

ip cef

デバッグコマンド

[CEF処理]

debug ip cef packet all input rate 0
debug ip cef packet all output rate 0

デバッグログ

13:50:19.173: CEF-Debug: Packet from 192.168.1.1 (Gi0/0) to 192.168.2.1
13:50:19.173: IPACL-DP: Pkt matched ACL: Gi0/0_in seq: 10 Action: Permit
13:50:19.173: IPACL-DP: Pkt matched permit it
13:50:19.173: NAT: s=192.168.1.1->172.16.2.1, d=192.168.2.1 [20]
13:50:19.173: NAT: s=172.16.2.1, d=192.168.2.1->172.16.1.1 [20]
13:50:19.173: IPACL-DP: Pkt matched ACL: Gi0/1_out seq: 10 Action: Permit
13:50:19.173: IPACL-DP: Pkt matched permit it
13:50:19.173: CEF-Debug: Packet from 172.16.2.1 (Gi0/0) to 172.16.1.1 (Gi0/1)

13:50:19.178: CEF-Debug: Packet from 172.16.1.1 (Gi0/1) to 172.16.2.1
13:50:19.178: IPACL-DP: Pkt matched ACL: Gi0/1_in seq: 10 Action: Permit
13:50:19.178: IPACL-DP: Pkt matched permit it
13:50:19.178: NAT: s=172.16.1.1->192.168.2.1, d=172.16.2.1 [20]
13:50:19.178: NAT: s=192.168.2.1, d=172.16.2.1->192.168.1.1 [20]
13:50:19.178: IPACL-DP: Pkt matched ACL: Gi0/0_out seq: 10 Action: Permit
13:50:19.178: IPACL-DP: Pkt matched permit it
13:50:19.178: CEF-Debug: Packet from 192.168.2.1 (Gi0/1) to 192.168.1.1 (Gi0/0)

これで、ルーティング・NAT・アクセスリストの処理順序の説明は完了です。

  • URLをコピーしました!
  • URLをコピーしました!
目次