インターネットへの接続環境では、スタティック 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つだけであれば問題ありません。
- 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 でスタティック NAT と PAT を設定しなさい。
< 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#
- RT-A で、sh ip nat translations コマンドを実行しなさい。
< 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#
- PC-A、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-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:\>
- 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 で Web サーバーを利用できるようにしなさい。
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 サーバーが起動する。
- PC-C から PC-A の Web サーバーへの接続確認をしなさい。
PC-C の Web ブラウザを使って、PC-A の IPアドレスを指定し接続確認をします。PC-A の HTTP サーバーの設定で [Allow File Browsing] のチェックを入れたので、HTML ファイルを作成しなくても HTTP サーバーの動作確認が可能です。
PC-A の HTTP サーバーの設定で [HTTP Server root directory] で指定したディレクトリ内のファイルの一覧が表示されます。
- PC-D から PC-A の Web サーバーへの接続確認をしなさい。
PC-D の Web ブラウザを使って、PC-A の Web サーバーへ接続しますが、PC-D は外部ネットワーク (インターネット上) にあるため、PC-A のローカルのIPアドレスではなく、スタティック NAT で設定したインターフェイスのIPアドレス 200.10.10.9 を使って接続確認をします。
PC-A の HTTP サーバーの設定で [HTTP Server root directory] で指定したディレクトリ内のファイルの一覧が表示されます。
これでインターネット (外部ネットワーク) から社内のサーバー (内部ネットワーク) にアクセスできることが確認できました。
- 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: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#
- PC-A と PC-C で Telnet クライアントが利用できるように構成しなさい。
Windows 8.1 の場合
[スタート] ボタンを右クリック → [コントロールパネル] → [プログラム] → [Windows の機能の有効化または無効化] の順にクリックし、[Windows の機能] ダイアログボックスで、[Telnet クライアント] のチェックボックスをオンにする。
- PC-A と PC-C から PC-D へ Telnet 接続しなさい。
< 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 が成功しました。
- 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: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 を組み合わせて使用します。
- PC-A と PC-C からの Telnet 接続を切断しなさい。
< PC-A >
*===============================================================
Microsoft Telnet Server.
*===============================================================
C:\Users\telnetpcbuser> exit
ホストとの接続が切断されました。
C:\>
< PC-C >
*===============================================================
Microsoft Telnet Server.
*===============================================================
C:\Users\telnetpcbuser> exit
ホストとの接続が切断されました。
C:\>
● 1つのグローバルアドレスを使ったポートマッピング + PAT
次図のように、内部にサーバーが2台以上ある場合です。
- PC-B をネットワーク構成図に示す通り設定しなさい。
< 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-B で FTP サーバーを利用できるようにしなさい。
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 サーバーが起動する。
- RT-A のスタティック NAT の設定を削除し、次の情報を基に RT-A でポートマッピングの設定をしなさい。
< 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 サーバーへのアクセスのためのポートマッピング
- RT-A で PAT での変換を許可するアドレス範囲を 192.168.1.128/25 から 192.168.1.0/24 に変更しなさい。
< 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#
- 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:80 192.168.1.10:80 --- ---
tcp 200.10.10.9:21 192.168.1.11:21 --- ---
RT-A#
- PC-D から PC-A の Web サーバーへの接続確認をしなさい。
PC-D から PC-A の Web サーバーへアクセスできることが確認できました。
- 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: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#
- PC-D から PC-B の FTP サーバーへの接続確認をしなさい。
< 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 サーバーへアクセスできることが確認できました。
- 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: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#
- PC-A と PC-C から PC-D へ Telnet 接続しなさい。
< 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 が成功しました。
- 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: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 がインターネットにアクセスできるようになります。