これまであまり物理的なネットワークに触れてこなかったエンジニアを対象に、AWSを用いてネットワークの基礎知識を解説する連載。今回は、インターネットへの接続について解説し、AWSにおけるNATの設定手順を示す。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
これまであまり物理的なネットワークに触れられてこなかったSEやサーバ管理者、情シスなどの方を対象にネットワークの基本を「Amazon Web Services」(AWS)を用いて解説する本連載「AWSで学ぶクラウド時代のネットワーク基礎知識」。連載初回は、基本的なIPネットワークの概念を解説し、「Amazon Virtual Private Cloud」(VPC)の操作手順を示しました。第2回の本稿では、インターネットへの接続について解説し、AWSにおける「Network Address Translation」(NAT)の設定手順を示します。最後に、「Appendix」として環境構築の手順も記すので、必要な方はご参照ください。
インターネットは現代社会においては電気や水道などと同様に欠かせないライフラインの一つといえます。AWSをはじめ、さまざまなクラウドサービスを利用する場合もなくてはならない重要な通信手段です。
このインターネット上での通信は、連載初回で解説したインターネットプロトコルに基づきます。具体的には、通信するPCやスマートフォンなどがIPパケットを作成し、デフォルトゲートウェイのブロードバンドルーターに転送し、そこからインターネット上の多数のルーターが自身のルートテーブルを基に、宛先となるIPアドレス宛てにルーティングして転送することで最終的に宛先の端末に到達して通信する形となります。
ただしインターネットが急速に拡大して非常に広大なネットワークとなった結果、IPv4においてIPアドレスが枯渇する問題が発生しました。IPv4アドレスは32bitで構成されるので、40億個強(232=42億9496万7296)のIPアドレスが存在することになります。仮に個人にIPアドレスを割り当てる場合、現在全世界の人口は80億人近く、2人に1つしか割り当てられないことになります。
そこで128bitの「IPv6アドレス」を利用する「IPv6プロトコル」が開発されました。またIPv6までの対応策として、インターネット上でIPv4アドレスを効率的に利用できるようにネットワークの途中でアドレスを変換するNATという技術が開発されました。
現在はIPv6も利用されていますが、NATによってIPv4もまだまだ利用されている状況です。ただしIPv4アドレスは既に枯渇しているので、今後IPv6の利用が加速します。
NATによるIPv4アドレスの効率利用の方法について説明します。
皆さんが荷物を郵送することを考えてください。荷物を郵送する際には住所を指定しますが、これは家などの「場所」に対して割り当てられます。そこに住む「人」ごとに割り当てられるわけではありません。この考え方をインターネットの世界にも持ち込みます。
まず、前提として家内などのローカルなネットワーク(LAN:Local Area Network)では、各端末自身にインターネットでは利用できない「プライベートIPアドレス」を割り当てます。プライベートIPアドレスはローカルなネットワークでの利用を前提としており、他のネットワークと重なることを気にせずに利用できます。LAN内の端末間はこのプライベートIPアドレスで通信します。プライベートIPアドレスの具体的な範囲は下記の通りです。
インターネットに通信する場合、ブロードバンドルーターによってパケットの送信元IPアドレスをプロバイダーから割り当てられるインターネット上で利用できる「グローバルIPアドレス」または「パブリックIPアドレス」にNATで変換して通信します。
最近は1人1台あるいはそれ以上のPCやスマートフォンを持つことが当たり前です。小規模な家庭のLANでも10個以上のIPアドレスを利用するようになりました。対して、NATによってインターネット通信のためには各家庭に1つのグローバルIPアドレスがあればよく、グローバルIPアドレスの数を抑制できます。
ただし、ここで注意点が1つあります。インターネットに通信するに当たり、多くのプライベートIPアドレスが1つのグローバルIPアドレスに変換され通信されることになりますが、「戻ってきたパケットに対して、ブロードバンドルーターがどのプライベートIPアドレス(端末)に対して通信を返せばいいのか」が分からなくなるということです。
この注意点に対して、例えばポート番号を利用するTCP/UDPパケットなら、送信元IPアドレスに加え送信元ポート番号を他の通信と異なる値にすることで戻りの通信が「どの端末からの通信か」を判別できるようにします。このように、IPアドレスだけでなくポート番号も含めて変換することを、「Network Address Port Translation」(NAPT)や「IPマスカレード」といいます。
NATの具体的な動作についてご興味がある方は下記記事を参考にしてください(※以下の記事で出てくる「PAT」はCisco Systemsの用語で、「NAPT」「IPマスカレード」のことを指します)。
ここからは、AWS環境でのインターネット通信について解説します。第1回で作成した下記のVPC環境を基に説明します。
第1回では明記しなかったのですが、VPCおよびサブネットのCIDR(Classless Inter-Domain Routing)には192.168.0.0/24などプライベートIPアドレスのセグメントを指定しています。そのため、このインスタンスは直接インターネットにアクセスできません。
Instance02によって割り当てられているIPアドレスおよびインターネットにアクセスできないことを確認した結果は、この通りです。
IPアドレスとしてはサブネットにひも付いているCIDRから自動で割り当てられた192.168.0.81およびループバックIPアドレスの2つが設定されていますが、グローバルIPアドレスは設定されていません。またデフォルトルートが存在していますが、この構成ではインターネット上のサービスに通信できていないことを確認できます。
この状態からInstance02がインターネットを利用できるようにするには、Instance02が作成するパケットの送信元IPアドレスをNATでグローバルIPアドレスに変換する必要があります。VPC環境で変換するには、下記3点の対応が必要です。
以降は、VPC上のインスタンスがインターネットに通信するために必要なAWSの設定を簡単に紹介します。具体的な設定方法については、「Appendix」に記載するので、詳細が気になる方はぜひ、そちらもご参照ください。
「Elastic IPアドレス」とは、申請している間、変更されることなく固定的に利用できるグローバルIPアドレスのことです。このElastic IPアドレスを作成しInstance02に割り当てた結果は、下記の通りです。
Elastic IPアドレスにはグローバルIPアドレスとして「52.xx.116.3」が割り当てられており、それがインスタンスのパブリックIPv4アドレスにもなっていることを確認できます。
なお、このElastic IPアドレスはあくまでもNATで変換して利用するIPアドレスであり、下記のようにインスタンスに直接割り当てられるわけではありません。またElastic IPを割り当てるだけではNATは動作しないので、インターネットを利用できる状態にはなっていません。
本稿における「インターネットゲートウェイ」とはNAT機能を持ったルーターであり、AWSのリソースのことでもあります。インターネットゲートウェイをVPCに割り当てることで、そのVPCに含まれるインスタンスからのインターネット向け通信に対してNATによる変換が可能になります。
3つ目は、インターネット向け通信がインターネットゲートウェイに転送されるようにするルーティング制御の設定です。ルートテーブルはインスタンスではなくサブネットに割り当てる設定なので、Instance02が含まれるSubnet02に対して、デフォルトルート(0.0.0.0/0)のターゲット(宛先)をインターネットゲートウェイにしたルートを持つ、ルートテーブルを割り当てます。
これらの設定によってNATが動作するようになり、Instance02でインターネットアクセスが行えるようになります。
また「IPアドレス確認サービス」といった、送信元IPアドレスを確認できるサービスを利用すると、通信に利用しているIPアドレスがInstance02のプライベートIPアドレスではなくElastic IPアドレス「52.xx.116.3」になっており期待通りNATで変換されていることを確認できます。
本稿は、インターネットの通信方法、特にIPv4での利用にはアドレス枯渇からNATが必要になることを説明し、またAWSでのNATを確認しました。
第3回はVPC環境とオンプレミス環境をプライベートに接続する方法について説明します。
本稿における環境の作成手順について、第1回で作成した構成に追加する形で記載します。環境を作って動作を確認したい方は本手順を参考にしてください。
本稿で作成している構成は下図の通りです。
第1回の構成からの変更点は下記2点です。
VPCの設定画面の「Elastic IP」のページで「Elastic IPアドレスを割り当てる」ボタンをクリックします。
「Elastic IPアドレスを割り当てる」というページが表示されるので、「割り当て」ボタンをクリックしグローバルIPアドレスを取得します。
その結果、Elastic IPアドレスとして「52.xx.116.3」というグローバルIPアドレスが割り当てられました。
Elastic IPアドレスを選択した状態で右上のアクションボタンから「Elastic IPアドレスの関連付け」ボタンをクリックします。
表示される「Elastic IPアドレスの関連付け」というページで、Instance02のインスタンスID、プライベートIPアドレスを指定し「関連付ける」ボタンをクリックします。プライベートIPアドレスと1対1で割り当てる形で作るようになっており、NAT IPとして利用されることが推測できます。
Elastic IPアドレスがInstance02に正しく割り当てられたことを確認できます。
Instance02の詳細情報からもElastic IPアドレスが割り当てられていることを確認できます。
Elastic IPアドレスの割り当てが完了したので、NATを設定します。InternetGateway01の作成が第1回の環境構築で済ませている方は、ここは飛ばして「ルートテーブルを設定」から読んでください。
VPCのメニューにある「インターネットゲートウェイ」を選択し、画面右上の「インターネットゲートウェイの作成」ボタンをクリックします。
インターネットゲートウェイの名前として「InternetGateway01」と入力し、「インターネットゲートウェイの作成」ボタンをクリックします。
作成後、表示されるページの右上のアクションから「VPCにアタッチ」を選択します。
アタッチするVPCとして「VPC01」を選択した後、「インターネットゲートウェイのアタッチ」ボタンをクリックします。
作成したInternetGateway01がVPC01にアタッチされていることを確認できます。
Instance02のインターネット向け通信がInternetGateway01に転送されるようにルートテーブルを設定します。
VPCの設定画面の「ルートテーブル」のページで「ルートテーブルを作成」ボタンをクリックします。
名前は「RouteTable02」、VPCにInstance02が存在する「VPC01」を指定し、「ルートテーブルを作成」ボタンをクリックします。
「VPC01」にひも付くRouteTable02が作成されたことを確認できます。また画面下部のルートの情報によって、VPC01のCIDRとして指定している192.168.0.0/24のみが登録されていることが確認できます。このため、Subnet01(CIDR:192.168.0.0/26)上のインスタンスとも通信できます。
Instance02が属すSubnet02にこのルートテーブルを割り当てるために、画面下部の「サブネットの関連付け」のタブで画面右下の「サブネットの関連付けを編集」ボタンをクリックします。
「Subnet02」をチェックし「関連付けを保存」ボタンをクリックします。
RouteTable02にSubnet02の関連付けできました。
このRouteTable02にInternetGateway01向けのデフォルトルートを登録するために画面下部の「ルート」タブで画面右側の「ルートを編集」ボタンをクリックします。
「ルートを編集」のページでデフォルトルートをインターネットゲートウェイ向けに設定します。「ルートを追加」ボタンをクリックするとルートを追加できるようになるので、送信先にデフォルトルート「0.0.0.0/0」、ターゲットに「InternetGateway01」を指定し、「変更を保存」ボタンをクリックします。
RouteTable2にInternetGateway01向けのデフォルトルートが追加されたことを確認できます。
これで環境を構築できました。
Instance02がインターネットにアクセスできることを確認します。今回は「AWS CloudShell」を利用してインスタンスにアクセスします。なお、CloudShellはVPCの外側のノードなのでインターネット経由の接続と同様にグローバルIPアドレスに対してアクセスする必要があります。
「AWSマネジメントコンソール」の画面右上のCloudShellのアイコンをクリックします。
CloudShellが立ち上がってきます。利用できるようになるまで少し時間がかかります。
まずはVPC管理アクセス用のInstance01のグローバルIP(18.xx.73.63)に対してSSHでログインします。鍵認証なので、事前に鍵を用意しておきます。そこからさらにInstance02(192.168.0.81)にSSHでアクセスします。
Instance02にアクセスできたので、インターネット上のサービスにPingコマンドを実行し、アクセスできること、またInstance02に割り当てたElastic IPアドレスにNATされて通信されていることを確認します。
Copyright © ITmedia, Inc. All Rights Reserved.