これまであまり物理的なネットワークに触れてこなかったエンジニアを対象に、AWSを用いてネットワークの基礎知識を解説する連載。初回は、基本的なIPネットワークの概念を解説し、Amazon VPCの操作手順を示す。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
クラウドや無線LANが当たり前になった昨今、以前はLANケーブルやアプライアンス、サーバなどで物理的に理解することができた「IPネットワーク」について、意識することが難しくなっています。一方で、IaaS(Infrastructure as a Service)やPaaS(Platform as a Service)などクラウドを使いこなす上では、ネットワークについて基本から分かっている必要があるにもかかわらず、あいまいなまま使っていて、障害やセキュリティ事故につながっているのではないでしょうか。
本連載では、これまであまり物理的なネットワークに触れてこなかったSEやサーバ管理者、情シスなどを対象に、クラウドサービスの例として「Amazon Web Services」(AWS)を用いてネットワークの基礎知識を解説します。
全7回を予定しており、各回でテーマを設け、そのテーマに合ったAWSのマネージドサービスを操作しながら、理解を深めます。
連載初回の本稿では、基本的なIPネットワークの概念を解説し、「Amazon Virtual Private Cloud」(VPC)の操作手順を示します。最後に、「Appendix」として環境構築の手順も記すので、必要な方はご参照ください。
ネットワークで通信するためにはルールを取り決める必要があります。このようなルールをネットワークの世界では「プロトコル(通信規約)」といいます。これまでにさまざまなプロトコルが作られていますが、その中で現在広く一般的に利用されるようになったものが「インターネットプロトコル(Internet Protocol)」略して「IP」です。このIPは、現在主にVersion 4の「IPv4」ですが、さらにそのアップデート版のVersion 6に当たる「IPv6」も利用されています。
皆さんは普段、物を送る際に相手の名前と住所を指定して送付していると思います。コンピュータの世界でもお互いに通信する際に相手の名前や場所を特定する情報が必要です。IPv4やIPv6で通信するために、コンピュータをはじめとする通信端末に割り当てる特定情報が「IPアドレス」です。
このIPアドレスは、IPv4では32bit、IPv6では128bitで構成されます。そのため、IPv4アドレスは232=42億9496万7296個、IPv6アドレスは2128=約3.4×1038個のアドレスが存在します。ただしbit(2進数)のままでは人には取り扱いにくいので、IPv4アドレスは8bitごとに10進数に変換した4つの数値(0〜255)を「.」(ピリオド)で分けた形、IPv6アドレスは16bitごとに16進数に変換した8つの数値(0〜FFFF)を:(コロン)で分けた形で表現されます。なおIPv6アドレスは、非常に長くなるので、1カ所のみですが0が続く箇所を「::」(コロン2つ)で省略できます。
以降、本稿ではIPv4について説明しますが、基本的な概念はIPv6も同様です。
なお、IPv4アドレスでは4つの10進数表記の1つ1つを「オクテット」、前から順に「第1オクテット」「第2オクテット」「第3オクテット」「第4オクテット」といいます。「192.168.1.10」の場合、「第1オクテットは192、第4オクテットは10」となります。
IPアドレスを複数の通信端末に異なる値を割り当てることで、各端末で通信相手を指定して通信できます。端末同士が直結されるようなネットワークや「ハブ」「スイッチ」といった集線装置を間に入れて数台をつなぐだけの非常に小規模なネットワークなら、これでも通信可能ですが、それ以上のネットワークでは相手の場所の特定が難しく現実的ではありません。
間に「ルーター」という中継装置を入れたネットワークを構築し、「ルーティング」処理をすることで端末間で通信できるようになります。
ルーティングでは、IPアドレスを単純な1つのアドレスと捉えるのではなく、前半を「ネットワーク部」、後半を「ホスト部」という2つの値に分けて考えます。また分ける箇所を指定するために「サブネットマスク」という値を利用します。
サブネットマスクはIPアドレス同様に32bitの値で、2進数表記では1の後に0が続く値です(※1)。IPアドレスのサブネットマスクの1に対応する部分がネットワーク部、0に対応する部分がホスト部となります。
※1:当初はIPアドレスの先頭3bitの値からクラスA〜Eとしてネットワークを分類していました(クラスフル)が、現在はサブネットマスクを用いて任意のサイズでネットワークを分類する方式(クラスレス)が利用されています。
このネットワーク部のアドレスのみ取り出し、ホスト部のbitを全て0にしたアドレスを「ネットワークアドレス」、また全て1にしたアドレスを「ブロードキャストアドレス」といいます。これらの値はそれぞれネットワーク(サブネット)を示すアドレス、ネットワーク内の全端末に送付される通信に使われるアドレスで、個々の端末に割り当てられるアドレスではありません。
例えば、「192.168.1.10」というIPアドレスがあり、このサブネットマスクを「255.255.255.0」とします。この場合、第1オクテットから第3オクテットまでがネットワーク部(ネットワークアドレスは「192.168.1.0」)、第4オクテットがホスト部(10)となります。ブロードキャストアドレスは「192.168.1.255」です。
ネットワーク部とホスト部の境目を示す値としてサブネットマスク以外に「プレフィックス」という値があります。プレフィックスはサブネットマスク中の1の個数をそのまま数値にしたものであり、IPアドレスに続けて「/」(スラッシュ)とプレフィックスを記載する形で表記します。「10.0.0.1」というIPアドレスのサブネットマスクが「255.0.0.0」の場合、255は2進数で1が8個続くので「10.0.0.1/8」と表記します。
各端末間で相手の位置が離れているような環境では、中継機器としてルーターを導入し、ルーティング処理で宛先ネットワークを特定して通信します。このためにルーターは「各ネットワーク(サブネット)がどのポート(インタフェース)の先、あるいは、どのネクストホップ(宛先の端末に通信するために次に送るルーターのことで、IPアドレスで学習します)の先にあるか」という情報をスタティック(静的=手動)に登録します。
あるいは、「ルーティングプロトコル」という機能によりダイナミック(動的=自動)に収集し、「ルーティングテーブル」という経路情報のリストを作成しておきます。
ルーターに「IPパケット」という、IPアドレスなどの通信情報と通信内容が組み合わさった通信情報が転送されてくると、宛先IPアドレスを確認し、ルーティングテーブルを基に転送先を決定して転送します。大規模なネットワーク環境では、多数のルーターによる、この処理によって、直結されていない端末同士で通信できるのです。
ただし大規模なネットワークでは、多数の経路情報を学習する必要が生じ、その管理が非常に大変です。そこで「CIDR(Classless Inter-Domain Routing)」という仕組みによって経路情報を集約し、少ない経路情報でのルーティングを可能にしています。具体的には、「192.168.1.0/24」「192.168.2.0/24」というサブネットが存在する場合、これを例えば「192.168.0.0/16」という1つの経路に集約することが可能です(※2)。
※2:192.168.3.0/24や192.168.128.0/17などの他のサブネットも含まれることになるので、経路を集約する際にはそのような存在しないサブネットの扱いに注意する必要があります。
これによって例えば「192.168.1.1」宛の通信は「192.168.0.0/16」と「192.168.1.0/24」という経路情報があった場合、どちらにもマッチしてしまうことになります。そこで、「どちらの経路を利用させるか」を一意に決められる必要が生じます。この選定ルールは非常に単純で、プレフィックスの数が大きい経路(この場合は192.168.1.0/24)が選択されます。この経路にひも付く宛先に基づいて次のルーター=ネクストホップにパケットが投げられます。このルールを「ロンゲストマッチ」といいます。
プレフィックスが0の経路は全てのbitが0となり「0.0.0.0/0」という経路になります。これは全てのアドレスにマッチするもののロンゲストマッチのルールから他にマッチする経路がなかった場合に利用される経路です。「デフォルトルート」といいます。
デフォルトルートの利用例として、端末が自身のネットワークに属さない宛先の端末と通信する際にまず転送する相手である「デフォルトゲートウェイ」があります。端末から全ての通信をこのデフォルトゲートウェイに転送させるように端末自身にデフォルトルートを記載することになります。デフォルトゲートウェイもルーターの一つです。
ここからは、AWSの環境でこれまでの内容を見ていきます。
AWSでは他の環境から分離しプライベートに利用できるコンピューティング環境としてAmazon VPCというIaaS環境を利用できます。この中に自由にネットワークを作成し、そこに「Amazon EC2」のインスタンスなどを立てて通信させることができます。そこで下記の環境で、EC2のインスタンス間で通信させます。
本稿の説明で用いる環境は下図のようになっています。
「VPC01」というVPCの中に「Subnet01」「Subnet02」という2つのサブネットを作成し、各サブネットにEC2のインスタンスを1つずつ立てています。割り当てるネットワークアドレス(CIDR)は、VPC「VPC01」には「192.168.0.0/24」、その中には2つのサブネットにはVPCのCIDRに含まれる範囲として、「Subnet01」には「192.168.0.0/26」を、「Subnet02」には「192.168.0.64/26」を割り当てています。
下記は「VPC01」の設定情報です。「IPv4 CIDR」という項目に「192.168.0.0/24」というセグメントを指定しています。
次にサブネット「Subnet01」「Subnet02」の設定情報です。どちらも「VPC01」内のサブネットとして作成しており、それぞれの「IPv4 CIDR」を「192.168.0.0/26」「192.168.0.64/26」に設定しています。
なお、どちらも利用可能なIPv4アドレスの数が「58」です。この理由は、「/26」のセグメントのためにホスト部は32 - 26 = 6bit、つまり26=64個のアドレスが存在しますが、ネットワークアドレスおよびブロードキャストアドレスとAWSで予約される3つのIPの計5個に加え、EC2インスタンスに1つアドレスが割り当てられているからです。
これらのサブネットに作成したEC2インスタンスの設定は下記の画面のようになります。
どちらも「VPC01」上のインスタンスで、それぞれ「Subnet01」「Subnet02」に展開されていることを確認できます。AWSではサブネットにひも付けることで、自動でIPアドレスが採番されるようになっており、それぞれ「192.168.0.62」(Subnet01のCIDR 192.168.0.0/26の中から採番)、「192.168.0.81」(Subnet02のCIDR 192.168.0.64/26の中から採番)が割り当てられていることを確認できます。
Copyright © ITmedia, Inc. All Rights Reserved.