NAT

ソースNAT outside source

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

cisco ルータでは外部ローカルアドレスと外部グローバルアドレスを 1 対 1 で相互変換する場合は以下コマンドを使います。

(config)# ip nat outside source static 1.1.1.1 172.16.1.1 add-route

これも static NAT に該当するため、前々回の記事で記載した通り、行きの通信、帰りの通信関係なく、どちらが先であっても NAT 変換されます。つまり、outside のインタフェースに入ってくる送信元 1.1.1.1 の IP パケットを、送信元 172.16.1.1 に変換しますし、inside から outside のインタフェースへ抜けていく宛先 172.16.1.1 の IP パケットを、宛先 1.1.1.1 に変換します。

上図にある通り、Cisco では NAT pool のアドレスへの ARP に対し、Proxy ARP で応答するのがデフォルト設定になっています。

また、add-routeについては後述しますが、ip nat outside source コマンドを利用する場合はセットで覚えて下さい。

双方向NAT

ip nat inside source static と ip nat outside source static の 2 つのコマンドを同時に使うことによって、お互いが相手の IP アドレスを知ることなく、同セグメント内通信として通信ができるようになります。

具体的な例を下図に示します。

下記で説明しますが、inside から outside に抜けるときはルーティングしてから NAT 変換がなされます。

それゆえ、このケースでは 192.168.10.101 がそのままルーティングされてしまいますが、そのままだと Connected のルートなので ARP を Gi 0/0に 送出し、応答無しでパケット破棄されてしまいます。

そうならないために、以下ルーティングを追加します。

(config)# ip route 192.168.10.101 255.255.255.255 gi 0/1

NextHop にインタフェースを指定します。インタフェース指定で Ethernet を指定した場合、192.168.10.101 が gi 0/1 に Connected であると仮定して gi 0/1 から ARP 要求を出す、という動作になります。

このケースでの具体的なシーケンスは以下のようになります。

  1. ルーティングにより出力先が gi 0/1 と決まる
  2. 宛先 IP が 192.168.10.101 から 10.1.1.2 へ NAT 変換がされる
  3. 10.1.1.2 の ARP 要求を出す
  4. ARP 応答を受信し、L2 通信を行う

NATとルーティングの処理の順番

NAT は inside から outside に抜ける必要はありますが、outside から来る場合は outside のインタフェースに着信した時点で NAT が発動します

これは NAT とルーティングの処理の順番に関わる制約からくるものです。

inside から outside に抜ける通信は、ルーティングされてから NAT 処理が行われますが、outside からくる通信は NAT 処理後にルーティングされます

先にルーティングされるのであれば outside に抜けるのを確認して NAT を掛けられますが、ルーティングが後の場合は、outside から inside に抜けるかどうかはルーティング次第になってしまいます

NAT が発展したモチベーションはもともと、グローバルアドレス不足問題への解決であり、主眼は内部ローカルを内部グローバルに変換することなので、inside から outside の部分の整合性を優先したのかもしれません。

なので、前述の通り、以下ルーティングが必要となります。

(config)# ip route 192.168.10.101 255.255.255.255 gi 0/1

もしくは以下コマンドでも対応できます。

(config)# ip nat outside source static 10.1.1.2 192.168.10.101 add-route

これにより、自動的に帰りのルートが追加されます。

コメント

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