Network Namespace (netns)

Linuxカーネルの機能で、プロセスグループごとに独立したネットワークスタックを持たせる分離技術。カーネル内部では各namespaceインスタンスがstruct netで表現される。プロセス・ファイルシステム・IPCなどを分離する他のnamespace種別と並ぶ、Linux namespaces機構の一種。cgroups(control groups)によるリソース制御と組み合わせてLXCなどの軽量仮想化の基盤にもなっている。 #network #linux #kernel

namespaceごとに独立して管理されるもの

  • ネットワークインターフェース(lo, eth0など)
  • ルーティングテーブル(IPv4/IPv6)
  • iptables/nftablesのファイアウォール設定
  • netfilterの接続追跡状態
  • Unixドメインソケットの名前空間
  • ポート番号空間(0-65535)
  • /proc/net/以下のビュー

初期化時にpernet_operationsフックを通じて、各サブシステムがper-namespace状態を初期化する。

管理コマンド: ip netns

ip netns add ns1                        # 名前空間を作成
ip netns exec ns1 <cmd>                  # 名前空間内でコマンド実行
ip link set <iface> netns ns1            # 既存インターフェースを移動
ip netns del ns1                         # 削除

veth pairによる接続

異なるnamespace同士やnamespaceとホストを繋ぐ標準的な手段がveth pair(仮想Ethernetペア)。片方に入れたフレームがもう片方から出てくる「パイプ」のように振る舞う。ペアの一端をnamespace Aに、もう一端をnamespace Bやホストに配置して接続する。実際に構築した例では、veth pairで複数のnamespaceをLinuxブリッジに接続した。

unprivileged user namespaceとの組み合わせ

unshare --user --map-root-user --netのようにuser namespaceと組み合わせることで、sudoなしでもnetwork namespaceを作成・操作できる。ただし作成したnamespaceはホストの実NICには触れられない。

出典

作成日時: 2026-08-15 08:49 / 更新日時: 2026-08-15 08:49