目次

- 概要

- 前提条件

- 要件

- 使用するコンポーネント

- 表記法

- 障害内容

- 解説と解決策

- 解説

- 解決策

- 解決策1

- 解決策2

- 関連資料

概要

このドキュメントでは NAT ルータにて CEF を enable にした際にパケットが50% ロスする場合の発生原因とソリューションについて解説します。

前提条件

要件

次の項目に関する知識があることが推奨されます。

- NAT の基礎知識

- CEF の基礎知識

使用するコンポーネント

このドキュメントは、特定のソフトウェアやハードウェアのバージョンに限定されるものではありません。

表記法

ドキュメント表記の詳細は、『シスコ テクニカル ティップスの表記法』を参照してください。

障害内容

ip nat outside source static 設定時、inside 側から outside 側向けのパケットは、destination address を NAT 変換します。その際、まず、NAT 変換前の destination address を元に、ルーティングし、その後 NAT の処理が行われます。下記設定にある static route は、このように NAT 変換前の destination address を出力インターフェイスまでルーティングさせるために必要になります。

下記設定の場合、inside 側から outside 側へのパケットのため、NAT ルータ（R2） は、ip route 3.3.3.3 255.255.255.0 の static route を参照し、E1/0 へパケットをルーティングし、その後 destination address を3.3.3.3 から23.1.1.3 へ変換してパケットを送出します。

本ドキュメントでは、この設定において、ルーティングの方式に CEF を使用する場合、inside 側から outside 側へのパケットが50% の割合でドロップする事象について説明しています。

※ 画像をクリックすると、大きく表示されます。

R2#sh ip route

3.0.0.0/24 is subnetted, 1 subnets

S       3.3.3.0 is directly connected, Ethernet1/0

23.0.0.0/24 is subnetted, 1 subnets

C       23.1.1.0 is directly connected, Ethernet1/0

12.0.0.0/24 is subnetted, 1 subnets

C       12.1.1.0 is directly connected, Ethernet0/0

R2#sh ip nat translations

Pro         Inside global      Inside local       Outside local      Outside global

---             ---                ---               3.3.3.3            23.1.1.3

---           12.1.1.1           12.1.1.1            3.3.3.3            23.1.1.3

R2#sh ip cef 3.3.3.3

3.3.3.0/24, version 15, epoch 0, attached

0 packets, 0 bytes

via Ethernet1/0, 0 dependencies

valid glean adjacency

解説と解決策

解説

NAT 変換前のパケットを出力インターフェイスへルーティングさせる方式として CEF を使用する場合、destination address 3.3.3.3 の adjacency が解決されません（glean adjacency）。この場合、CEF はパケットを CPU に punt し、次の switching-path で ルーティングが行なわれます（詳細は、『How to Verify Cisco Express Forwarding Switching』をご参照ください）。

punt 処理には閾値が設けられております。具体的には、2秒に1パケットの割合で punt 処理を行います。これは、大量のパケットが punt されることによる CPU への負荷を軽減することを目的としています。ルータから Ping（timeout=2秒）を行なうと、上記 punt 閾値により、50% のパケットロスが発生します。

解決策

解決策1

static route において Next Hop を使用する

設定例） ip route 3.3.3.0 255.255.255.0 Ethernet1/0 23.1.1.3

static route にて Next Hop address が設定されている場合、下記の通り CEF にても Next hop が決定しており、Adjacency が解決されているため、punt 処理は行われず、本事象は発生しません。

R2#sho ip route

3.0.0.0/24 is subnetted, 1 subnets

S       3.3.3.0 [1/0] via 23.1.1.3, Ethernet1/0

23.0.0.0/24 is subnetted, 1 subnets

C       23.1.1.0 is directly connected, Ethernet1/0

12.0.0.0/24 is subnetted, 1 subnets

C       12.1.1.0 is directly connected, Ethernet0/0

R2#sho ip cef 3.3.3.3

3.3.3.0/24, version 12, epoch 0, cached adjacency 23.1.1.3

0 packets, 0 bytes

via 23.1.1.3, Ethernet1/0, 0 dependencies

next hop 23.1.1.3, Ethernet1/0

valid cached adjacency

解決策2

NAT に add-route オプションを設定する

設定例） ip nat outside source static 23.1.1.3 3.3.3.3 add-route

この add-route option を設定すると、指定した NAT に応じた static route が動的に作成され、ルーティングテーブルにインストールされます。このため、CEF での Next Hop が決定されることで Adjacency が解決され、3.3.3.3/32宛のパケットは punt 処理の対象とはならず、本事象は発生しません。

関連資料

- ip nat outside source static コマンドを使用した設定例

- NAT の処理順序

Updated：Oct 24, 2007

Document ID：502102007