はじめに
このドキュメントでは、NX-OSソフトウェアを実行するCisco Cloud-Scale ASICを搭載したNexus 9000スイッチのNAT機能について説明します。
前提条件
要件
このドキュメントで説明されている情報に進む前に、Cisco Nexusオペレーティングシステム(NX-OS)と基本的なNexusアーキテクチャに精通しておくことをお勧めします。
使用するコンポーネント
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
- N9K-C93180YC-FX3
- nxos64-cs.10.4.3.F
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
N9KでのNATサポートの導入
用語
NAT TCAMリソース
デフォルトでは、TCAMエントリはNexus 9000のNAT機能に割り当てられていません。NAT機能にTCAMサイズを割り当てるには、他の機能のTCAMサイズを減らす必要があります。
NATの動作に関係するTCAMには、次の3つのタイプがあります。
NATは、IPアドレスまたはポートに基づいてパケットを照合するためにTCAM NAT領域を使用します。
内部または外部送信元アドレスの各NAT/PATエントリには、2つのNAT TCAMエントリが必要です。
デフォルトでは、ACLアトミックアップデートモードが有効になっており、非アトミックスケール番号の60 %がサポートされています。
「x」個のACEを持つ各NAT内部ポリシーでは、「x」個のエントリが必要です。
設定されたNATプールごとに1つのエントリが必要です。
アトミックアップデートモードを有効にする場合は、TCP-NAT TCAMサイズを2倍にする必要があります。
NATの書き換えと変換は、NAT TCAM領域の外部に存在する「NAT Rewrite Table」に保存されます。「NAT書き換えテーブル」には、Nexus 9300-EX/FX/FX2/9300C用に2048個の固定サイズのエントリ、およびNexus 9300-FX3/GX/GX2A/GX2B/H2R/H1用に4096個の6個のエントリサイズのがあります。このテーブルは、NAT 変換にのみ使用されます。
内部または外部送信元アドレスの各スタティックNAT/PATエントリには、1つの「NATリライトテーブル」エントリが必要です。
Nexus 9000でのTCAMの詳細については、『Classification TCAM with Cisco CloudScale ASICs for Nexus 9000 Series Switches White Paper』を参照してください。
設定と検証
トポロジ

N9K-NATの設定
hardware access-list tcam region nat 1024
hardware access-list tcam region tcp-nat 100
ip nat translation max-entries 80
注:デフォルトでは、ダイナミックNAT変換の最大エントリ数は80です。
ip access-list TEST-NAT
10 permit ip 10.0.0.1/8 192.168.2.1/24
ip nat pool TEST 192.168.1.10 192.168.1.10 netmask 255.255.255.0
ip nat inside source list TEST-NAT pool TEST overload
注意:内部ポリシーのインターフェイスオーバーロードオプションは、外部ポリシーと内部ポリシーの両方について、Cisco Nexus 9200、9300-EX、9300-FX 9300-FX2、9300-FX3、9300-FXP、および9300-GXプラットフォームスイッチではサポートされていません
interface Vlan100
no shutdown
ip address 192.168.1.1/24
ip nat outside
interface Vlan100
no shutdown
ip address 192.168.1.1/24
ip nat outside
検証
内部ホストPing
データパケットの送信元IP:10.0.0.1をIPに変換:192.168.1.10
宛先IP:192.168.2.1
Inside-host# ping 192.168.2.1 source 10.0.0.1
PING 192.168.2.1 (192.168.2.1): 56 data bytes
64 bytes from 192.168.2.1: icmp_seq=0 ttl=63 time=0.784 ms
64 bytes from 192.168.2.1: icmp_seq=1 ttl=63 time=0.595 m
NAT変換テーブルのチェック
N9K-NAT# show ip nat translations
icmp 192.168.1.10:60538 10.0.0.1:48940 192.168.2.1:0 192.168.2.1:0
icmp 192.168.1.10:60539 10.0.0.1:0 192.168.2.1:0 192.168.2.1:0
NAT統計情報
N9K-NAT# show ip nat statistics
IP NAT Statistics
====================================================
Stats Collected since: Tue Sep 3 14:33:01 2024
----------------------------------------------------
Total active translations: 82 / Number of translations active in the system. This number is incremented each time a translation is created and is decremented each time a translation is cleared or times out.
No.Static: 0 / Total number of static translations present in the system.
No.Dyn: 82 / Total number of dynamic translations present in the system.
No.Dyn-ICMP: 2
----------------------------------------------------
Total expired Translations: 2
SYN timer expired: 0
FIN-RST timer expired: 0
Inactive timer expired: 2
----------------------------------------------------
Total Hits: 10475 / Total number of times the software does a translations table lookup and finds an entry.
Total Misses: 184884 / Total number of packet the software dropped Packet.
In-Out Hits: 10474 In-Out Misses: 184884
Out-In Hits: 1 Out-In Misses: 0
----------------------------------------------------
Total SW Translated Packets: 10559 / Total number of packets software does the translation.
In-Out SW Translated: 10558
Out-In SW Translated: 1
----------------------------------------------------
Total SW Dropped Packets: 184800 / Total number of packet the software dropped Packet.
In-Out SW Dropped: 184800
Out-In SW Dropped: 0
Address alloc. failure drop: 0
Port alloc. failure drop: 0
Dyn. Translation max limit drop: 184800 / Total number of packets dropped due to configured maximum number of dynamic translation entry limit reached. (ip nat translation max-entries <1-1023>)
ICMP max limit drop: 0
Allhost max limit drop: 0
----------------------------------------------------
Total TCP session established: 0
Total TCP session closed: 0
---------------------------------------------------
NAT Inside Interfaces: 1
Ethernet1/1
NAT Outside Interfaces: 1
Vlan100
----------------------------------------------------
Inside source list:
++++++++++++++++++++
Access list: TEST-NAT
RefCount: 82 / Number of current references to this access list.
Pool: TEST Overload
Total addresses: 1 / Number of addresses in the pool available for translation.
Allocated: 1 percentage: 100%
Missed: 0
よく寄せられる質問(FAQ)
NAT TCAMが枯渇するとどうなりますか。
TCAMリソースが枯渇すると、エラーログが報告されます。
2024 Aug 28 13:26:56 N9K-NAT %ACLQOS-SLOT1-2-ACLQOS_OOTR: Tcam resource exhausted: Feature NAT outside [nat-outside]
2024 Aug 28 13:26:56 N9K-NAT %NAT-2-HW_PROG_FAILED: Hardware programming for NAT failed:Sufficient free entries are not available in TCAM bank(3)
最大エントリ数に達した場合
デフォルトでは、NAT変換の最大エントリ数は80です。 ダイナミックNAT変換エントリが最大制限を超えると、トラフィックはCPUにパントされ、エラーログとドロップが発生します。
Ping test failure:
Inside-host# ping 192.168.2.1 source 10.0.0.1 count unlimited interval 1
PING 192.168.2.1 (192.168.2.1): 56 data bytes
Request 0 timed out
N9K-NAT Error log:
2024 Sep 5 15:31:33 N9K-NAT %NETSTACK-2-NAT_MAX_LIMIT: netstack [15386] NAT: Can't create dynamic translations, max limit reached - src:10.0.0.1 dst:192.168.2.1 sport:110 dport:110
Capture file from CPU:
N9K-NAT# ethanalyzer local interface inband limit-captured-frames 0
Capturing on 'ps-inb'
15 2024-09-05 15:32:44.899885527 10.0.0.1 → 192.168.2.1 UDP 60 110 → 110 Len=18
一部のNATパケットがCPUにパントされる理由
通常、トラフィックがCPUにルーティングされるシナリオは2つあります。
1つ目は、NATエントリがまだハードウェアにプログラムされていない場合に発生します。この時点で、トラフィックはCPUで処理される必要があります。
頻繁なハードウェアプログラミングはCPUに負担をかけます。ハードウェアでのNATエントリのプログラミング頻度を減らすために、NATは1秒のバッチで変換をプログラムします。dip nat translation creation-delayコマンドは、セッションの確立を遅延させます。
2番目のシナリオでは、TCPセッションを確立する初期フェーズと、その終了インタラクションの間に処理のためにCPUに送信されるパケットが使用されます。
Nexus 9000でプロキシARPなしでNATが機能する理由
バージョン9.2.Xから、nat-aliasという機能が追加されています。この機能はデフォルトで有効になっており、NAT ARPの問題を解決します。手動でディセーブルにしない限り、ip proxy-arpやip local-proxy-arpをイネーブルにする必要はありません。
NATデバイスは、内部グローバル(IG)アドレスと外部ローカル(OL)アドレスを所有し、これらのアドレス宛てのARP要求に応答する役割を担います。IG/OLアドレスサブネットがローカルインターフェイスサブネットと一致すると、NATはIPエイリアスとARPエントリをインストールします。この場合、デバイスはlocal-proxy-arpを使用してARP要求に応答します。
no-alias機能は、アドレス範囲が外部インターフェイスと同じサブネットにある場合に、特定のNATプールアドレス範囲から変換されたすべてのIPのARP要求に応答します。
add-route引数がN9Kでどのように機能し、なぜ必須なのか
Cisco Nexus 9200および9300-EX、-FX、-FX2、-FX3、-FXP、-GXプラットフォームスイッチでは、ASICハードウェアの制限により、内部ポリシーと外部ポリシーの両方でルートの追加オプションが必要です。この引数により、N9Kはホストルートを追加します。外部から内部へのTCP NATトラフィックはCPUにパントされ、この引数なしでドロップされる可能性があります。
変更前:
192.168.1.0/24, ubest/mbest: 1/0, attached
*via 192.168.1.1, Vlan100, [0/0], 10:23:08, direct
192.168.1.0/32, ubest/mbest: 1/0, attached
*via 192.168.1.0, Null0, [0/0], 10:23:08, broadcast
192.168.1.1/32, ubest/mbest: 1/0, attached
*via 192.168.1.1, Vlan100, [0/0],10:23:08, local
変更後:
192.168.1.2/32, ubest/mbest: 1/0
*via 10.0.0.2, [1/0], 00:02:48, nat >>route created by NAT feature
10.0.0.2/32, ubest/mbest: 1/0
*via 192.168.100.2, [200/0], 06:06:58, bgp-64700, internal, tag 64710
192.168.1.0/24, ubest/mbest: 1/0, attached
*via 192.168.1.1, Vlan100, [0/0], 20:43:08, direct
NATが最大100のICMPエントリをサポートする理由
通常、ICMP NATフローは、設定されたsampling-timeoutおよびtranslation-timeoutの期限が切れた後にタイムアウトします。ただし、スイッチに存在するICMP NATフローがアイドル状態になると、設定されたサンプリングタイムアウトの満了後すぐにタイムアウトになります。
Cisco NX-OSリリース7.0(3)I5(2)以降、Cisco Nexus 9300プラットフォームスイッチ上でICMP用のハードウェアプログラミングが導入されました。したがって、ICMPエントリはハードウェアのTCAMリソースを消費します。ICMPはハードウェア内にあるため、Cisco NexusプラットフォームシリーズスイッチのNAT変換の最大制限は1024に変更されます。最大100のICMPエントリが、リソースを最大限に利用できます。この問題は修正されており、最大ICMPエントリ数を調整するオプションはありません。
関連情報
『Cisco Nexus 9000 Series NX-OS Interfaces Configuration Guide, Release 10.4(x)』
Classification TCAM with Cisco CloudScale ASICs for Nexus 9000 Series Switchesホワイトペーパー
Cisco Nexus 9000シリーズNX-OS検証済みスケーラビリティガイド