我安装了Ubuntu 11.10的盒子。并且该框配置为从dhcp获取IP和主机名。
我们在/etc/dhcp/dhclient-enter-hooks.d/文件夹中设置了脚本。但是这些脚本没有被调用/执行。我在另一个框中有类似的脚本,它安装了Ubuntu 10.04并且钩子脚本执行没有问题。一个区别是在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
答案 0 :(得分:3)
您的问题是NetworkManager。这就是正在执行dhclient,使用不同的配置文件而不执行任何挂钩。这是作为Ubuntu中的错误提交的:
https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/293139
当NetworkManager启动界面时,您可以将脚本放在/etc/NetworkManager/dispatcher.d中执行。在上面的错误中,有一个导出到这些脚本的变量列表。如果您不需要其中任何一个,并且只想在界面启动时执行某些操作,那么您应该已经足够了。
希望它有所帮助。
答案 1 :(得分: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
无论发生什么,这个想法都是将所有DNS请求发送到localhost,dnsmasq正在等待回答。现在所需要的只是tel dnsmasq在哪里可以找到真正的resolv.conf文件,因此它知道在哪里发送DNS请求它不知道的主机名。在/etc/dnsmasq.d中创建一个文件,比如说/etc/dnsmasq.d/upstream.conf并输入这行
resolv-file=/var/run/NetworkManager/resolv.conf
/var/run/NetworkManager/resolv.conf
是网络管理器存储通过DHCP接收的DNS信息的地方。现在,每次从DHCP服务器获取DNS信息时,您的dnsmasq服务器都会知道它们并相应地转发请求。
而且,你已经完成了。你唯一担心的是dnsmasq会让你失望。