0

Ubuntu 11.10 がインストールされたボックスがあります。ボックスは、dhcp から IP とホスト名を取得するように構成されました。

/etc/dhcp/dhclient-enter-hooks.d/ フォルダーにスクリプトを設定しました。しかし、これらのスクリプトは呼び出されたり実行されたりしませんでした。Ubuntu 10.04 がインストールされている別のボックスに同様のスクリプトがあり、フック スクリプトは問題なく実行されます。1 つの違いは、11.10 ボックスに NetworkManager がインストールされていることです。

# ps -ef | grep dhclient
root       746   695  0 03:52 ?        00:00:00 /sbin/dhclient -d -4 -sf /usr/lib/NetworkManager/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhcp/dhclient-559273da-a027-458e-b124-bdbb4976ee17-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0

/etc/dhcp/dhclient-enter-hooks.d のスクリプトが実行されていないことをどのようにテストしましたか? /etc/dhcp/dhclient-enter-hooks.d に以下のコードを持つ単純なスクリプト「mytest」を配置しました。ファイル /tmp/enter-hook.out は生成されませんでした。

#!/bin/sh
echo "this is test file to test dhclient-enter-hook" > /tmp/enter-hook.out

/etc/network/interfaces のスニップ

# cat /etc/network/interfaces 
auto lo
iface lo inet loopback

auto eth0 inet dhcp
4

2 に答える 2

3

手遅れで、他の手段で問題を解決したのかもしれません。とにかく、私は同じ問題の影響を受けているので、私は声を上げたいと思いました.

問題は NetworkManager です。それが、別の構成ファイルを使用し、フックを実行せずに dhclient を実行していることです。これは、Ubuntu のバグとして報告されています。

https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/293139

/etc/NetworkManager/dispatcher.d にスクリプトを配置して、NetworkManager がインターフェースを起動したときに実行することができます。上記のバグには、これらのスクリプトにエクスポートされた変数のリストがあります。それらのいずれも必要とせず、インターフェイスの開始時に何かを実行したいだけの場合は、これで十分です。

それが役に立てば幸い。

于 2012-11-16T09:24:50.717 に答える
0

私は数分前まで同じ問題を抱えていたので、dispatcher.d スクリプト パスを使用することにしました。そこで、次のスクリプトを作成して /etc/NetworkManager/dispatcher.d/99resolv.conf.dhclient に配置しました。

#!/bin/sh -e
# Script to dispatch NetworkManager events
# It overwrites /etc/resolv.conf with the DNS of preference
# See NetworkManager(8) for further documentation of the dispatcher events.

sleep 3
rm -f /etc/resolv.conf && echo nameserver 127.0.0.1 > /etc/resolv.conf
service dnsmasq reload

アイデアは、何が起こっても、dnsmasq が応答を待っている localhost にすべての DNS 要求を送信することです。ここで必要なのは、実際の resolv.conf ファイルを見つける場所を tel dnsmasq にすることだけです。これにより、不明なホスト名に対する DNS 要求を送信する場所がわかります。/etc/dnsmasq.d にファイルを作成し、たとえば /etc/dnsmasq.d/upstream.conf に次の行を入れます。

resolv-file=/var/run/NetworkManager/resolv.conf

/var/run/NetworkManager/resolv.confNetwork Manager が DHCP 経由で受信した DNS 情報を保存する場所です。DHCPサーバーからDNS情報を取得するたびに、dnsmasqサーバーはそれらについて認識し、それに応じてリクエストを転送します.

そして、あなたは終わった。唯一の心配は、dnsmasq が失敗した場合です。

于 2014-12-09T21:04:21.247 に答える