CiscoルータでのスタティックNAT設定と検証方法

スタティック NAT は、内部の IP アドレスと外部の IP アドレスを1対1で固定して変換する方法です。外部から特定の内部の機器へのアクセスを許可するときに、重要な役割を果たします。この記事では、Cisco ルータでのスタティック NAT の基本設定から、NAT テーブルとデバッグによる動作確認までを、手順に沿って説明します。

NAT の基本的な用語は、次の記事を参考にしてください。

>> 参考:NATの基本と用語整理:Inside / OutsideとLocal / Globalの違いを理解する

この記事でわかること
  1. ip nat inside source static による1対1の固定の変換
  2. NAT テーブルで、スタティック NAT のエントリーと通信ごとのエントリーを読む方法
  3. debug ip nat で、行きは送信元、戻りは宛先が変換されることの確認

スタティック NAT とは

スタティック NAT は、内部と外部の IP アドレスを1対1で対応させ、いつも同じアドレスに変換する方法です。

対応が固定されているので、内部から外部への通信だけでなく、外部から内部の特定の機器へのアクセスにも使えます。例えば、外部から内部の Web サーバにアクセスさせたいときに、外部向けのアドレスを Web サーバの内部アドレスに固定で変換することで、内部の機器を外部に公開できます。

方式変換変換後のアドレス
スタティック NAT1対1(固定)設定で決めたアドレス
ダイナミック NAT1対1(その都度)プールの空いているアドレス
PAT(overload)多対11つのアドレスを、ポート番号で区別して共有

検証構成

R3 でスタティック NAT を設定し、内部(Inside)と外部(Outside)のインターフェースを決めます。R2 は内部ネットワークの機器、R4 は外部ネットワークの機器として動作します。

Inside Outside R2 R3 R4 Lo 2.2.2.2/32 Lo 4.4.4.4/32 192.168.23.0/24 192.168.34.0/24 .2 .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.3宛先192.168.34.4 R3 はスタティック NAT で 192.168.23.2 を 192.168.34.3 に変換する
図1 検証構成

スタティック NAT の設定

内部と外部のインターフェースを決める

R3 で、内部と外部のインターフェースを指定します。これで R3 が、NAT の変換の境界として動作します。

R3

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

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

これで R3 は内部と外部の境界がわかり、内部と外部の間を通るパケットに NAT を適用できるようになります。

スタティック NAT の変換を設定する

次に、スタティック NAT の変換を設定します。内部の IP アドレス 192.168.23.2 を、外部の IP アドレス 192.168.34.3 に固定で変換します。

R3

R3(config)# ip nat inside source static 192.168.23.2 192.168.34.3
部分意味
ip nat inside source内部から来たパケットの送信元アドレスを変換する
static固定の1対1の変換
192.168.23.2変換前のアドレス(Inside local)
192.168.34.3変換後のアドレス(Inside global)

内部から外部へのパケットは、送信元アドレスが 192.168.23.2 から 192.168.34.3 に変換されます。逆向きの、外部から内部へのパケットは、宛先アドレスが 192.168.34.3 から 192.168.23.2 に変換されます。

R2 と R4 のルーティングを設定する

R2 には、R3 に向けたデフォルトルートを設定します。

R2

R2(config)#ip route 0.0.0.0 0.0.0.0 192.168.23.3

R4 には、ルーティングを何も設定しません。no ip routing でルーティングを無効にしているので、R4 は内部ネットワーク(192.168.23.0/24)への経路を持っていません。

R4

R4(config)#no ip routing 

R4#sh ip route 
Default gateway is not set


Host               Gateway           Last Use    Total Uses  Interface
ICMP redirect cache is empty

R4 から見えるのは、自分と同じ 192.168.34.0/24 にある 192.168.34.3 だけです。それでも通信できれば、R3 でアドレスが変換されていることがわかります。

動作確認

NAT の設定が正しく動いているかを、次の手順で確認します。

設定したスタティック NAT を確認する

R3 の NAT テーブルを、show ip nat translations で確認します。

R3

R3#sh ip nat translations     
Pro Inside global      Inside local       Outside local      Outside global
--- 192.168.34.3       192.168.23.2       ---                ---

設定したスタティック NAT が表示されています。Pro が — の行は、通信がなくても設定によって常に存在する、アドレスだけの変換のエントリーです。

R2 から R4 へ ping する

R2 から R4 へ ping を送り、通信できるかを確認します。

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 = 16/26/40 ms

ping はすべて成功しています。R4 は 192.168.23.0/24 への経路を持っていないので、変換されずに 192.168.23.2 から届いていたら、応答を返せません。

R3 の NAT テーブルを確認し、どのように変換されたかを見ます。

R3

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

プロトコルが icmp のエントリーが追加されています。Outside local と Outside global は R4(192.168.34.4)です。外部側のアドレスは変換していないので、2つは同じです。

デバッグで変換を確認する

NAT の動作をさらに詳しく見るために、R3 でデバッグを有効にし、パケットのアドレスがどう変換されるかを確認します。

R3

R3#debug ip nat

先ほどと同じように R2 から R4 へ ping したときの、デバッグのログは次のようになります。

R3

R3#debug ip nat

*Jun  6 02:02:30.055: NAT*: s=192.168.23.2->192.168.34.3, d=192.168.34.4 [25]
*Jun  6 02:02:30.087: NAT*: s=192.168.34.4, d=192.168.34.3->192.168.23.2 [25]
行意味
1行目R2 から R4 へのパケット。送信元(s=)が 192.168.23.2 から 192.168.34.3 に変換されている
2行目R4 から R2 への戻りのパケット。宛先(d=)が 192.168.34.3 から 192.168.23.2 に変換されている
R2 R3 R4 行き 送信元192.168.23.2宛先192.168.34.4 送信元192.168.34.3宛先192.168.34.4 戻り 宛先192.168.23.2 宛先192.168.34.3
図2 行きは送信元、戻りは宛先が変換される

このログから、R2 から R4 へのパケットでは送信元アドレスが変換され、R4 から R2 への戻りのパケットでは宛先アドレスが変換されていることがわかります。

デバッグを終えたら

debug ip nat は、NAT を通るパケットごとにログを出します。通信の多い本番の機器では負荷が大きくなるので、確認が終わったら undebug all(または no debug ip nat)で止めておきます。

TCP の通信で確認する

次に、R2 から R4 へ Telnet で接続し、TCP の通信がどう変換されるかを確認します。

R2

R2#telnet 192.168.34.4
Trying 192.168.34.4 ... Open

User Access Verification

Password:

Telnet の接続が開くと、R3 の NAT テーブルに TCP のエントリーが追加されます。R3 の NAT テーブルをもう一度確認します。

R3

R3#sh ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
icmp 192.168.34.3:4    192.168.23.2:4     192.168.34.4:4     192.168.34.4:4
tcp 192.168.34.3:60102 192.168.23.2:60102 192.168.34.4:23    192.168.34.4:23
--- 192.168.34.3       192.168.23.2       ---                ---

プロトコルが tcp で、宛先のポート番号が 23(Telnet)のエントリーが追加されています。R2 側の送信元ポート 60102 はそのままで、アドレスだけが 192.168.34.3 に変換されています。Telnet の通信も、期待どおりに変換されていることがわかります。

まとめ

項目内容
スタティック NAT内部と外部のアドレスを1対1で固定して変換する。外部から内部の機器へのアクセスにも使える
設定ip nat inside、ip nat outside と ip nat inside source static 192.168.23.2 192.168.34.3
NAT テーブル— の行は設定による固定のエントリー。通信すると icmp や tcp の行が追加される
デバッグdebug ip nat。行きは送信元、戻りは宛先が変換される

コメント