ソースNATには以下の種類があります。
- 内部ローカルアドレスと内部グローバルアドレスを1対1で相互変換する
- 内部ローカルアドレスを内部グローバルアドレスに多対多で変換する
- 内部ローカルアドレスを内部グローバルアドレスに多対1で変換する
- 外部ローカルアドレスと外部グローバルアドレスを1対1で相互変換する
1番と4番が静的(static) NAT、2番と3番が動的(dynamic) NATに該当します。
この記事では1番と2番について解説します。3番、4番は次以降の記事で解説します。
1. 内部ローカルアドレスと内部グローバルアドレスを相互変換する
ciscoルータでは以下コマンドを使います。
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テーブルを見ると分かり易いです。
Pro | Inside global | Inside local | Outside local | Outside global |
--- | 200.1.1.1 | 192.168.1.1 | --- | --- |
static NATの場合は設定した時点でNATテーブルに1エントリ生成されます。これは雛形としてのNATエントリであり、実際の通信はこのテーブルには表示されません。通信の起点がinsideであろうがoutsideであろうが、inside側で200.1.1.1と192.168.1.1の変換が行われます。
変換が行われないOutsideには---が入ります。そしてポート番号は表示されません。
2. 内部ローカルアドレスを内部グローバルアドレスに多対多で変換する
ciscoルータでは以下コマンドを使います。
(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)はチェック機能としてあるだけで、設定上は意味がありません。
設定を入れた直後に以下コマンドを打つと
何も表示されません。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に変換されます。
Pro | Inside global | Inside local | Outside local | Outside global |
tcp | 200.1.1.31:5001 | 192.168.1.11:50001 | 1.1.1.1:80 | 1.1.1.1:80 |
dynamic NATの場合のNATテーブルは雛形ではなく実際の通信がテーブルに入るため、通信が増えればNATテーブルの行数が増えていきます。
また、雛形ではないため、実際には変換されないOutside local/globalやポート番号まで全て表示されます。