文書の過去の版を表示しています。
名前空間の操作,その7: ネットワーク名前空間
Linux 名前空間について最後に見てからしばらく時間が経った.このシリーズには最後に埋めなければいけない欠けたピースがあった.それはネットワーク名前空間である.名前が示すように,ネットワーク名前空間はネットワークのデバイス,アドレス,ポート,ルーティング,ファイアウォールのルール等を分割する.本質的に,稼働中の単一のカーネルインスタンス内でネットワークを仮想化する.ネットワーク名前空間は 2.6.24 で導入された.ほとんど丁度 5 年前の事である.それ以来,この機能は多数のデベロッパーからは大部分無視されてきたように見える.
基本的なネットワーク名前空間の管理
他のネットワーク名前空間と同様に,ネットワーク名前空間は clone() システムコールのフラグ CLONE_NEWNET を与えることによって作成する.コマンドラインからは,ip コマンドを使ってセットアップを行い,ネットワーク名前空間を扱うのが便利である.例えば,
# ip netns add netns1
このコマンドは netns1 という名前のネットワーク名前空間を新たに作る.ip コマンドがネットワーク名前空間を作成した時,その名前空間に対する bind mount を /var/run/netns 以下に作成する.これにより,名前空間内でプロセスが実行されていない場合でもネットワーク名前空間が持続でき,名前空間の操作もそれを通して可能になる.ネットワーク名前空間は,使用可能になるまでにかなりの設定が必要となるので,この機能はシステム管理者にとっては重宝する.
“ip netns exec” コマンドで名前空間内でネットワーク管理コマンドを実行可能である.
# ip netns exec netns1 ip link list 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
このコマンドは名前空間内のインターフェースを表示する.
# ip netns delete netns1
このコマンドは指定したネットワーク名前空間を参照している bind mount を除去する.しかし,名前空間自身は,内部でプロセスが動いている限りは持続する.