各ネットワーク名前空間に個別のDNSを構成する

各ネットワーク名前空間に個別のDNSを構成する

Linuxシステム(カーネルバージョン3.10)に複数のネットワークネームスペースを設定し、各ネットワークネームスペースが一意のDNS設定を持つように構成しようとしています。

resolv.conf各ディレクトリにファイルを作成したので、/etc/netns/[namespace]システムは次のように動作するようになりました。

bashコマンドラインから特定のネットワークネームスペースに移動するコンテキストを使用するたびに、nsenter --net=/run/netns/[namespace name]コマンドラインから開始されたすべてのプロセス(nslookup、pingなど)が一致を使用して設定されたDNS設定で実行されることを望みます/etc/netns/[namespace name]/resolv.conf

次のようにコマンドを実行すると:

 "ip netns exec [namespace name] [command]"

次に、名前空間のDNS設定を適用します。

ただし、「ip netns exec」なしでコマンドを実行すると、/etc/resolv.conf「netns get cur」を実行すると、コンテキストが目的のネットワーク名前空間に設定されていることを示していますが、DNS設定はここから取得されます。

適切なネットワーク名前空間のコンテキストでこれを試しましたが、mount --bind /etc/netns/[namespace name]/resolv.conf /etc/resolv.confこれはそのネットワーク名前空間のコンテキストではなくシステム全体にマウントを適用します。

私はマウントネームスペースの使用が役に立つと思ったので、マウントネームスペースのマニュアルページを読んでみましたが、短い作業時間内に何も得られませんでした。

これを達成する簡単でエレガントな方法はありますか?

ソリューションの助けやご案内をいただきありがとうございます!

ベストアンサー1

解決策

usingの代わりにip netns execwithを使用できます。つまり:bashnsenter

ip netns exec [namespace name] bash

これにより、ネームスペース固有のネットワーク構成ファイルは、他のセッションに影響を与えることなく、デフォルト(グローバル)の場所に自動的にバインドインストールされるインタラクティブシェルセッションに入ることができます。

説明する

以下は から抜粋したものです。ip netnsマニュアルページ:

ネットワークネームスペースを認識するアプリケーションの場合は、まず**/etc/netns/**NAME/でグローバルネットワーク構成ファイルを見つけてから/など/。たとえば、異なるバージョンの/etc/resolv.confVPNを分離するために使用されるネットワーク名前空間の場合は、名前を指定できます。/etc/netns/myvpn/resolv.conf

IP netnsの実行この設定はインストールネームスペースを作成し、すべてのネットワーク固有のネームスペース設定ファイルを/ etcの既存の場所にバインドマウントすることによって自動的に処理され、ネットワークネームスペース対応アプリケーションのファイルルールは自動的に処理されます。

ネットワーク名前空間の違いに特に注意してください。知っているアプリケーションとネットワークの名前空間全く知らないアプリ。

これnsenterマニュアルページ一方、これらの区別への言及はないようです(特に「aware」、「resolv」、「.conf」、および「/ etc」文字列を検索しましたが、結果は見つかりませんでした)。これはnsenter、ユーティリティが名前空間を認識しないアプリケーションに対して同じタイプの自動処理を実行しないことを示すようです。

追加コメント

またネットワークネームスペース、あなたも見たいかもしれませんユーザーネームスペースそしてマウントネームスペース。 DNS以外の追加の分離が必要な場合は、コンテナ化を検討することもできます。LXCコンテナルーストアバウト、または完全な仮想マシンでもかまいません。

おすすめ記事