NAT/PATの設定

CiscoルータでNATの設定を行う主な手順は次の2つです。

  1. 内部ネットワーク、外部ネットワークの指定
  2. アドレス変換の定義

内部ネットワーク、外部ネットワークの指定

NAT変換を行うためには、まず、内部ネットワークと外部ネットワークを指定します。インタフェースコンフィグレーションモードで次のコマンドを入力します。

内部/外部ネットワークの指定

(config-if)#ip nat {inside|outside}

内部ネットワークのインタフェースとしてip nat inside、外部ネットワークのインタフェースにはip nat outsideを指定します。内部ネットワークのインタフェース、外部ネットワークのインタフェースは複数になることもあります。NATのアドレス変換は、内部ネットワークのインタフェースと外部ネットワークのインタフェース間でNAT変換対象のパケットを転送する際に行われます。そのため、内部ネットワークと外部ネットワークの指定を間違えてしまうと、意図したようなアドレス変換が行われないので注意してください。

また、NAT変換対象のパケットはこのあとの「アドレス変換の定義」の中で決定します。

アドレス変換の定義

内部ネットワークと外部ネットワーク間のフローについて、どのようなアドレス変換を行うかを設定します。

ここでは、一番多いNATのアドレス変換である内部ネットワークから外部ネットワークへのフローのアドレス変換の設定のみ解説します。NATの変換は双方向で行いますが、設定は行きのフローについてのみでOKです。行きのフローの設定をすれば、戻りのフローのアドレス変換は自動的に行われます。

図 アドレス変換の定義の設定の考え方

最も一般的なNATのアドレス変換の設定は、グローバルコンフィグレーションモードでip nat inside sourceコマンドを利用します。

(config)#ip nat inside source …

ip nat inside sourceはそのまま解釈してください。「内部ネットワークで受信したIPパケットの送信元IPアドレスを変換する」という意味です。そのあとに、どのようなアドレス変換をするかについてコマンドを続けて入力します。内部ローカルアドレスを内部グローバルアドレスに変換しますが、そのための設定方法として、3つのパターンがあります。

パターン内部ローカルアドレス内部グローバルアドレス
1. スタティック指定 スタティック指定
2. アクセスリストでpermitされたパケットの送信元IPアドレス ルータの特定のインタフェースのIPアドレス
3. アクセスリストでpermitされたパケットの送信元IPアドレス NATプールのIPアドレス
表 Cisco NAT/PAT アドレス変換の定義の種類

パターン1の内部ローカルアドレスと内部グローバルアドレスの対応が必ず決まるアドレス変換をスタティックNATと呼んでいます。そして、パターン2/パターン3のように内部ローカルアドレスが設定のときには特定されずに実際に変換されたときに決まるアドレス変換をダイナミックNATと呼んでいます。


内部ローカルアドレス/内部グローバルアドレスの意味は、以下の記事をご覧ください。


パターン2/パターン3の内部ローカルアドレスは、アクセスリストだけでなくルートマップでpermitされたパケットの送信元IPアドレスとして設定することも可能です。

パターン1

パターン1は、内部ローカルアドレス、内部グローバルアドレスをともにスタティックに指定します。

アドレス変換の定義 スタティックNAT

(config)#ip nat inside source static <inside-local> <inside-global>

<inside-local> : 内部ローカルアドレス
<inside-global> : 内部グローバルアドレス

<inside-local>のIPアドレスが送信元IPアドレスとなっているパケットがNAT変換の対象で、指定した<inside-global>に変換します。なお、この設定で指定した内部ローカルアドレスと内部グローバルアドレスの対応は、スタティックにNATテーブルに保持されます。

パターン2

パターン2は、NATのアドレス変換の対象パケットをアクセスリストで指定します。アクセスリストでpermitされたIPパケットの送信元IPアドレスが内部ローカルアドレスです。そして、内部グローバルアドレスとしてルータのインタフェースを指定します。

アドレス変換の定義 内部グローバル:ルータのインタフェース

(config)#ip nat inside source list <ACL-num> interface <interface-name> [overload]

<ACL-num> : アクセスリスト番号
<interface-name> : 内部グローバルアドレスとして利用するルータのインタフェース

内部グローバルアドレスは、ルータのインタフェースを利用するので1つです。overloadをつけることで、1つの内部グローバルアドレスと複数の内部ローカルアドレスの対応が可能なPATの動作になります。

パターン3

パターン3は、内部グローバルアドレスの範囲をNATプールとして設定します。パターン2と同様にNATの対象パケットをアクセスリストで指定します。アクセスリストでpermitされたIPパケットの送信元IPアドレスが内部ローカルアドレスで、NATプール内の内部グローバルアドレスに変換します。

NATプールの設定は、次のコマンドです。

NATプールの設定

(config)#ip nat pool <pool-name> <start-ip-address> <end-ip-address> netmask <subnetmask>

<pool-name> : NATプールの名前
<start-ip-address> : NATプールの先頭IPアドレス
<end-ip-address> : NATプールの終わりのIPアドレス
<subnetmask> : サブネットマスク

そして、ip nat inside sourceコマンドで内部グローバルアドレスとしてNATプールを指定します。

アドレス変換の定義 内部グローバル:NATプール

(config)#ip nat inside source list <ACL-num> pool <pool-name> [overload]

ACL-num> : アクセスリスト番号
<pool-name> : NATプール名

パターン2と同様にoverloadをつけるとPATです。


アクセスリストの設定の詳細については、以下の記事をご覧ください。


NAT/PATの確認

NATの動作を確認するための主なコマンドは次の通りです。

コマンド概要
#show ip interface 内部ネットワーク、外部ネットワークを確認します。
#show running-config | include nat running-config上のNATに関連する設定のみを表示します。
#show ip nat translations NATテーブルを表示します。
#debug ip nat NATのアドレス変換処理をリアルタイムにコンソールに表示します。

NATの設定例

以下のネットワーク構成でNATの設定例を考えます。

図 NATの設定例

設定を行う条件は次の通りです。

  • Fa0/0を内部ネットワーク、Se0/0を外部ネットワークとします。
  • Webサーバ 192.168.1.100のIPアドレスは100.1.1.100に変換されるようにします。
  • 192.168.1.0/24上の複数のホストから外部ネットワークへ通信するときには、R1のSe0/0のIPアドレス100.1.1.1に変換します。

内部ネットワーク、外部ネットワークの指定

R1では、まず、内部ネットワークと外部ネットワークを決めます。

R1

R1(config)#interface FastEthernet0/0
R1(config-if)#ip nat inside
R1(config-if)#interface Serial0/0
R1(config-if)#ip nat outside

アドレス変換の定義

そして、内部ローカルアドレスと内部グローバルアドレスの変換について設定します。WebサーバのIPアドレス192.168.1.100のIPアドレスを100.1.1.00に変換する設定はパターン1の設定です。192.168.1.0/24のホストのIPアドレスをR1のSe0/0に変換する設定はパターン2の設定です。R1 Se0/0の同じIPアドレスに変換するのでoverloadが必要です。

R1

R1(config)#ip nat inside source static 192.168.1.100 100.1.1.100
R1(config)#ip nat inside source list 1 interface Serial0/0 overload
R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255

NATの内部ネットワーク、外部ネットワークの確認を行うためにshow ip interfaceを利用します。R1でFa0/0とSerial0/0のshow ip interfaceは次のようになります。

R1

R1#show ip interface fastethernet 0/0
FastEthernet0/0 is up, line protocol is up
  Internet address is 192.168.1.1/24
  Broadcast address is 255.255.255.255
  Address determined by setup command
  MTU is 1500 bytes
~省略~
  Network address translation is enabled, interface in domain inside
~省略~
R1#show ip interface serial 0/0
Serial0/0 is up, line protocol is up
  Internet address is 100.1.1.1/24
  Broadcast address is 255.255.255.255
  Address determined by setup command
  MTU is 1500 bytes
~省略~
  Network address translation is enabled, interface in domain outside
~省略~

R1のNATテーブルを確認するのがshow ip nat translationsコマンドです。192.168.1.0/24上に192.168.1.3のIPアドレスを持つホストが存在して、外部ネットワークの10.1.1.1のホストへTelnetをした場合のNATテーブルは次のようになります。

R1

R1#show ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
tcp 100.1.1.1:57756    192.168.1.3:57756  10.1.1.1:23        10.1.1.1:23
--- 100.1.1.100        192.168.1.100      ---                ---

このコマンド出力の1つ目のエントリは、次のNATの設定によって変換されたときのエントリです。

R1(config)#ip nat inside source list 1 interface Serial0/0 overload
R1(config)#access-list 1 permit 192.168.1.0 0.0.0.255

overloadのオプションがあるために、IPアドレスだけでなくポート番号の対応も保持しているPATの動作をしていることがわかります。

そして、2つ目のエントリは、次の1対1のスタティックなNAT変換のエントリです。

R1(config)#ip nat inside source static 192.168.1.100 100.1.1.100

このエントリはスタティックNAT変換の設定がある限り、NATテーブルに登録されています。

そして、ルータで行われるNAT変換をリアルタイムに確認するコマンドがdebug ip natです。内部ネットワークの192.168.1.3、192.168.1.100から外部ネットワークの10.1.1.1へTelnetアクセスしたときのR1のdebug ip natの出力の抜粋は次のようになります。

R1

R1#debug ip nat
IP NAT debugging is on
R1#
*Mar  7 06:21:02.751: NAT: s=192.168.1.3->100.1.1.1, d=10.1.1.1 [0]
*Mar  7 06:21:02.771: NAT: s=100.1.1.2, d=100.1.1.1->192.168.1.3 [49649]

*Mar  7 06:22:16.913: NAT: s=192.168.1.100->100.1.1.100, d=10.1.1.1 [0]
*Mar  7 06:22:16.933: NAT: s=100.1.1.2, d=100.1.1.100->192.168.1.100 [49650]

NATの動作の仕組みとCiscoでの設定の理解を深めるために、以下の記事の設定ミスの切り分けと修正も参考にしてください。