ネットワーク名前空間

ネットワーク名前空間

名前空間は、特定の ID 集合に範囲を絞る方法です。名前空間を使うと、名前空間が異なれば同じ ID を何回も使用できます。また、特定のプロセスに見える ID 集合を限定することもできます。

例えば、 Linux は、他にもありますが、ネットワークとプロセスの名前空間を提供しています。プロセスがプロセス名前空間内で実行されている場合、そのプロセスには同じ名前空間内の他のプロセスだけが見え、通信できるのも名前空間内のプロセスだけです。そのため、あるプロセス名前空間内のシェルで ps waux を実行すると、同じ名前空間内の他のプロセスだけが表示されます。

Linux 名前空間

ネットワーク名前空間の場合、範囲が限定される ‘ID’ (識別子) はネットワークデバイスになります。名前空間には、 eth0 のようなネットワークデバイスが存在します。 Linux はデフォルトネットワーク名前空間で開始し、オペレーティングシステムが何か特別なことをしない限り、すべてのネットワークデバイスはデフォルトネットワーク名前空間にロードされます。しかし、デフォルト以外の名前空間をさらに作成することができ、その名前空間内に新しいデバイスを作成したり、ある名前空間にすでに存在するデバイスを別の名前空間に移動できます。

各々のネットワーク名前空間は独自のルーティングテーブルも持ちます。実際のところ、これが名前空間が存在する主要な理由です。ルーティングテーブルは宛先 IP アドレスをキーとして検索が行われるので、ネットワーク名前空間は、同じ宛先 IP アドレスに時と場合に応じて異なる意味を持たせたい場合に必要となります。これは、OpenStack Networking が異なる仮想ネットワークで IP アドレス重複を許容する機能を実現する際に必要となる機能なのです。

各々のネットワーク名前空間は独自の iptables 集合 (IPv4 と IPv6 の両方) を持ちます。したがって、別の名前空間では、異なるルーティングだけでなく、同じ IP アドレスのフローに対して異なるセキュリティーを適用できます。

任意の Linux プロセスを特定のネットワーク名前空間で実行できます。デフォルトでは、実行される名前空間は親プロセスから継承されますが、適切な権限を持ったプロセスであれば自分自身を別の名前空間に切り替えることができます。実際のところは、 ip netns exec NETNS COMMAND... によるプロセス起動を使うのがほとんどです。このコマンドは NETNS という名前の名前空間で COMMAND を実行します。このようなプロセスが IP アドレス A.B.C.D にメッセージを送信したとすると、名前空間の影響で A.B.C.D は名前空間内のルーティングテーブルを対象に検索が行われ、そのメッセージが送信されるネットワークデバイスが決定されます。

仮想ルーティング & フォワーディング (VRF)

仮想ルーティング & フォワーディングは、同時に同じルーターにルーティングテーブルのインスタンスを複数保持できる IP 技術です。上で説明したネットワーク名前空間機能の別名です。

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.