PAT はダイナミック NAT と同様に、内部ネットワークのホスト (PC) がインターネット上にあるホスト (Web サーバーや Mail サ ーバー) にアクセスするために使われます。
PC-A から Web サーバー宛のパケットの送信元IPアドレスおよび送信元ポート番号は、192.168.1.10:1050 (送信元ポート番号は OS が勝手に決めます) から 200.10.10.9:2000 (2000は例としてあげた数値) に変換されて、Web サーバーに届きます。この時、RT-A ではこの変換を NAT テーブルに一時記憶します。
Web サーバーが 200.10.10.9:20000 宛にパケットを返すと、NAT テーブルの情報を基に、RT-A でパケットの宛先IPアドレスおよびポート番号を 192.168.1.10:1050 に変換して社内 LAN にパケットを送出します。
同様に、PC-B から Web サーバー宛のパケットは、RT-A で送信元IPアドレスおよび送信元ポート番号を 192.168.1.11:1071 から 200.10.10.9:2001 に変換して、インターネットに向けてパケットを送出します。
同様に、PC-C から Web サーバー宛のパケットは、RT-A で送信元IPアドレスおよび送信元ポート番号を 192.168.1.12:2044 から 200.10.10.9:2002 に変換して、インターネットに向けてパケットを送出します。
ダイナミック NAT ではプールしているグローバルアドレスの数だけしかインターネットと同時通信することができませんでしたが、PAT では最大 65535 まであるポート番号を使用しますので、1つのグローバルアドレスで膨大な数の同時通信が可能です。
1. 外部インターフェイスに設定したアドレスを使用する方法
2. プールしたアドレスを使用する方法
- RT-A をネットワーク構成図に示す通り設定し、RT-B へのデフォルトルートを構成しなさい。
< RT-A >
Router# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)# host RT-A
RT-A(config)# int f0/0
RT-A(config-if)# ip add 192.168.1.1 255.255.255.0
RT-A(config-if)# no shut
RT-A(config-if)# int f0/1
RT-A(config-if)# ip add 200.10.10.9 255.255.255.252
RT-A(config-if)# no shut
RT-A(config-if)# ip route 0.0.0.0 0.0.0.0 200.10.10.10
RT-A(config)#
- RT-B をネットワーク構成図に示す通り設定しなさい。
< RT-B >
Router# conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)# host RT-B
RT-B(config)# int f0/0
RT-B(config-if)# ip add 200.10.10.10 255.255.255.252
RT-B(config-if)# no shut
RT-B(config-if)# int f0/1
RT-B(config-if)# ip add 161.14.1.2 255.255.255.0
RT-B(config-if)# no shut
RT-B(config-if)#
- 次の情報を基に RT-A で PAT を設定しなさい。
< RT-A >
RT-A(config)# access-list 1 permit 192.168.1.0 0.0.0.127 ← 変換するアドレス範囲をアクセスリストにて設定
RT-A(config)# ip nat inside source list 1 interface f0/1 overload ← PAT の設定
RT-A(config)# int f0/0
RT-A(config-if)# ip nat inside ← F0/0 側を内部ネットワークに指定
RT-A(config-if)# int f0/1
RT-A(config-if)# ip nat outside ← F0/1 側を外部ネットワークに指定
RT-A(config-if)# ^Z
RT-A#
F0/1 に設定されたIPアドレス (1つ) のグローバルアドレスを複数の PC で共用します。
[外部インターフェイスを使用する場合の PAT の設定手順]
- 内部グローバルアドレスへの変換を許可する内部ローカルアドレスを指定するためのアクセスリストの設定
access-list [アクセスリスト番号] permit [送信元IPアドレス] [ワイルドカードマスク]
ここで指定したローカルアドレスだけがグローバルアドレスに変換してインターネットに接続できる
- PAT による変換で使用するアクセスリストと外部インターフェイスを指定
ip nat inside source list [アクセスリスト番号] interface [インターフェイス名] overload
- 内部ネットワークの指定
ip nat inside
- 外部ネットワークの指定
ip nat outside
- RT-A で、sh ip nat translations コマンドを実行しなさい。
< RT-A >
RT-A# sh ip nat translations
RT-A#
ダイナミック NAT と同様に PAT の場合も、実際にパケットを受信し、アドレス変換が行われるまでエントリはリストされません。
- PC-A、PC-B、PC-C、PC-D をネットワーク構成図に示す通り設定します。
< PC-A >
C:\> netsh interface ipv4 set address "イーサネット" static 192.168.1.10 255.255.255.0 192.168.1.1
C:\> ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.10
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.1.1
C:\>
< PC-B >
C:\> netsh interface ipv4 set address "イーサネット" static 192.168.1.11 255.255.255.0 192.168.1.1
C:\> ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.11
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.1.1
C:\>
< PC-C >
C:\> netsh interface ipv4 set address "イーサネット" static 192.168.1.12 255.255.255.0 192.168.1.1
C:\> ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.12
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.1.1
C:\>
< PC-D >
C:\> netsh interface ipv4 set address "イーサネット" static 161.14.1.10 255.255.255.0 161.14.1.2
C:\> ipconfig
Windows IP 構成
イーサネット アダプター ローカル エリア接続:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 161.14.1.10
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 161.14.1.2
C:\>
各 PC から余計なパケットが出て行かないように、ネットワーク周りの設定には気を付けてください。
- RT-A で、debug ip nat コマンドを実行しなさい。
< RT-A >
RT-A# debug ip nat
IP NAT debugging is on
RT-A#
debug コマンドで、NAT 変換の動作を確認することができます。
- PC-D で Telnet サーバーを構成しなさい。
Windows 8.1 の場合
[スタート] ボタンを右クリック → [コントロールパネル] → [プログラム] → [Windows の機能の有効化または無効化] の順にクリックし、[Windows の機能] ダイアログボックスで、[Telnet サーバー] のチェックボックスをオンにする。
次の5つのコマンドを実行する。
1) sc config tlntsvr start=demand
← Telnet サーバーサービスを手動で起動できるようにする
2) net user telnetuser cisco /add
← Telnet で使用するユーザアカウント telnetuser を作成する (パスワード cisco)
3) net localgroup telnetclients telnetuser /add
← telnetuser というユーザアカウントを telnetclients グループに所属させる
4) tlntadmn config maxconn=5
← Telnet セッションの同時接続数を最大 5 にする
5) net start telnet
← Telnet サーバーサービスを起動する
C:\> sc config tlntsvr start=demand
[SC] ChangeServiceConfig SUCCESS
C:\> net user telnetuser cisco /add
コマンドは正常に終了しました。
C:\> net localgroup telnetclients telnetuser /add
コマンドは正常に終了しました。
C:\> tlntadmn config maxconn=5
設定が正常に更新されました。
C:\> net start telnet
Telnet サービスを開始します.
Telnet サービスは正常に開始されました。
C:\>
- PC-A、PC-B、PC-C から PC-D へ telnet を実行しなさい。
< PC-A >
C:\> telnet -l telnetuser 161.14.1.10
Microsoft Telnet クライアントへようこそ
エスケープ文字は 'CTRL+]' です
パスワード情報を インターネット ゾーンのリモート コンピューターに送信しようとし
ていますが、この操作は安全でない可能性があります。送信しますか? (y/n): n ← ここは no
Welcome to Microsoft Telnet Service
password: cisco ← 実際には表示はされない
*===============================================================
Microsoft Telnet Server.
*===============================================================
C:\Users\telnetuser>
< PC-B >
C:\> telnet -l telnetuser 161.14.1.10
Microsoft Telnet クライアントへようこそ
エスケープ文字は 'CTRL+]' です
パスワード情報を インターネット ゾーンのリモート コンピューターに送信しようとし
ていますが、この操作は安全でない可能性があります。送信しますか? (y/n): n ← ここは no
Welcome to Microsoft Telnet Service
password: cisco ← 実際には表示はされない
*===============================================================
Microsoft Telnet Server.
*===============================================================
C:\Users\telnetuser>
< PC-C >
C:\> telnet -l telnetuser 161.14.1.10
Microsoft Telnet クライアントへようこそ
エスケープ文字は 'CTRL+]' です
パスワード情報を インターネット ゾーンのリモート コンピューターに送信しようとし
ていますが、この操作は安全でない可能性があります。送信しますか? (y/n): n ← ここは no
Welcome to Microsoft Telnet Service
password: cisco ← 実際には表示はされない
*===============================================================
Microsoft Telnet Server.
*===============================================================
C:\Users\telnetuser>
- RT-A で、sh ip nat translations コマンドを実行しなさい。
< RT-A >
RT-A# sh ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 200.10.10.9:49159 192.168.1.10:49159 161.14.1.10:23 161.14.1.10:23
tcp 200.10.10.9:1024 192.168.1.11:49159 161.14.1.10:23 161.14.1.10:23
tcp 200.10.10.9:1025 192.168.1.12:49159 161.14.1.10:23 161.14.1.10:23
RT-A#
< RT-A >
RT-A# sh ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 200.10.10.9:51045 192.168.1.10:51045 161.14.1.10:23 161.14.1.10:23
tcp 200.10.10.9:51038 192.168.1.11:51038 161.14.1.10:23 161.14.1.10:23
tcp 200.10.10.9:51029 192.168.1.12:51029 161.14.1.10:23 161.14.1.10:23
RT-A#
< RT-A >
RT-A# sh ip nat translations
Pro Inside global Inside local Outside local Outside global
tcp 200.10.10.9:49159 192.168.1.10:49159 161.14.1.10:23 161.14.1.10:23
tcp 200.10.10.9:1024 192.168.1.11:49159 161.14.1.10:23 161.14.1.10:23
tcp 200.10.10.9:1025 192.168.1.12:49159 161.14.1.10:23 161.14.1.10:23
RT-A#
ポート番号での説明を行うために今回は telnet を使いましたが、PAT でも ping は使えます。
- PC-A、PC-B、PC-C から PC-D へ ping を実行しなさい。
< PC-A >
C:\> ping 161.14.1.10
161.14.1.10 に ping を送信しています 32 バイトのデータ:
161.14.1.10 からの応答: バイト数 =32 時間 =5ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 2ms、最大 = 5ms、平均 = 2ms
C:\>
< PC-B >
C:\> ping 161.14.1.10
161.14.1.10 に ping を送信しています 32 バイトのデータ:
161.14.1.10 からの応答: バイト数 =32 時間 =5ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 2ms、最大 = 5ms、平均 = 2ms
C:\>
< PC-C >
C:\> ping 161.14.1.10
161.14.1.10 に ping を送信しています 32 バイトのデータ:
161.14.1.10 からの応答: バイト数 =32 時間 =5ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 2ms、最大 = 5ms、平均 = 2ms
C:\>
- 最初の ping から1分以内に、RT-A で sh ip nat translations コマンドを実行しなさい。
< RT-A >
RT-A# sh ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp 200.10.10.9:1 192.168.1.10:1 161.14.1.10:1 161.14.1.10:1
tcp 200.10.10.9:49159 192.168.1.10:49159 161.14.1.10:23 161.14.1.10:23
icmp 200.10.10.9:5 192.168.1.11:1 161.14.1.10:1 161.14.1.10:5
tcp 200.10.10.9:1024 192.168.1.11:49159 161.14.1.10:23 161.14.1.10:23
icmp 200.10.10.9:6 192.168.1.12:1 161.14.1.10:1 161.14.1.10:6
tcp 200.10.10.9:1025 192.168.1.12:49159 161.14.1.10:23 161.14.1.10:23
RT-A#
ping は icmp を使ったネットワーク層で動作するプロトコルなので、PAT による変換識別子にポート番号は使わず icmp の Query ID を使用します。
- PC-C のIPアドレスを 192.168.1.128/24 に変更しなさい。
< PC-C >
C:\> netsh interface ipv4 set address "イーサネット" static 192.168.1.128 255.255.255.0 192.168.1.1
C:\> ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.128
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.1.1
C:\>
- PC-C からインターネット上の PC-D へ ping を実行しなさい。
< PC-C >
C:\> ping 161.14.1.10
161.14.1.10 に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
161.14.1.10 の ping 統計:
パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、
C:\>
ping は失敗しました。
これは PAT で使用した次のアクセスリストが原因です。
access-list 1 permit 192.168.1.0 0.0.0.127
このアクセスリストでは、送信元IPアドレスが 192.168.1.0~192.168.1.127 までを許可していますので、PC-C に設定した 192.168.1.128 は拒否されます。