ダイナミック NAT は、変換後のアドレスの範囲を「プール」として決めておき、通信が始まったときに、プールの中の空いているアドレスを割り当てる NAT です。この記事では、Cisco ルータでプールを使ったダイナミック NAT を設定し、内部の複数のアドレスが、プールのアドレスに順に変換されることを確認します。
ip nat poolで変換後のアドレスの範囲を作る設定ip nat inside source list … pool …で、アクセスリストとプールを結びつける設定- NAT テーブルで、内部のアドレスごとにプールのアドレスが割り当てられる様子
ダイナミック NAT
変換後のアドレスの範囲をプールとして指定し、内部の送信元アドレスを、プールのアドレスに1対1で変換します。どの内部アドレスにどのプールアドレスを割り当てるかは、あらかじめ決めておくのではなく、通信が始まったときに決まります。
今回は、R2 に複数のアドレス(192.168.23.2、192.168.23.22、192.168.23.222)を設定し、それぞれのアドレスから R4(192.168.34.4)に通信します。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 は、プールから割り当てられたアドレスです。
ダイナミック 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) |
コメント