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

ポートマッピングを設定する

インターネットへの接続環境では、スタティック NAT は外部から内部へアクセスさせるためのもの、ダイナミック NAT や PAT は内部から外部へアクセスするためのものです。

前の シナリオ では、複数のグローバルアドレスがあって、それをスタティック NAT と PAT に分けて使用しましたが、自宅などの環境ではほとんどの場合、インターネットに接続するためのグローバルアドレスは1つしかありません。また、個人事業の SOHO などでも1つのグローバルアドレスしか使用できないことはよくあります。このような環境で、内部に外部からアクセスさせるサーバーを設置するにはどうすればいいでしょうか?

内部にサーバーが1台しかなく、外部からのアクセスを全てそのサーバーにさせるのであれば、1つのグローバルアドレスをスタティック NAT と PAT で共用することができます。物理的なサーバーが1台であれば、そのサーバー上で複数のサーバー機能 (Web サーバー、Mail サーバー、DNS サーバー等) が動作していても OK です。



しかし、内部に物理的なサーバーが複数ある場合 (最近は物理サーバーが1台でも、仮想化により複数の論理サーバーに分けることも多い) は、スタティック NAT と PAT での組み合わせでは対処できません。このような場合は、ルータの機能の1つであるポートマッピングを使用します。ポートマッピングはポートフォワーディングやポートリダイレクションとも呼ばれ、Cisco のサイトではスタティック PAT とも書かれています。ただスタティック PAT という用語は一般的ではありません。

スタティック NAT ではIPアドレスだけを変換するのに対して、ポートマッピングではIPアドレスに加えてポート番号も変更します。ここまで書くと PAT と同じですが、PAT はパケットの転送時に動的に NAT テーブルに変換エントリが生成され、一定時間を過ぎると動的に消滅します。しかし、ポートマッピングは管理者がスタティックに設定するもので、管理者がその設定を消すまでその変換エントリは保持されます。そして、PAT は内部から外部にアクセスするためのものですが、ポートマッピングは外部から内部にアクセスさせるために使用します。


想定するネットワーク構成図

ラボ・シナリオで使用するネットワーク構成図
・物理 PC 上に、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つのグローバルアドレスを使ったスタティック NAT + PAT

まずは次図のように、内部にサーバーが1台しかないパターンをやってみます。ただし、1台のサーバーで Mail サーバーや FTP サーバーなど複数のサーバー機能が動作していても結構です。サーバーのIPアドレスが1つだけであれば問題ありません。



  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 でスタティック NAT と PAT を設定しなさい。
  6. ISP から与えられたアドレス200.10.10.9/32
    スタティック NAT と PAT で使用するインターフェイスF0/1
    スタティック NAT でアドレス変換するローカルアドレス192.168.1.10
    PAT での変換を許可するローカルアドレスの範囲192.168.1.128/25
    < RT-A >
    RT-A(config)# ip nat inside source static 192.168.1.10 interface f0/1  ← スタティック NAT の設定
    RT-A(config)# access-list 1 permit 192.168.1.128 0.0.0.127 ← PAT で変換するアドレス範囲をアクセスリストにて設定
    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#
    
  7. RT-A で、sh ip nat translations コマンドを実行しなさい。
  8. < RT-A >
    RT-A# sh ip nat translations
    Pro Inside global      Inside local       Outside local      Outside global
    --- 200.10.10.9        192.168.1.10       ---                ---
    RT-A#
    
  9. PC-A、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-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-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:\>
    
  11. PC-D で Telnet サーバーを構成しなさい。
  12. 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:\>
    
  13. PC-A で Web サーバーを利用できるようにしなさい。
  14. Windows 8.1 の場合 (Windows 7 も同様)

    Windows 8.1 には IIS という Web サーバー機能があるのですが、 設定が若干煩雑なので、今回は外部ソフト Serva を使用します。Serva は非商用/個人で使用する場合は無料で利用できます。

    1) 下記サイトから使用している OS に合わせて Serva_Non-Supporter_32 もしくは Serva_Non-Supporter_64 をダウンロードする
    Serva のダウンロードサイト
    直接ダウンロード (現時点での最新版は v2.14) Serva_Non-Supporter_32_v2.1.4 Serva_Non-Supporter_64_v2.1.4

    2) ダウンロードした Serva を解凍し、アプリを起動させる


    3) [Settings] ボタンを押す


    4) [HTTP] タブをクリックし、[HTTP Server] にチェックを入れ、
    [Bind HTTP to this address] にチェックを入れ、プルダウンメニューで [161.14.1.10] を選び、
    [HTTP Settings] の [Default Page] に index.html を入れ、[Allow File Browsing] にチェックを入れ、
    HTTP 接続してきた時の root ディレクトリを指定し、[OK] ボタンを押す。

    root ディレクトリは Serva アプリが入っているフォルダにしました。
    ※ 実運用では [Allow File Browsing] は無効にすべきです。

    5) アプリを再起動させなさいという意味のポップアップが出るので、クローズボックスでアプリを終了し、再度起動させる。


    6) HTTP サーバーが起動する。

  15. PC-C から PC-A の Web サーバーへの接続確認をしなさい。
  16. PC-C の Web ブラウザを使って、PC-A の IPアドレスを指定し接続確認をします。PC-A の HTTP サーバーの設定で [Allow File Browsing] のチェックを入れたので、HTML ファイルを作成しなくても HTTP サーバーの動作確認が可能です。



    PC-A の HTTP サーバーの設定で [HTTP Server root directory] で指定したディレクトリ内のファイルの一覧が表示されます。
  17. PC-D から PC-A の Web サーバーへの接続確認をしなさい。
  18. PC-D の Web ブラウザを使って、PC-A の Web サーバーへ接続しますが、PC-D は外部ネットワーク (インターネット上) にあるため、PC-A のローカルのIPアドレスではなく、スタティック NAT で設定したインターフェイスのIPアドレス 200.10.10.9 を使って接続確認をします。



    PC-A の HTTP サーバーの設定で [HTTP Server root directory] で指定したディレクトリ内のファイルの一覧が表示されます。
    これでインターネット (外部ネットワーク) から社内のサーバー (内部ネットワーク) にアクセスできることが確認できました。
  19. RT-A で、sh ip nat translations コマンドを実行しなさい。
  20. < RT-A >
    RT-A# sh ip nat translations
    Pro Inside global      Inside local       Outside local      Outside global
    tcp 200.10.10.9:80     192.168.1.10:80    161.14.1.10:49159  161.14.1.10:49159
    tcp 200.10.10.9:80     192.168.1.10:80    161.14.1.10:49160  161.14.1.10:49160
    tcp 200.10.10.9:80     192.168.1.10:80    161.14.1.10:49161  161.14.1.10:49161
    tcp 200.10.10.9:80     192.168.1.10:80    161.14.1.10:49162  161.14.1.10:49162
    tcp 200.10.10.9:80     192.168.1.10:80    161.14.1.10:49163  161.14.1.10:49163
    --- 200.10.10.9        192.168.1.10       ---                ---
    RT-A#
    

  21. PC-A と PC-C で Telnet クライアントが利用できるように構成しなさい。
  22. Windows 8.1 の場合

    [スタート] ボタンを右クリック → [コントロールパネル] → [プログラム] → [Windows の機能の有効化または無効化] の順にクリックし、[Windows の機能] ダイアログボックスで、[Telnet クライアント] のチェックボックスをオンにする。

  23. PC-A と PC-C から PC-D へ Telnet 接続しなさい。
  24. < PC-A >
    C:\> telnet 161.14.1.10
    
    Microsoft Telnet クライアントへようこそ エスケープ文字は 'CTRL+]' です パスワード情報を インターネット ゾーンのリモート コンピューターに送信しようとし ていますが、この操作は安全でない可能性があります。送信しますか? (y/n): n ← ここは no
    Welcome to Microsoft Telnet Service login: telnetuser password: cisco ← 実際には表示はされない
    *=============================================================== Microsoft Telnet Server. *=============================================================== C:\Users\telnetuser>
    < PC-C >
    C:\> telnet 161.14.1.10
    
    Microsoft Telnet クライアントへようこそ エスケープ文字は 'CTRL+]' です パスワード情報を インターネット ゾーンのリモート コンピューターに送信しようとし ていますが、この操作は安全でない可能性があります。送信しますか? (y/n): n ← ここは no
    Welcome to Microsoft Telnet Service login: telnetuser password: cisco ← 実際には表示はされない
    *=============================================================== Microsoft Telnet Server. *=============================================================== C:\Users\telnetuser>
    2台の PC 共に telnet が成功しました。
  25. RT-A で、sh ip nat translations コマンドを実行しなさい。
  26. < RT-A >
    RT-A# sh ip nat translations
    Pro Inside global      Inside local       Outside local      Outside global
    tcp 200.10.10.9:49160  192.168.1.10:49160 161.14.1.10:23     161.14.1.10:23
    --- 200.10.10.9        192.168.1.10       ---                ---
    tcp 200.10.10.9:49164  192.168.1.128:49164 161.14.1.10:23    161.14.1.10:23
    RT-A#
    
    このように、スタティック NAT と PAT の組み合わせで、インターネット上の PC から社内の PC にもアクセスできるし、社内の複数の PC からインターネット上の PC へアクセスもできるようになります。ただし、スタティック NAT と PAT の組み合わせでは、インターネット (外部ネットワーク) から社内 (内部ネットワーク) にアクセスできるのは、社内の1台の PC (1つのIPアドレス) 宛てだけです。

    社内に異なるIPアドレスを持つ複数のサーバー (Web サーバー、Mail サーバー、DNS サーバー等) があり、インターネット上の PC から社内のこれらのサーバーにアクセスさせたい場合は、ポートマッピングと PAT を組み合わせて使用します。
  27. PC-A と PC-C からの Telnet 接続を切断しなさい。
  28. < PC-A >
    *===============================================================
    Microsoft Telnet Server.
    *===============================================================
    C:\Users\telnetpcbuser> exit
    
    ホストとの接続が切断されました。
    
    C:\>
    
    < PC-C >
    *===============================================================
    Microsoft Telnet Server.
    *===============================================================
    C:\Users\telnetpcbuser> exit
    
    ホストとの接続が切断されました。
    
    C:\>
    

● 1つのグローバルアドレスを使ったポートマッピング + PAT

次図のように、内部にサーバーが2台以上ある場合です。



  1. PC-B をネットワーク構成図に示す通り設定しなさい。
  2. < 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:\>
    
  3. PC-B で FTP サーバーを利用できるようにしなさい。
  4. Windows 8.1 の場合 (Windows 7 も同様)

    Windows 8.1 には標準で FTP サーバー機能があるのですが、 FTP サーバー機能は IIS (インターネットインフォメーションサービス) の一部になっており、設定が若干煩雑なので、PC-A の Web サーバーで使用した Serva を使用します。

    1) Serva を起動させる。


    2) [Settings] ボタンを押す。


    3) [FTP] タブをクリックし、[FTP Server] にチェックを入れ、
    [Bind FTP to this address] にチェックを入れ、プルダウンメニューで [161.14.1.11] を選び、
    [FTP Server user accounts] にユーザ名 ftpuser とパスワード cisco を入れ、
    登録したユーザが FTP 接続してきた時の root ディレクトリを指定し、[OK] ボタンを押す。

    root ディレクトリは Serva アプリが入っているフォルダにしました。

    4) アプリを再起動させなさいという意味のポップアップが出るので、クローズボックスでアプリを終了し、再度起動させる。


    5) FTP サーバーが起動する。

  5. RT-A のスタティック NAT の設定を削除し、次の情報を基に RT-A でポートマッピングの設定をしなさい。
  6. ローカルグローバル
    IPアドレスポート番号インターフェイス (もしくはIPアドレス)ポート番号
    192.168.1.1080FastEthernet 0/180
    192.168.1.112121
    < RT-A >
    RT-A# conf t
    Enter configuration commands, one per line.  End with CNTL/Z.
    RT-A(config)# no ip nat inside source static 192.168.1.10 int f0/1  ← スタティック NAT の削除
    RT-A(config)# ip nat inside source static tcp 192.168.1.10 80 int f0/1 80 ← Web サーバーへのアクセスのためのポートマッピング
    RT-A(config)# ip nat inside source static tcp 192.168.1.11 21 int f0/1 21 ← FTP サーバーへのアクセスのためのポートマッピング
    
  7. RT-A で PAT での変換を許可するアドレス範囲を 192.168.1.128/25 から 192.168.1.0/24 に変更しなさい。
  8. < RT-A >
    RT-A(config)# no access-list 1 ← 既存のアクセスリストの削除
    RT-A(config)# access-list 1 permit 192.168.1.0 0.0.0.255 ← PAT で変換するアドレス範囲をアクセスリストにて設定
    RT-A(config)# ^Z
    RT-A#
    
  9. RT-A で、sh ip nat translations コマンドを実行しなさい。
  10. < RT-A >
    RT-A# sh ip nat translations
    Pro Inside global      Inside local       Outside local      Outside global
    tcp 200.10.10.9:80     192.168.1.10:80    ---                ---
    tcp 200.10.10.9:21     192.168.1.11:21    ---                ---
    RT-A#
    
  11. PC-D から PC-A の Web サーバーへの接続確認をしなさい。
  12. PC-D から PC-A の Web サーバーへアクセスできることが確認できました。
  13. RT-A で、sh ip nat translations コマンドを実行しなさい。
  14. < RT-A >
    RT-A# sh ip nat translations
    Pro Inside global      Inside local       Outside local      Outside global
    tcp 200.10.10.9:80     192.168.1.10:80    161.14.1.10:49183  161.14.1.10:49183
    tcp 200.10.10.9:80     192.168.1.10:80    161.14.1.10:49184  161.14.1.10:49184
    tcp 200.10.10.9:80     192.168.1.10:80    ---                ---
    tcp 200.10.10.9:21     192.168.1.11:21    ---                ---
    RT-A#
    
  15. PC-D から PC-B の FTP サーバーへの接続確認をしなさい。
  16. < PC-D >
    C:\> ftp 200.10.10.9
    200.10.10.90 に接続しました。
    220 Browser Ftp Server.
    ユーザー (200.10.10.9:(none)): ftpuser
    331 Password required for this user.
    パスワード: cisco   ← 実際には表示はされない
    230 User Logged In.
    ftp>
    
    PC-D から PC-B の FTP サーバーへアクセスできることが確認できました。
  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:80     192.168.1.10:80    161.14.1.10:49183  161.14.1.10:49183
    tcp 200.10.10.9:80     192.168.1.10:80    161.14.1.10:49184  161.14.1.10:49184
    tcp 200.10.10.9:80     192.168.1.10:80    ---                ---
    tcp 200.10.10.9:21     192.168.1.11:21    161.14.1.10:49185  161.14.1.10:49185
    tcp 200.10.10.9:21     192.168.1.11:21    ---                ---
    RT-A#
    

  19. PC-A と PC-C から PC-D へ Telnet 接続しなさい。
  20. < PC-A >
    C:\> telnet 161.14.1.10
    
    Microsoft Telnet クライアントへようこそ エスケープ文字は 'CTRL+]' です パスワード情報を インターネット ゾーンのリモート コンピューターに送信しようとし ていますが、この操作は安全でない可能性があります。送信しますか? (y/n): n ← ここは no
    Welcome to Microsoft Telnet Service login: telnetuser password: cisco ← 実際には表示はされない
    *=============================================================== Microsoft Telnet Server. *=============================================================== C:\Users\telnetuser>
    < PC-C >
    C:\> telnet 161.14.1.10
    
    Microsoft Telnet クライアントへようこそ エスケープ文字は 'CTRL+]' です パスワード情報を インターネット ゾーンのリモート コンピューターに送信しようとし ていますが、この操作は安全でない可能性があります。送信しますか? (y/n): n ← ここは no
    Welcome to Microsoft Telnet Service login: telnetuser password: cisco ← 実際には表示はされない
    *=============================================================== Microsoft Telnet Server. *=============================================================== C:\Users\telnetuser>
    2台の PC 共に telnet が成功しました。
  21. RT-A で、sh ip nat translations コマンドを実行しなさい。
  22. < RT-A >
    RT-A# sh ip nat translations
    Pro Inside global      Inside local       Outside local      Outside global
    tcp 200.10.10.9:80     192.168.1.10:80    ---                ---
    tcp 200.10.10.9:49161  192.168.1.10:49161 161.14.1.10:23     161.14.1.10:23
    tcp 200.10.10.9:21     192.168.1.11:21    161.14.1.10:49185  161.14.1.10:49185
    tcp 200.10.10.9:21     192.168.1.11:21    ---                ---
    tcp 200.10.10.9:49171  192.168.1.128:49171 161.14.1.10:23    161.14.1.10:23
    RT-A#
    
    このように、ポートマッピングを使えば、1つのグローバルアドレスだけでも、社内に複数のサーバーを立てインターネット上のPCにアクセスさせることができます。また、ポートマッピングに PAT を組み合わせることによって、1つのグローバルアドレスだけで、社内に複数のサーバーを立てることができ、かつ、社内にある複数の PC がインターネットにアクセスできるようになります。