スタティック NAT は、内部の IP アドレスと外部の IP アドレスを1対1で固定して変換する方法です。外部から特定の内部の機器へのアクセスを許可するときに、重要な役割を果たします。この記事では、Cisco ルータでのスタティック NAT の基本設定から、NAT テーブルとデバッグによる動作確認までを、手順に沿って説明します。
NAT の基本的な用語は、次の記事を参考にしてください。
>> 参考:NATの基本と用語整理:Inside / OutsideとLocal / Globalの違いを理解する
ip nat inside source staticによる1対1の固定の変換- NAT テーブルで、スタティック NAT のエントリーと通信ごとのエントリーを読む方法
debug ip natで、行きは送信元、戻りは宛先が変換されることの確認
スタティック NAT とは
スタティック NAT は、内部と外部の IP アドレスを1対1で対応させ、いつも同じアドレスに変換する方法です。
対応が固定されているので、内部から外部への通信だけでなく、外部から内部の特定の機器へのアクセスにも使えます。例えば、外部から内部の Web サーバにアクセスさせたいときに、外部向けのアドレスを Web サーバの内部アドレスに固定で変換することで、内部の機器を外部に公開できます。
| 方式 | 変換 | 変換後のアドレス |
|---|---|---|
| スタティック NAT | 1対1(固定) | 設定で決めたアドレス |
| ダイナミック NAT | 1対1(その都度) | プールの空いているアドレス |
| PAT(overload) | 多対1 | 1つのアドレスを、ポート番号で区別して共有 |
検証構成
R3 でスタティック NAT を設定し、内部(Inside)と外部(Outside)のインターフェースを決めます。R2 は内部ネットワークの機器、R4 は外部ネットワークの機器として動作します。
スタティック 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 から 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。行きは送信元、戻りは宛先が変換される |
コメント