2016-06-29 15 views
10

私は、ネームスペースを使用して、サーバー上のいくつかの物理インターフェイスを分離しています。ルーティングは完全に機能します。 また、/ etc/netns /に各ネームスペースのフォルダがあります。 /etc/netns/namespaceA/resolv.confを実行すると、DNSも正常に動作します。dhclientを名前空間に対応させるにはどうすればいいですか?

dhclientでDHCPを使用する場合に問題が発生します。 名前空間内からdhclientを実行していますが、このエラーが発生しています。

(namespaceA)[email protected]:~#dhclient 
RTNETLINK answers: File exists 
mv: cannot move '/etc/resolv.conf.dhclient-new.2740' to '/etc/resolv.conf': Device or resource busy 

私は/etc/resolvconf/update.d/libcでMVが問題を引き起こす可能性MVが含まれていることが分かりました。

どのようにしてdhclientを名前空間に対応させることができますか?

答えて

6

私は自分自身で問題を調査しました。

何が起こるかは、あなたがネットワークの名前空間を作成するときに明示的/etc/netns/<namespace_name>/resolv.confを作成しない限り、あなたは内部ネットワークの名前空間を見上げたとき/etc/resolv.confに自動的にマウントをバインドする、ホストマシンの/etc/resolv.confを参照してくださいということです。したがって、単にそのパスを作成するだけで、ホストのresolv.confはネットワークネームスペース上でもう可視になりません。それには独自のresolv.confがあります。

ip netnsmanual pageがこれを説明する:ネットワークの名前空間を認識しているアプリケーションの場合

、慣例 はその後に/最初の の/ etc/netns/NAMEにグローバルネットワーク構成ファイルを探すことです/等/。たとえば、ネットワーク名前空間に別の バージョンの/etc/resolv.confを使用して、 のVPNを隔離する場合は、/etc/netns/myvpn/resolv.confという名前を付けます。

Ipのnetns幹部は マウント名前空間を作成することで、ネットワークの名前空間を知らないアプリケーションのための 規則を提出し、/ etcにある伝統的な場所にネットワークごとに名前空間 のconfigureのすべてのファイルをマウント結合し、この構成の処理を自動化します。

限り/etc/netns/<namespace_name>/resolv.confが存在する場合resolv.confを更新するよう、dhclientは、箱から出してネットワークの名前空間では動作しません。それが存在しない場合(一方で、それはホストマシンのresolv.confを上書きしますそれは利用可能な唯一のものだからですが、それは本当に望ましいことではありません)。上の質問のエラーが示すとおり、dhclient/etc/resolv.conf.dhclient-new.2740に新しいネームサーバーの詳細を持つ一時ファイルを作成し、/etc/resolv.confという名前に変更しようとします。 /etc/resolv.confはすでにバインドされており、明らかにmvはこのトリックを実行できないため、エラーが発生します。

dhclientをネットワークネームスペースで使用するには、/sbin/dhclient-scriptを変更する必要があります。 私は、この削除:

mv -f $new_resolv_conf /etc/resolv.conf 

をし、それを置き換える:それ以外の場合は、 dhcpcdが正しく、この仕事をするようだ

cat $new_resolv_conf > /etc/resolv.conf 
rm -f $new_resolv_conf 

+0

これはすばらしい回避策です。 mvをcatに変更する必要があるセクションが2つあることに注意してください。 mvが何をしているのだろうか。最初にファイルを削除していますか? – 0xAffe

関連する問題