![見出し画像](https://assets.st-note.com/production/uploads/images/162219026/rectangle_large_type_2_d87bcc7b545ed81798ac02611a1afbc6.png?width=1200)
Linuxでネットワーク名前空間を作成する – 「ip netns add」と「ip -n link」コマンド
Kubernetesでnamespaceを作成する場合、kubectl create nsコマンドで簡単に作成できますが、Linuxの通常の設定で同じホスト内のネットワークを分離するためにはどうすればよいのか気になったので、まとめてみました。
Linuxでは、ネットワーク名前空間(Network Namespace)という仮想的なネットワーク環境を作成することで、システム内に別のネットワーク空間を作り、独立した通信環境を構築できます。ここでは、「家の中に新しい部屋を作る」イメージで、`ip netns add`と`ip -n link`コマンドの使い方をわかりやすく解説します。
1. `ip netns add tmp1` – 新しい部屋を作る
ip netns add tmp1
このコマンドの意味: `ip netns add tmp1`は、「tmp1」という名前の新しいネットワーク名前空間を作成するコマンドです。イメージとしては、家の中に新しい部屋「tmp1」を作るようなものです。
部屋の特性: この部屋は家の他の部屋や外部とは独立しており、作成しただけではどこともつながっていません。閉じられた空間として存在し、通信も行えません。
この段階で、`tmp1`という名前のネットワーク名前空間が作られましたが、まだ他と会話する手段はありません。この部屋の中にいても、他の部屋や外の世界とはつながっていない「孤立した空間」です。
2. `ip -n tmp1 link` – 部屋の中の通信手段を確認する
ip -n tmp1 link
このコマンドの意味: `ip -n tmp1 link`コマンドは、新しく作成した「tmp1」部屋の中にある接続を確認するものです。
表示される内容: 初期状態では、この部屋の中に「ループバックインターフェース(lo)」があるだけです。ループバックは、自分の中だけでデータを送り返すだけの機能なので、いわば「独り言」をしているような状態です。他の部屋や外と会話することはできません。
例え話で解説 – ただ部屋を作っただけでは会話できない
このコマンドで作った新しい部屋は、「閉ざされた空間」です。以下のようなイメージです。
新しい部屋(tmp1)を作成: `ip netns add tmp1`で作った部屋は、壁に囲まれ、他の部屋や外と会話できません。
独り言しかできない状態: `ip -n tmp1 link`で確認すると、ループバックインターフェース(lo)しかないので、部屋の中で「独り言を言っている」状態で、他の人や部屋には何も聞こえません。
つまり、名前空間`tmp1`を作っただけでは、周りとやり取りできる「通信ケーブル」がないため、他の部屋や外部との接続はできません。これは、ネットワーク名前空間を作った直後の初期状態です。
他の部屋や外とつなげる方法
もしこの部屋を他と接続し、会話をしたいなら、通信ケーブルや通路を作ることが必要です。具体的には、以下のような手順が考えられます。
部屋にケーブルを接続: この通信ケーブルを`tmp1`に接続することで、他の部屋や外とつながり、双方向の会話ができるようになります。
ip link add veth0 type veth peer name veth1
ip link set veth0 netns tmp1
2 部屋にケーブルを接続: この通信ケーブルをtmp1に接続することで、他の部屋や外とつながり、双方向の会話ができるようになります。
まとめ
`ip netns add`コマンドで新しい部屋(名前空間)を作成しても、初期状態では他の部屋や外部とつながっていない「孤立した空間」で、独り言を言うしかできません。他と通信したい場合は、通信ケーブル(vethペア)を追加して部屋に接続する必要があります。
このように、Linuxで名前空間を使って仮想的にネットワークを分離することで、テスト環境や分離された通信環境を作り、必要に応じて他と接続できるようになります。