通常の会社では、インターネットからアクセスさせるインターネット公開サーバー (Web サーバーなど) とインターネットにアクセスするクライアントPCの両方が社内ネットワーク内にあります。(ただし、会社によっては社内に Web サーバーなどは置かずにレンタルサーバーを利用する場合もあります。)
ただ、実際のネットワークではセキュリティを考慮し、インターネットからアクセスさせるインターネット公開サーバーは社内の他のホストとは分離したネットワーク (DMZ) に置くのが一般的です。
- 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 10.10.10.1 255.255.255.0
RT-A(config-if)# no shut
RT-A(config-if)# ip route 0.0.0.0 0.0.0.0 10.10.10.2
RT-A(config)# ^Z
RT-A#
デフォルトルートは、RT-A がローカルネットワークから受信したパケットをインターネット側へ転送するために設定します。
- RT-B をネットワーク構成図に示す通り設定し、200.10.10.8/29 のネットワークへ行くためのスタティックルートを構成しなさい。
< 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 10.10.10.2 255.255.255.0
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)# ip route 200.10.10.8 255.255.255.248 10.10.10.1
RT-B(config)# ^Z
RT-B#
200.10.10.8/29 は ISP から割り当てられたグローバルアドレスで、インターネット側の ISP ルータ (RT-B) は、固定でIPアドレスを割り当てた顧客向けには通常スタティックルートで設定します。
- 次の情報を基に RT-A でスタティック NAT とダイナミック NAT を設定しなさい。
< RT-A >
RT-A(config)# ip nat inside source static 192.168.1.10 200.10.10.9 ← スタティック NAT の設定
RT-A(config)# ip nat inside source static 192.168.1.11 200.10.10.10 ← スタティック NAT の設定
RT-A(config)# access-list 1 permit 192.168.1.128 0.0.0.127 ← ダイナミック NAT で変換するアドレス範囲をアクセスリストにて設定
RT-A(config)# ip nat pool INET 200.10.10.11 200.10.10.13 netmask 255.255.255.248 ← ダイナミック NAT の設定
RT-A(config)# ip nat inside source list 1 pool INET ← ダイナミック NAT の設定
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#
- PC-A、PC-B、PC-C をネットワーク構成図に示す通り設定します。
< PC-A >
C:\> netsh interface ipv4 set address "イーサネット" static 192.168.1.128 255.255.255.0 192.168.1.1
C:\> netsh interface ipv4 add address "イーサネット" 192.168.1.10 255.255.255.0
C:\> netsh interface ipv4 add address "イーサネット" 192.168.1.11 255.255.255.0
C:\> ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.10
サブネット マスク . . . . . . . . . .: 255.255.255.0
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.11
サブネット マスク . . . . . . . . . .: 255.255.255.0
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.128
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.1.1
C:\>
< PC-B >
C:\> netsh interface ipv4 set address "イーサネット" static 192.168.1.129 255.255.255.0 192.168.1.1
C:\> ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.1.129
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.1.1
C:\>
< PC-C >
C:\> netsh interface ipv4 set address "イーサネット" static 161.14.1.128 255.255.255.0 161.14.1.2
C:\> netsh interface ipv4 add address "イーサネット" 161.14.1.10 255.255.255.0
C:\> ipconfig
Windows IP 構成
イーサネット アダプター ローカル エリア接続:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 161.14.1.10
サブネット マスク . . . . . . . . . .: 255.255.255.0
IPv4 アドレス . . . . . . . . . . . .: 161.14.1.128
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 161.14.1.2
C:\>
仮想 PC には、サーバーのIPアドレスを追加アドレスとして設定します。
GUI で見ると、PC-C の TCP/IPv4 のプロパティでは、161.14.1.128 のみ設定されていますが、
TCP/IP 詳細設定では、161.14.1.128 と 161.14.1.10 の2つのアドレスが設定されています。
- 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 --- ---
--- 200.10.10.10 192.168.1.11 --- ---
RT-A#
スタティック NAT で構成したエントリのみリストされています。
- PC-C (161.14.1.128) から 200.10.10.9 と 200.10.10.11 宛てに ping を実行しなさい。
< PC-C >
C:\> ping -S 161.14.1.128 200.10.10.9 ← スタティック NAT のアドレス (社内の Web サーバー)
200.10.10.9 に ping を送信しています 161.14.1.128 から 32 バイトのデータ:
200.10.10.9 からの応答: バイト数 =32 時間 =4ms TTL=126
200.10.10.9 からの応答: バイト数 =32 時間 =2ms TTL=126
200.10.10.9 からの応答: バイト数 =32 時間 =1ms TTL=126
200.10.10.9 からの応答: バイト数 =32 時間 =2ms TTL=126
200.10.10.9 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 1ms、最大 = 4ms、平均 = 2ms
C:\>
Windows 8.1 の ping では -S オプションを付けると、送信元アドレスを指定することができます。
これで PC に2つ設定したIPアドレスのうち、どちらのIPアドレスを使って ping を実行するか指定できます。
< PC-C >
C:\> ping -S 161.14.1.128 200.10.10.11 ← ダイナミック NAT のアドレス
200.10.10.11 に ping を送信しています 161.14.1.128 から 32 バイトのデータ:
10.10.10.1 からの応答: 転送中に TTL が期限切れになりました。
10.10.10.1 からの応答: 転送中に TTL が期限切れになりました。
10.10.10.1 からの応答: 転送中に TTL が期限切れになりました。
10.10.10.1 からの応答: 転送中に TTL が期限切れになりました。
200.10.10.11 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
C:\>
200.10.10.11 宛てへの ping は失敗しました。
200.10.10.9 宛への ping は NAT テーブルの次のエントリを使用して 192.168.1.10 宛に変換されて社内の Web サーバーに届きます。
--- 200.10.10.9 192.168.1.10 --- ---
しかし、200.10.10.11 宛への ping は NAT テーブルに該当するエントリがないため、そのパケットはどのホストにも届くことはありません。このように、インターネット側からのアクセスに対しては、NAT テーブルにあるエントリのアドレスしか使用できません。
- PC-A (192.168.1.128) から 161.14.1.10 へ ping を実行しなさい。
< PC-A >
C:\> ping -S 192.168.1.128 161.14.1.10 ← インターネット上の FTP サーバー
161.14.1.10 に ping を送信しています 192.168.1.128 から 32 バイトのデータ:
161.14.1.10 からの応答: バイト数 =32 時間 =3ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =3ms TTL=126
161.14.1.10 からの応答: バイト数 =32 時間 =2ms TTL=126
161.14.1.10 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 2ms、最大 = 3ms、平均 = 2ms
C:\>
- 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 --- ---
--- 200.10.10.10 192.168.1.11 --- ---
icmp 200.10.10.11:1 192.168.1.128:1 161.14.1.10:1 161.14.1.10:1
--- 200.10.10.11 192.168.1.128 --- ---
RT-A#
PC-A のIPアドレス 192.168.1.128 と 200.10.10.11 の変換エントリが NAT テーブルに追加されました。
- 再度、PC-C (161.14.1.128) から 200.10.10.11 へ ping を実行しなさい。
< PC-C >
C:\> ping -S 161.14.1.128 200.10.10.11 ← ダイナミック NAT のアドレス
200.10.10.11 に ping を送信しています 161.14.1.128 から 32 バイトのデータ:
200.10.10.11 からの応答: バイト数 =32 時間 =6ms TTL=126
200.10.10.11 からの応答: バイト数 =32 時間 =2ms TTL=126
200.10.10.11 からの応答: バイト数 =32 時間 =2ms TTL=126
200.10.10.11 からの応答: バイト数 =32 時間 =2ms TTL=126
200.10.10.11 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 2ms、最大 = 6ms、平均 = 3ms
C:\>
今度は ping が成功しました。
これはダイナミック NAT により NAT テーブルに作られた以下のエントリを使って、200.10.10.11→192.168.1.128 のアドレス変換ができるようになったためです。
--- 200.10.10.11 192.168.1.128 --- ---
- RT-A で、ダイナミック NAT のタイムアウト値を 120 秒に設定しなさい。
< RT-A >
RT-A# conf t
Enter configuration commands, one per line. End with CNTL/Z.
RT-A(config)# ip nat translation timeout 120
RT-A(config)# ^Z
RT-A#
- PC-C で FTP サーバーを利用できるようにしなさい。
Windows 8.1 の場合 (Windows 7 も同様)
Windows 8.1 には標準で FTP サーバー機能があるのですが、 FTP サーバー機能は IIS (インターネットインフォメーションサービス) の一部になっており、設定が若干煩雑なので、今回は外部ソフト 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) [FTP] タブをクリックし、[FTP Server] にチェックを入れ、
[Bind FTP to this address] にチェックを入れ、プルダウンメニューで [161.14.1.10] を選び、
[FTP Server user accounts] にユーザ名 ftpuser とパスワード cisco を入れ、
登録したユーザが FTP 接続してきた時の root ディレクトリを指定し、[OK] ボタンを押す。
root ディレクトリは Serva アプリが入っているフォルダにしました。
5) アプリを再起動させなさいという意味のポップアップが出るので、クローズボックスでアプリを終了し、再度起動させる。
6) FTP サーバーが起動する。
- PC-B で Telnet サーバーを構成しなさい。
Windows 8.1 の場合
[スタート] ボタンを右クリック → [コントロールパネル] → [プログラム] → [Windows の機能の有効化または無効化] の順にクリックし、[Windows の機能] ダイアログボックスで、[Telnet サーバー] のチェックボックスをオンにする。
次の4つのコマンドを実行する。
1) sc config tlntsvr start=demand
← Telnet サーバーサービスを手動で起動できるようにする
2) net user telnetpcb cisco /add
← Telnet で使用するユーザアカウント telnetuser を作成する (パスワード cisco)
3) net localgroup telnetclients telnetpcbuser /add
← telnetuser というユーザアカウントを telnetclients グループに所属させる
4) net start telnet
← Telnet サーバーサービスを起動する
C:\> sc config tlntsvr start=demand
[SC] ChangeServiceConfig SUCCESS
C:\> net user telnetpcbuser cisco /add
コマンドは正常に終了しました。
C:\> net localgroup telnetclients telnetpcbuser /add
コマンドは正常に終了しました。
C:\> net start telnet
Telnet サービスを開始します.
Telnet サービスは正常に開始されました。
C:\>
- PC-B から 161.14.1.10 へ ftp 接続を実行しなさい。
< PC-B >
C:\> ftp 161.14.1.10 ← インターネット上の FTP サーバー
161.14.1.10 に接続しました。
220 Browser Ftp Server.
ユーザー (161.14.1.10:(none)): ftpuser
331 Password required for this user.
パスワード: cisco ← 実際には表示はされない
230 User Logged In.
ftp>
- 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 --- ---
--- 200.10.10.10 192.168.1.11 --- ---
--- 200.10.10.11 192.168.1.128 --- ---
tcp 200.10.10.12:49173 192.168.1.129:49173 161.14.1.10:21 161.14.1.10:21
--- 200.10.10.12 192.168.1.129 --- ---
RT-A#
PC-B のIPアドレス 192.168.1.129 と 200.10.10.12 の変換エントリが NAT テーブルに追加されました。
- PC-C から 200.10.10.12 へ telnet を実行しなさい。
< PC-C >
C:\> telnet -l telnetpcbuser 200.10.10.12
Microsoft Telnet クライアントへようこそ
エスケープ文字は 'CTRL+]' です
パスワード情報を インターネット ゾーンのリモート コンピューターに送信しようとし
ていますが、この操作は安全でない可能性があります。送信しますか? (y/n): n ← ここは no
Welcome to Microsoft Telnet Service
password: cisco ← 実際には表示はされない
*===============================================================
Microsoft Telnet Server.
*===============================================================
C:\>
telnet が成功しました。
NAT テーブルで 200.10.10.12 <-> 192.168.1.129 の変換を行っているので、これはインターネット上のホストから内部ネットワークにある PC-B に telnet が成功したことになります。
NAT にはセキュリティ機能があるとよくいいますが、ダイナミック NAT では NAT テーブルにアドレス変換エントリが載っている間はインターネットから簡単に内部ネットワークの PC にアクセスが可能です。そして、Cisco ではデフォルトで 24 時間このアドレス変換エントリが保持されます。
- 120 秒後、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 --- ---
--- 200.10.10.10 192.168.1.11 --- ---
--- 200.10.10.11 192.168.1.128 --- ---
tcp 200.10.10.12:23 192.168.1.129:23 161.14.1.10:49174 161.14.1.10:49174
tcp 200.10.10.12:49173 192.168.1.129:49173 161.14.1.10:21 161.14.1.10:21
--- 200.10.10.12 192.168.1.129 --- ---
RT-A#
今回のように、ダイナミック NAT のタイムアウト値を 24 時間から 120 秒に変更したとしても、現在接続しているセッションが切断されるまでは NAT によるアドレス変換エントリは維持されるので、外部から入ってこられる危険性は非常に高いです。ただし、現在のネットワークでは一般的にダイナミック NAT は使わず、ほとんど PAT を使用していますのでこのような心配は全くではありませんがほぼありません。
- PC-B から 161.14.1.10 への ftp 接続を切断しなさい。
< PC-B >
161.14.1.10 に接続しました。
220 Browser Ftp Server.
ユーザー (161.14.1.10:(none)): ftpuser
331 Password required for this user.
パスワード:
230 User Logged In.
ftp> quit
221 Goodbye.
C:\>
- PC-C から 200.10.10.12 への telnet を切断しなさい。
< PC-C >
*===============================================================
Microsoft Telnet Server.
*===============================================================
C:\Users\telnetpcbuser> exit
ホストとの接続が切断されました。
C:\>
- 120 秒後、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 --- ---
--- 200.10.10.10 192.168.1.11 --- ---
--- 200.10.10.11 192.168.1.128 --- ---
RT-A#
以下のエントリは、ダイナミック NAT のタイムアウト値を 120 秒に設定する前のものでしたので NAT テーブルに残っていますが
--- 200.10.10.11 192.168.1.128 --- ---
以下のエントリは、設定した後のものでしたので NAT テーブルから消えています。
--- 200.10.10.12 192.168.1.129 --- ---
- 再度、PC-C から 200.10.10.12 へ telnet を実行しなさい。
< PC-C >
C:\> telnet -l telnetpcbuser 200.10.10.12
接続中: 200.10.10.12...ホストへ接続できませんでした。 ポート番号 23: 接続に失敗
しました
C:\>
NAT テーブルにないアドレス宛てのため、telnet は失敗します。
192.168.1.11 <-> 200.10.10.11