Min*_*nix 40 networking dhcp udhcpc busybox resolvconf
我得到了一个 mini 的文件linux,它可以直接启动到firefox. 它适用于它应该做的所有事情,只是我没有互联网连接。
我们在网络中有 3 个 DNS 服务器,它们都可以正常工作。我也可以ping通他们。但是当我尝试ping google.de或wget google.de我得到一个bad address错误。
nslookup google.de 出于某种原因工作。
我将问题追溯到我resolv.conf在启动系统上的内容与resolv.conf我放入.iso文件中的内容不同。
我尝试了解创建和修改resolv.conf. 我不太确定我是否掌握了所有内容,但我绝对没有在那里找到我的解决方案。
所以作为最后的努力,我尝试resolv.conf使用
:~# chattr +i /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,当重新构建并再次启动时,我的文件被重命名为resolv.conf~,取而代之的是一直困扰着我的同一个标准文件。
文件内容让我相信它是从网络本身获取信息的。.iso在没有互联网访问权限的情况下启动Virtualbox 时,我的文件将保持原样。
我试图/etc/dhcp/dhclient.conf通过删除domain-name-server和domain-name-search从request文件的一部分来改变不从网上获取信息。
不幸的是没有工作。
我没有安装 NetworkManager。ISO 基于 Ubuntu 14.04。
可能缺少重要信息。我很乐意提供它。
更新:
我想我找到了清除resolv.conf.
好像是 /usr/share/udhcpc/default.script
#!/bin/sh
# udhcpc script edited by Tim Riker <Tim@Rikers.org>
[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
RESOLV_CONF="/etc/resolv.conf"
[ - n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"
case "$1" in
deconfig)
/bin/ifconfig $interface 0.0.0.0
for i in /etc/ipdown.d/*; do
[ -e $i ] && . $i $interface
done
;;
renew|bound)
/bin/ifconfig $interface $ip $BROADCAST $NETMASK
if [ -n "$router" ] ; then
echo "deleting routers"
while route del default gw 0.0.0.0 dev $interface ; do
:
done
metric=0
for i in $router ; do
route add default gw $i dev $interface metric $((metric++))
done
fi
echo -n > $RESOLV_CONF # Start ----------------
[ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
for i in $dns ; do
echo adding dns $i
echo nameserver $i >> $RESOLV_CONF
done
for i in /etc/ipup.d/*; do
[ -e $i ] && . $i $interface $ip $dns
done # End ------------------
;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)
这是udhcpc程序的一部分。一个很小的 dhcp 客户端,它是busybox
将进一步调查。
更新2和解决方案:
我注释掉了这部分(#Start 到 #End),这似乎覆盖了/etc/resolv.conf文件,果然如此。那是罪魁祸首。所以一个晦涩的脚本造成了所有这些麻烦。
我更改了问题以反映实际需要知道什么才能解决我的问题,因此更容易找到有相同问题的人,因此我可以接受答案。
感谢您帮助解决问题。
kir*_*l-a 37
您不应该手动更新您的resolv.conf,因为所有更改都将被本地 DHCP 服务器提供的数据覆盖。如果您希望它是静态的,请运行sudo dpkg-reconfigure resolvconf并对动态更新回答“否”。如果您想在那里添加新条目,编辑/etc/resolvconf/resolv.conf.d/base并运行sudo resolvconf -u,它将附加您的条目和 DHCP 服务器的条目。
尝试编辑您/etc/network/interfaces的条目并在那里添加条目,例如
auto eth0
iface eth0 inet dhcp
dns-search google.com
dns-nameservers dnsserverip
Run Code Online (Sandbox Code Playgroud)
然后重新启动/etc/init.d/networking restart或sudo ifdown -a和sudo ifup -a
Ubuntu 16.04
如果您的服务器实例的网络接口由 DHCP 控制,则/etc/resolv.conf只要网络服务重新启动,dhclient 程序就会覆盖您的文件。
您可以通过编辑/etc/dhcp/dhclient.conf文件并为domain-name、domain-search和domain-name-servers添加“取代”语句来解决该问题,如下所示:
supersede domain-name "local.com";
supersede domain-search "local.com";
supersede domain-name-servers 192.168.56.103;
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,名称服务器位于“192.168.56.103”,域名为“local.com”
请注意,每一行都以分号结尾,域名用双引号括起来。
小智 5
我也遇到了这个。评论domain-name-server也没有解决我的问题。
另外,我没有使用resolvconf,只是简单的/etc/resolv.conf。
我没有尝试使用chattr +i锁定,resolv.conf因为它看起来太老套了。另外,我希望 Puppet 能够resolv.conf在必要时进行修改。
我发现的最佳解决方案覆盖了使用其记录的挂钩的默认行为dhclient。
/etc/dhcp/dhclient-enter-hooks.d/nodnsupdate使用以下内容创建一个新文件:
#!/bin/sh
make_resolv_conf() {
:
}
Run Code Online (Sandbox Code Playgroud)
然后使文件可执行:
chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate
Run Code Online (Sandbox Code Playgroud)
现在,当 dhclient 运行时(无论是重新启动还是手动运行sudo ifdown -a ; sudo ifup -a),它都会加载此脚本nodnsupdate。make_resolv_conf()该脚本覆盖了一个通常会覆盖的内部函数resolv.conf,而不执行任何操作。
这对我在 Ubuntu 12.04 上有用。
| 归档时间: |
|
| 查看次数: |
155474 次 |
| 最近记录: |