Network Namespace
基本情報
ネットワーク名前空間は、Linuxカーネルの機能であり、各ネットワーク名前空間が独自のネットワーク構成、インターフェース、IPアドレス、ルーティングテーブル、およびファイアウォールルールを持つようにする分離を提供します。この分離は、コンテナ化などのさまざまなシナリオで有用であり、各コンテナが他のコンテナやホストシステムとは独立したネットワーク構成を持つ必要がある場合に役立ちます。
動作方法:
新しいネットワーク名前空間が作成されると、完全に分離されたネットワークスタックが開始され、ループバックインターフェース(lo)を除くネットワークインターフェースが存在しない状態となります。これにより、新しいネットワーク名前空間で実行されるプロセスは、デフォルトでは他の名前空間やホストシステムのプロセスと通信できません。
vethペアなどの仮想ネットワークインターフェースを作成し、ネットワーク名前空間間や名前空間とホストシステム間のネットワーク接続を確立できます。たとえば、vethペアの一方の端をコンテナのネットワーク名前空間に配置し、他方の端をブリッジまたはホスト名前空間の別のネットワークインターフェースに接続して、コンテナにネットワーク接続を提供できます。
名前空間内のネットワークインターフェースは、他の名前空間とは独立して、独自のIPアドレス、ルーティングテーブル、およびファイアウォールルールを持つことができます。これにより、異なるネットワーク名前空間のプロセスは、異なるネットワーク構成を持ち、別々のネットワークシステム上で実行されているかのように動作できます。
プロセスは、
setns()
システムコールを使用して名前空間間を移動したり、unshare()
またはCLONE_NEWNET
フラグを使用してclone()
システムコールを使用して新しい名前空間を作成したりすることができます。プロセスが新しい名前空間に移動したり、新しい名前空間を作成したりすると、その名前空間に関連付けられたネットワーク構成とインターフェースを使用し始めます。
Lab:
異なる名前空間を作成する
CLI
--mount-proc
パラメータを使用して/proc
ファイルシステムの新しいインスタンスをマウントすることで、新しいマウント名前空間がその名前空間固有のプロセス情報に正確で隔離されたビューを持つことが保証されます。
Docker
あなたのプロセスがどのネームスペースにあるかを確認します
すべてのネットワーク名前空間を見つける
```bash nsenter -n TARGET_PID --pid /bin/bash ``` また、**rootユーザーでないと他のプロセスの名前空間に入ることはできません**。そして、他の名前空間に**ディスクリプタ**(`/proc/self/ns/net`のような)を指すことなしに**入ることはできません**。
参考文献
Last updated