第1章 ネットワークの概要
1.1. ネットワークの仕組み
ネットワーク という用語は、コンピューター間で情報を移動させる行為のことを指します。最も基本的なレベルでは、ネットワークインターフェースカード (NIC) がインストールされた 2 つのマシンをケーブルでつなぐことで達成されます。
OSI ネットワークモデルでは、これはレイヤー 1 に相当します。
3 台以上のコンピューターを使用する場合には、スイッチというデバイスを追加してこの構成をスケールアウトする必要があります。スイッチとは、追加のマシンを結線するための複数のイーサネットポートがついた専用デバイスです。スイッチを追加してマシンを結線すると、ローカルエリアネットワーク (LAN) と呼ばれるネットワークが完成します。
スイッチについての内容は、OSI モデルのレイヤー 2 が対象で、下層のレイヤー 1 よりもインテリジェントな機能が適用されます。各 NIC には、ハードウェアごとに一意に割り当てられる MAC アドレス番号があり、この番号を使用することにより、複数のマシンを同じスイッチに結線して、相互に認識できるようになります。スイッチは、どの MAC アドレスがどのポートにプラグインされるかのリストが管理するので、コンピューター間でデータ送信を試みると、スイッチはそれらの両方のコンピューターがどこに配置されているかを認識し、MAC アドレスからポートへのマッピングを記録する Forwarding Information Base (FIB) のエントリーを調整します。
1.2. 2 つの LAN の接続
2 つの別個のスイッチ上で稼働する LAN が 1 つずつあり、このスイッチ間で情報を共有させる場合には、オプションが 2 種類あります。
- 1 番目のオプション: トランクケーブルと呼ばれるケーブルを使用して、2 つのスイッチを接続します。この接続を機能させるには、ネットワークケーブルを 1 本用意して、各スイッチのポートに差し込んでから、それらのポートをトランクポートとして設定します。基本的には、これで 2 つのスイッチが 1 つの大きな論理スイッチとして設定され、接続されているコンピューター同士が相互に検出できるようになります。このオプションの難点はスケーラビリティーで、オーバーヘッドの問題が発生することなくデイジーチェーン接続できるスイッチの数は限られています。
- 2 番目のオプション: ルーターと呼ばれるデバイスを購入して、各スイッチからケーブルを接続します。これにより、ルーターは両スイッチで設定したネットワークを認識するようになります。スイッチに差し込んだケーブルの両端には、ネットワークのデフォルトゲートウェイとして知られる IP アドレスが割り当てられます。デフォルトゲートウェイの「デフォルト」とは、宛先のマシンが同じ LAN 上にないことが明らかな場合のトラフィックの送信先のことです。各コンピューターにデフォルトゲートウェイを設定することで、トラフィック送信のために、他のネットワーク上にある全コンピューターを認識する必要がなくなります。これで、デフォルトゲートウェイのみにトラフィックが送信されるようになり、そこからの処理はルーターが行うようにします。ルーターは、どのネットワークがどのインターフェースに存在するかを把握しているため、指定の宛先に、問題なくパケットを送信することができます。ルーティングは、IP アドレスやサブネットなどの一般的に知られている概念と同様に、OSI モデルのレイヤー 3 で機能します。
この概念は、インターネット自体の仕組みと同じです。さまざまな組織で稼働する多数の個別ネットワークはすべて、スイッチやルーターを使用して相互に接続しています。適切なデフォルトゲートウェイを辿ることで、最終的にトラフィックは適切な宛先に到着します。
1.2.1. VLAN
VLAN により、同じスイッチ上で実行されるコンピューターのネットワークトラフィックを分割することができます。言い換えると、別のネットワークのメンバーであるポートを設定することで、スイッチを論理的に分割することができます。つまり、セキュリティー上の理由別にトラフィックを分割できる小規模な LAN ということになります。たとえば、このポートがスイッチに合計で 24 個ある場合に、ポート 1-6 は VLAN200
に所属し、ポート 7-18 は VLAN201
に所属するなどと分けることができます。ここで、VLAN200
に接続されているコンピューターは、VLAN201
のコンピューターと完全に分割でき、直接通信できなくなります。任意で、2 つの別個の物理スイッチであるかのように、トラフィックをルーター経由で転送させるようにすることも可能です (このように考えると便利です)。このような場合には、VLAN 同士での通信の制御にファイアウォールも便利になります。
1.2.2. ファイアウォール
ファイアウォールは、IP ルーティングと同じ OSI レイヤーで動作しますが、TCP/UDP ポート番号に基づいてトラフィックを管理する際にはレイヤー 4 でも機能します。多くの場合、ファイアウォールはルーターと同じネットワークセグメントに存在し、全ネットワーク間で移動するトラフィックを制御します。そのためには、ファイアウォールが、ネットワークに出入りできるトラフィックを決定する事前定義済みのルールに基づいて制御を行います。これらのルールは粒度を細かくすることが可能です。以下に例を示します。
「VLAN200
のサーバーは、Web (HTTP) トラフィックを一方向のみに転送している場合に、木曜の午後のみ、VLAN201
のコンピューターにだけ通信できるものとする」といった設定が可能です。
このようなルールを強化するために、一部のファイアウォールは、レイヤー 5 から 7 でディープパケットインスペクション (DPI) も実行し、パケットのコンテンツを検証して、パケットの実際の内容がパケットが主張する内容と同じであることを確認します。ハッカーは、トラフィックを実際の内容とは別のものとして転送して、密かにデータを抜き出すことが知られているため、DPI はこのような脅威を軽減する手段の 1 つとなっています。
1.3. OpenStack のネットワーク
OpenStack では、これと同じ概念が適用されており、ソフトウェア定義ネットワーク (SDN) として知られています。仮想スイッチ (Open vSwitch を使用) とルーター (l3-agent
) により、インスタンスは相互に通信することができます。また、物理ネットワークを使用した外部との通信を許可することも可能です。Open vSwitch のブリッジは、仮想ポートをインスタンスに割り当て、送受信トラフィックを物理ネットワークに橋渡しします。
1.4. 高度な OpenStack Networking の概念
1.4.1. レイヤー 3 高可用性
OpenStack Networking は、仮想ネットワークコンポーネントをホストする機能に特化した物理サーバーである中央ネットワークノードで仮想ルーターをホストします。これらの仮想ルーターは、仮想マシンの送受信トラフィックを誘導するため、環境の接続性を維持するのに不可欠です。物理サーバーは多くの理由からオフラインになる可能性があるため (またはオフラインになるため)、ネットワークノードがオフラインになると仮想マシンが停止してしまう可能性が高くなります。
OpenStack Networking は、このようなリスクを軽減するため レイヤー 3 の高可用性 (L3 HA) を使用し、業界標準の VRRP を実装して仮想ルーターと Floating IP アドレスを保護します。L3 HA では、テナントの仮想ルーターが複数の物理ネットワークノードに無作為に割り当てられ、1 つはアクティブなルーターとして指定され、残りはスタンバイの役割を果たし、アクティブなルーターをホストするネットワークノードがオフラインになった場合にすぐに引き継げるようにします。
「レイヤー 3」は、OSI モデルにおいてこの機能が動作する層で、ルーティングおよび IP アドレス指定の保護に役立ちます。
詳しい情報は、「レイヤー 3 の高可用性」の章を参照してください。
1.4.2. HAproxy
HAProxy は、高可用性 (HA) ソリューションの一環として、すべての利用可能なコントローラー間の接続を分散する、組み込みのロードバランサーです (LBaaS とは異なります)。HAProxy は、各サービスに割り当てられる UDP/TCP ポート番号に基づいているため、レイヤー 4 で動作します。VRRP が、接続の最初の送信先となる HAProxy インスタンスを決定してから、HAProxy がバックエンド上のサーバーへの接続を分散します。この設定は、次に説明する LBaaS と対照的な高可用性のロードバランシングと考えることができます。
1.4.3. Load Balancing-as-a-Service (LBaaS)
Load Balancing-as-a-Service (LBaaS) により、OpenStack Networking は、指定のインスタンス間で受信ネットワーク要求を均等に分散できるようになります。このため、インスタンス間のワークロード共有が予測可能となり、システムリソースのより効率的に使用することができます。受信要求は、以下の負荷分散メソッドのいずれかを使用して分散されます。
- ラウンドロビン: 複数のインスタンス間で要求を均等にローテーションします。
- 送信元 IP アドレス: 同じ送信元 IP アドレスからの要求は常に一定のインスタンスへ送信されます。
- 最小コネクション: アクティブな接続が最も少ないインスタンスに要求が割り当てられます。
詳しい情報は、「Load Balancing-as-a-Service (LBaaS)」の設定 の章を参照してください。
1.4.4. IPv6
OpenStack Networking には、テナントネットワークでの IPv6 のサポートが含まれており、IPv6 アドレスを仮想マシンに動的に割り当てることができます。また、仮想マシンが既存の DHCP インフラストラクチャーから IPv6 アドレスを取得できるように、OpenStack Networking は物理ルーター上で SLAAC と統合することができます。
詳しい情報は、「IPv6 を使用したテナントネットワーク」を参照してください。
1.4.5. CIDR 形式の使用
一般的には、IP アドレスはサブネットのブロックにまず割り当てられます。たとえば、IP アドレスの範囲が 192.168.100.0 - 192.168.100.255
で、サブネットマスクが 255.555.255.0
の場合には、IP アドレス 254
個分を割り当てることができます (最初と最後のアドレスは予約されています)。
これらのサブネットは、複数の方法で表現することができます。
一般的な使用法: サブネットアドレスは一般的に、サブネットマスクとネットワークアドレスを使用して表示されます。例を以下に示します。
- ネットワークアドレス: 192.168.100.0
- サブネットマスク: 255.255.255.0
- CIDR 形式の使用: この形式は、サブネットマスクをアクティブな合計ビット数に短縮します。たとえば、
192.168.100.0/24
では、/24
は255.255.255.0
の略式表現で、バイナリーに変換した際に反転したビット合計数のことを指します。たとえば、CIDR 形式はNETMASK
の値ではなくifcfg-xxx
スクリプトで使用することができます。
#NETMASK=255.255.255.0 PREFIX=24
Comments