NAT

ソースNAT 〜静的(static) NATと動的(dynamic) NATの違い〜

ソース NAT には以下の種類があります。

  1. 内部ローカルアドレスと内部グローバルアドレスを 1 対 1 で相互変換する
  2. 内部ローカルアドレスを内部グローバルアドレスに多対多で変換する
  3. 内部ローカルアドレスを内部グローバルアドレスに多対 1 で変換する
  4. 外部ローカルアドレスと外部グローバルアドレスを 1 対 1 で相互変換する

1番と4番が静的 (static) NAT、2 番と 3 番が動的 (dynamic) NAT に該当します。

この記事では 1 番と 2 番について解説します。3 番、4 番は次以降の記事で解説します。

1. 内部ローカルアドレスと内部グローバルアドレスを相互変換する

ciscoルータでは以下コマンドを使います。

(config)# ip nat inside source static 192.168.1.1 200.1.1.1

Static NAT の場合は行きの通信、帰りの通信関係なく、どちらが先であっても NAT 変換されます。つまり、inside のインタフェースに入ってくる送信元 192.168.1.1 の IP パケットを、送信元 200.1.1.1 に変換しますし、outside のインタフェースに入ってきて inside から出ていく宛先 200.1.1.1 を 192.168.1.1 に変換します。なので実質、inside destination NAT と同義になります。

Dynamic NAT の場合はそうではなく、必ず inside から outside に抜ける必要があります。このあたりを比較するには以下コマンドで NAT テーブルを見ると分かり易いです。

# show ip nat translations
ProInside globalInside localOutside localOutside global
---200.1.1.1192.168.1.1------

static NAT の場合は設定した時点で NAT テーブルに 1 エントリ生成されます。これは雛形としての NAT エントリであり、実際の通信はこのテーブルには表示されません。通信の起点が inside であろうが outside であろうが、inside 側で 200.1.1.1 と 192.168.1.1 の変換が行われます。

変換が行われない Outside には --- が入ります。そしてポート番号は表示されません。

2. 内部ローカルアドレスを内部グローバルアドレスに多対多で変換する

cisco ルータでは以下コマンドを使います。

(config)# access-list 1 192.168.1.0 0.0.0.255
(config)# ip nat pool NATPOOL 200.1.1.31 200.1.1.70 netmask 255.255.255.0
(config)# ip nat inside source list 1 pool NATPOOL

なお、NATPOOL の netmask (もしくは prefix-length) はチェック機能としてあるだけで、設定上は意味がありません。

設定を入れた直後に以下コマンドを打つと

# show ip nat translations

何も表示されません。dynamic NAT の場合は、実際に通信が発生してからエントリができます。そのため、outside から発信される通信は NAT 変換されません。

192.168.1.101 の端末が送出したパケットが、inside から outside に抜けるときに、送信元 IP が 192.168.1.101 から 192.0.2.31 に変換され、それと同時にエントリが生成されます。

戻りのパケットはそのエントリを元に宛先 IP が 192.0.2.31 から 192.168.1.101 に変換されます。

# show ip nat translations
ProInside globalInside localOutside localOutside global
tcp200.1.1.31:5001192.168.1.11:500011.1.1.1:801.1.1.1:80

dynamic NAT の場合の NAT テーブルは雛形ではなく実際の通信がテーブルに入るため、通信が増えれば NAT テーブルの行数が増えていきます。

また、雛形ではないため、実際には変換されない Outside local/global やポート番号まで全て表示されます。

コメント

タイトルとURLをコピーしました