【NAT】ダイナミックNAT

ダイナミック NAT は、変換後のアドレスの範囲を「プール」として決めておき、通信が始まったときに、プールの中の空いているアドレスを割り当てる NAT です。この記事では、Cisco ルータでプールを使ったダイナミック NAT を設定し、内部の複数のアドレスが、プールのアドレスに順に変換されることを確認します。

この記事でわかること
  1. ip nat pool で変換後のアドレスの範囲を作る設定
  2. ip nat inside source list … pool … で、アクセスリストとプールを結びつける設定
  3. NAT テーブルで、内部のアドレスごとにプールのアドレスが割り当てられる様子

ダイナミック NAT

変換後のアドレスの範囲をプールとして指定し、内部の送信元アドレスを、プールのアドレスに1対1で変換します。どの内部アドレスにどのプールアドレスを割り当てるかは、あらかじめ決めておくのではなく、通信が始まったときに決まります。

今回は、R2 に複数のアドレス(192.168.23.2、192.168.23.22、192.168.23.222)を設定し、それぞれのアドレスから R4(192.168.34.4)に通信します。R3 で、送信元アドレスがプールのアドレスに変換されることを確認します。

Inside Outside R2 R3 R4 192.168.23.0/24 192.168.34.0/24 .2 .22 .222 .3 .3 .4 Fa0/0.23 Fa0/0.34 ip nat inside ip nat outside 送信元192.168.23.2宛先192.168.34.4 送信元192.168.34.100宛先192.168.34.4 R3 が送信元アドレスをプール(192.168.34.100〜200)のアドレスに変換する
図1 検証構成と、R3 での変換

設定

NAT の内部と外部を決める

まず、R3 のインターフェースで、NAT の内部と外部を決めます。

R3

R3(config)# interface FastEthernet0/0.23 
R3(config-subif)# ip nat inside
R3(config-subif)# exit
R3(config)# interface FastEthernet0/0.34
R3(config-subif)# ip nat outside

プールを作る

次に、変換に使うアドレスのプールを、ip nat pool コマンドで作ります。プールの名前は NATPOOL とし、192.168.34.100 から 192.168.34.200 までのアドレスを使います。

R3

R3(config)# ip nat pool NATPOOL 192.168.34.100 192.168.34.200 prefix-length 24
部分意味
NATPOOLプールの名前
192.168.34.100 192.168.34.200プールの最初と最後のアドレス。今回は 101 個
prefix-length 24プールのアドレスのプレフィックス長(netmask 255.255.255.0 と書いても同じ)

変換する送信元をアクセスリストで決める

変換の対象にする内部の送信元アドレスを、アクセスリストで決めます。今回はアクセスリスト 1 で、192.168.23.0/24 を指定します。

R3

R3(config)# access-list 1 permit 192.168.23.0 0.0.0.255

アクセスリストとプールを結びつける

最後に、アクセスリストとプールを結びつけます。

R3

R3(config)# ip nat inside source list 1 pool NATPOOL

前から順に読むと、「ip nat で、inside で受信したパケットの source(送信元)のアドレスのうち、list 1 に一致するものを、NATPOOL のアドレスに変換する」という意味です。PAT と違って overload を付けていないので、1つの内部アドレスに1つのプールアドレスを割り当てます。

確認

R2 に複数のアドレスを設定する

まず、R2 に複数の IP アドレスとデフォルトルートを設定します。

R2

R2(config)# int fa0/0.23
R2(config-subif)# ip address 192.168.23.2 255.255.255.0 
R2(config-subif)# ip address 192.168.23.22 255.255.255.0 secondary 
R2(config-subif)# ip address 192.168.23.222 255.255.255.0 secondary 
R2(config-subif)# exit
R2(config)# ip route 0.0.0.0 0.0.0.0 192.168.23.3

1つのアドレスから通信する

R2 から R4 へ ping を実行します。送信元は 192.168.23.2 です。

R2

R2# ping 192.168.34.4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.34.4, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 100/208/352 ms

R3 の NAT テーブルを確認します。

R3

R3# sh ip nat translations 
Pro Inside global      Inside local       Outside local      Outside global
icmp 192.168.34.100:3  192.168.23.2:3     192.168.34.4:3     192.168.34.4:3
--- 192.168.34.100     192.168.23.2       ---                —

192.168.23.2 が、プールの最初のアドレス 192.168.34.100 に変換されています。NAT テーブルには2種類の行があります。

行意味
Pro が — の行アドレスだけの変換(192.168.23.2 ⇔ 192.168.34.100)。この組み合わせが割り当てられていることを表す
Pro が icmp の行通信ごとの変換。ICMP の場合、「:」のあとの番号は ping(Echo)の識別子

ほかのアドレスからも通信する

続けて、R2 の送信元アドレスを 192.168.23.22 と 192.168.23.222 に変えて、R4 へ ping を実行します。

R2

R2# ping 192.168.34.4 source 192.168.23.22
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.34.4, timeout is 2 seconds:
Packet sent with a source address of 192.168.23.22 
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 180/221/248 ms
R2# ping 192.168.34.4 source 192.168.23.222
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.34.4, timeout is 2 seconds:
Packet sent with a source address of 192.168.23.222 
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 100/243/456 ms

どちらも1つ目の ping だけが失敗しています。新しいプールアドレスへの変換が始まったばかりで、ARP によるアドレスの解決などを待つ間に、最初のパケットがタイムアウトしたと考えられます。2つ目以降は成功しています。

ここで、R3 の NAT テーブルを確認します。

R3

R3# sh ip nat translations    
Pro Inside global      Inside local       Outside local      Outside global
icmp 192.168.34.100:7  192.168.23.2:7     192.168.34.4:7     192.168.34.4:7
--- 192.168.34.100     192.168.23.2       ---                ---
icmp 192.168.34.101:8  192.168.23.22:8    192.168.34.4:8     192.168.34.4:8
--- 192.168.34.101     192.168.23.22      ---                ---
icmp 192.168.34.102:9  192.168.23.222:9   192.168.34.4:9     192.168.34.4:9
--- 192.168.34.102     192.168.23.222     ---                ---

それぞれの送信元アドレスに、プールの範囲から 192.168.34.100、192.168.34.101、192.168.34.102 が順に割り当てられています。この場合の Inside global は、プールから割り当てられたアドレスです。

Inside local(変換前) Inside global(プールから割り当て) NATPOOL 192.168.23.2 192.168.34.100 192.168.23.22 192.168.34.101 192.168.23.222 192.168.34.102 …〜 192.168.34.200 1台に1つずつアドレスを割り当てる(1対1)
図2 内部のアドレスごとに、プールのアドレスが1つずつ割り当てられる
プールのアドレスが足りなくなると

ダイナミック NAT(overload なし)では、1つの内部アドレスがプールのアドレスを1つ使います。プールのアドレスをすべて使い切ると、新しい内部アドレスからのパケットは変換できず、破棄されます。また、アドレスだけの変換の行は、通信がなくなっても、既定では 24 時間たつまで残ります。内部の機器の数がプールのアドレスより多いときは、overload を付けて PAT にする方法があります。

まとめ

項目内容
ダイナミック NAT内部アドレスを、プールの空いているアドレスに1対1で変換する
プールの作成ip nat pool NATPOOL 192.168.34.100 192.168.34.200 prefix-length 24
変換の設定ip nat inside source list 1 pool NATPOOL
確認show ip nat translations。Pro が — の行がアドレスの割り当て、icmp などの行が通信ごとの変換
注意プールを使い切ると変換できない。足りないときは overload(PAT)

コメント