HOME > コンテンツリスト > ラボ・シナリオ for CCNA > [ < 前へ 次へ > ]

PATを設定する (外部インターフェイスに設定したアドレスを使用する方法)

PAT はダイナミック NAT と同様に、内部ネットワークのホスト (PC) がインターネット上にあるホスト (Web サーバーや Mail サ ーバー) にアクセスするために使われます。



ダイナミック NAT はIPアドレスのみを変換しますが、これに対して、PAT ではIPアドレスに加えてポート番号も変換します。



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つのグローバルアドレスで膨大な数の同時通信が可能です。

Cisco の PAT の設定方法には、次の2種類の方法があります。

1. 外部インターフェイスに設定したアドレスを使用する方法
2. プールしたアドレスを使用する方法
想定するネットワーク構成図

ラボ・シナリオで使用するネットワーク構成図
・物理 PC の VirtualBox 上に、PC-A、PC-B、PC-C、PC-D の4つの仮想 PC を構成する。
・PC-A、PC-B、PC-C は物理 PC に標準搭載している LAN ポートを使用するように VirtualBox を設定する。
・物理 PC に USB-LAN 変換ケーブルを1つ接続し、PC-D がそれを使用するように VirtualBox を設定する。
※ ISP から与えられたグローバルアドレスは 200.10.10.9/32 とする。


  1. RT-A をネットワーク構成図に示す通り設定し、RT-B へのデフォルトルートを構成しなさい。
  2. < 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)# 
    
  3. RT-B をネットワーク構成図に示す通り設定しなさい。
  4. < 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)# 
    
  5. 次の情報を基に RT-A で PAT を設定しなさい。
  6. ISP から与えられたアドレス200.10.10.9/32
    PAT で使用するインターフェイスF0/1
    インターネットへの接続を許可するローカルアドレスの範囲192.168.1.0/25
    < 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 の設定手順]

    1. 内部グローバルアドレスへの変換を許可する内部ローカルアドレスを指定するためのアクセスリストの設定
      access-list [アクセスリスト番号] permit [送信元IPアドレス] [ワイルドカードマスク]
      ここで指定したローカルアドレスだけがグローバルアドレスに変換してインターネットに接続できる

    2. PAT による変換で使用するアクセスリストと外部インターフェイスを指定
      ip nat inside source list [アクセスリスト番号] interface [インターフェイス名] overload

    3. 内部ネットワークの指定
      ip nat inside

    4. 外部ネットワークの指定
      ip nat outside
  7. RT-A で、sh ip nat translations コマンドを実行しなさい。
  8. < RT-A >
    RT-A# sh ip nat translations
    RT-A#
    
    ダイナミック NAT と同様に PAT の場合も、実際にパケットを受信し、アドレス変換が行われるまでエントリはリストされません。
  9. PC-A、PC-B、PC-C、PC-D をネットワーク構成図に示す通り設定します。
  10. < 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 から余計なパケットが出て行かないように、ネットワーク周りの設定には気を付けてください。
  11. RT-A で、debug ip nat コマンドを実行しなさい。
  12. < RT-A >
    RT-A# debug ip nat
    IP NAT debugging is on
    RT-A#
    
    debug コマンドで、NAT 変換の動作を確認することができます。
  13. PC-D で Telnet サーバーを構成しなさい。
  14. 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:\>
    
  15. PC-A、PC-B、PC-C から PC-D へ telnet を実行しなさい。
  16. < 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>
  17. RT-A で、sh ip nat translations コマンドを実行しなさい。
  18. < 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#
    
    PAT は1つのグローバルアドレスをポート番号を使うことによって、分けて使うことができる技術です。

    PC-A、PC-B、PC-C それぞれからの Telnet パケットの送信元IPアドレスは、RT-A でグローバルアドレスに変換されますが、変換するグローバルアドレスはどれも同じ 200.10.10.9 で、ポート番号が 49159、1024、1025 と、異なるものを使用します。



    今回は、内部ローカルアドレス (Inside local) のパケットの送信元ポート番号が全て 49159 と同じ値でしたが、通常は異なる場合が多く、異なった場合は次のようになります。
    < 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#
    
    内部グローバルアドレス (Inside global) と内部ローカルアドレス (Inside local) のポート番号が同じであることに気が付くと思いますが、PAT では極力ポート番号を変えないように変換します。内部ホストからパケットを受け取った時に、そのパケット内の送信元ポート番号を調べ、NAT テーブルの Inside global でそのポート番号を使用しているものがなければポート番号は変えず、もし使用しているものがあれば、ポート番号を変えます。

    以下で、1行目の Inside global と Inside local のポート番号が同じで、2行目以降が異なるのはそういう理由です。
    < 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 は使えます。
  19. PC-A、PC-B、PC-C から PC-D へ ping を実行しなさい。
  20. < 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:\>
    
  21. 最初の ping から1分以内に、RT-A で sh ip nat translations コマンドを実行しなさい。
  22. < 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 を使用します。

  23. PC-C のIPアドレスを 192.168.1.128/24 に変更しなさい。
  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:\>
    
  25. PC-C からインターネット上の PC-D へ ping を実行しなさい。
  26. < 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 は拒否されます。