NATとは

NAT(Network Address Translation)は、パケットが通過する際に、送信元または宛先のIPアドレスを別のアドレスへ変換する技術です。CCNA 200-301で扱う内部ソースNAT(inside source NAT)は、社内ネットワーク(プライベートIPv4アドレス)からインターネットへ向かう通信の送信元アドレスを、インターネット上で通用するグローバルIPv4アドレスへ変換する、最も一般的な使われ方です。

NATを設定する機器では、インターフェイスをあらかじめ内部(inside)・外部(outside)のいずれかに指定しておく必要があります。

Router(config)# interface GigabitEthernet0/0
Router(config-if)# ip nat inside
Router(config-if)# exit
Router(config)# interface GigabitEthernet0/1
Router(config-if)# ip nat outside

スタティックNAT

スタティックNATは、1つのプライベートIPアドレスと1つのグローバルIPアドレスを、1対1で固定的に対応させる方式です。社内に置かれた公開サーバーなど、外部から常に同じアドレスでアクセスできるようにしたい機器に使われます。

以下の例で使用する203.0.113.0/24は説明用に予約されたアドレスです。実運用では、組織またはISPから割り当てられたグローバルIPv4アドレスを使用します。

Router(config)# ip nat inside source static 10.0.0.2 203.0.113.10

設定の確認

Router# show ip nat translations

Pro  Inside global      Inside local       Outside local      Outside global
---  203.0.113.10       10.0.0.2           ---                ---
  • Inside local:内部ネットワーク側で使われている、変換前のIPアドレスです。一般的なインターネット接続ではプライベートIPアドレスです。
  • Inside global:外部(インターネット)から見える、変換後のIPアドレスです。一般的なインターネット接続ではグローバルIPアドレスです。

プールを使用した動的NAT

動的NATは、あらかじめ用意した複数のグローバルIPアドレスの集まり(NATプール)から、内部の機器に対してその都度空いているアドレスを割り当てる方式です。

Router(config)# ip nat pool MYPOOL 203.0.113.1 203.0.113.5 netmask 255.255.255.0
Router(config)# access-list 1 permit 192.168.1.0 0.0.0.255
Router(config)# ip nat inside source list 1 pool MYPOOL
  • ip nat pool:変換先として使うグローバルIPアドレスの範囲を定義します。
  • access-list:NATの変換対象とする内部ネットワーク(送信元アドレス)を指定します。
  • ip nat inside source list ... pool ...:指定したアクセスリストに一致する送信元アドレスを、指定したプールのアドレスへ変換するよう関連付けます。

動的NATでは、プール内のアドレス数を超える台数の機器が同時に通信しようとすると、空きアドレスが無くなり、それ以上の変換ができなくなる点に注意が必要です。

設定の確認

Router# show ip nat translations

Pro  Inside global      Inside local       Outside local      Outside global
---  203.0.113.1        192.168.1.10       ---                ---
---  203.0.113.2        192.168.1.11       ---                ---

show ip nat statisticsコマンドでは、変換件数の合計や、プールの利用状況(使用中のアドレス数)などをあわせて確認できます。

Router# show ip nat statistics

Total active translations: 3 (1 static, 2 dynamic; 0 extended)
Peak translations: 5, occurred 00:12:47 ago
Outside interfaces:
  GigabitEthernet0/1
Inside interfaces:
  GigabitEthernet0/0
Hits: 128  Misses: 3
Pool MYPOOL: netmask 255.255.255.0
  start 203.0.113.1 end 203.0.113.5
  type generic, total addresses 5, allocated 2 (40%), misses 0

Total active translationsで現在有効な変換件数の合計、Pool以下でプールごとのアドレス使用状況を確認できます。allocatedは使用中のアドレス数、括弧内の割合はプール全体に占める使用割合です。プールのアドレスが枯渇しかけていないかを把握する際に役立ちます。

PAT(NATオーバーロード)

スタティックNAT・動的NAT(プール)は、いずれも基本的に「1つのプライベートアドレスに1つのグローバルアドレス」を対応させる方式ですが、実際の企業ネットワークでは、少数のグローバルIPアドレス(多くの場合1つ)だけで、多数の内部機器を同時にインターネットへ接続させたいことがほとんどです。これを実現するのがPAT(Port Address Translation)で、Cisco IOSではNATオーバーロードとも呼ばれます。

PATは、IPアドレスだけでなくポート番号も組み合わせて変換することで、1つのグローバルIPアドレスを、複数の内部機器の通信で同時に共有できるようにします。

プールを使用した動的NATの代わりにPATを使用する場合は、先に設定したプールとの関連付けを削除してから、次のように設定します。

Router(config)# no ip nat inside source list 1 pool MYPOOL
Router(config)# ip nat inside source list 1 interface GigabitEthernet0/1 overload

overloadキーワードを付けることで、指定したインターフェイスのIPアドレスを複数の内部機器で共有するPATとして動作します。show ip nat translationsの出力では、Inside globalの列に、同じグローバルIPアドレスに対して異なるポート番号が割り当てられている複数のエントリが表示されます。

変換テーブルのクリア

動的NAT・PATの動作確認やトラブルシューティングを行っていると、以前の通信で作られた古い変換エントリがテーブルに残ったままになり、新しい通信の結果と混同してしまうことがあります。このような場合は、clear ip nat translationコマンドで変換テーブルをクリアできます。

Router# clear ip nat translation *

アスタリスク(*)を指定すると、動的に作成された変換エントリ(動的NAT・PATのエントリ)がすべてクリアされます。クリアすると、該当する通信の既存セッションは継続できなくなるため、運用中の機器では影響を確認して実行します。NATの動作を最初から確認し直したいときや、古いエントリが残っていて挙動が分かりにくいときによく使われるコマンドです。なお、このコマンドはスタティックNATのエントリには影響しません。スタティックNATの対応関係は、設定として永続的に存在するため、クリアの対象にはなりません。