每次启动时什么会覆盖 /etc/resolv.conf?

每次启动时什么会覆盖 /etc/resolv.conf?

我得到了迷你版的文件linux,可以直接启动到firefox.它可以完成它应该做的所有事情,只是我没有互联网连接。

我们的网络中有 3 个 DNS 服务器,全部正常工作。我也可以 ping 通他们。但是当我尝试这样做时ping google.dewget google.de我得到了一个bad address错误。

nslookup google.de由于某种原因起作用。

我跟踪问题到我的启动系统上的内容与我放入文件中resolv.conf的内容不一样。resolv.conf.iso

我尝试了解创建和修改resolv.conf.我不太确定我是否掌握了全部内容,但我绝对没有在那里找到我的解决方案。

因此,作为最后的努力,我尝试resolv.conf使用使文件不可变

:~# chattr +i /etc/resolv.conf

令我惊讶的是,当再次重建和启动时,我的文件被重命名为resolv.conf~,取而代之的是一直困扰着我的同一个标准文件。

文件内容让我相信它从网络本身获取信息。当在没有互联网访问的 Virtualbox 中启动时.iso,我的文件将保持原样。

我尝试通过删除文件的一部分来更改/etc/dhcp/dhclient.conf为不从网络获取信息。domain-name-serverdomain-name-searchrequest

不幸的是没有工作。

我没有安装 NetworkManager。该iso基于Ubuntu 14.04。

可能缺少重要信息。我很乐意提供它。

更新:

我想我找到了可以清除的文件resolv.conf

好像是/usr/share/udhcpc/default.script

#!/bin/sh

# udhcpc script edited by Tim Riker <[email protected]>

[ -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

这是计划的一部分udhcpc。一个小型 dhcp 客户端,它是busybox

将进一步调查。


更新2和解决方案:

我注释掉了该部分(#Start 到 #End),这似乎覆盖了文件/etc/resolv.conf,果然如此。这就是罪魁祸首。所以一个晦涩的脚本造成了所有这些麻烦。

我改变了问题来反映,实际上需要知道什么来解决我的问题,这样对于有同样问题的人来说会更容易找到,所以我可以接受答案。

感谢您在这里帮助解决问题。

答案1

  1. 您不应手动更新 DHCP resolv.conf,因为所有更改都将被本地 DHCP 服务器提供的数据覆盖。如果您希望它是静态的,请运行sudo dpkg-reconfigure resolvconf并对动态更新回答“否”。如果您想在其中添加新条目,请编辑/etc/resolvconf/resolv.conf.d/base并运行sudo resolvconf -u,它将附加您的条目​​和 DHCP 服务器的条目。

  2. 尝试编辑您的条目/etc/network/interfaces并在那里添加您的条目​​,例如

     auto eth0 
     iface eth0 inet dhcp 
     dns-search google.com 
     dns-nameservers dnsserverip 
    

然后重新启动/etc/init.d/networking restartsudo ifdown -asudo ifup -a

  1. 您的系统使用乌兹别克斯坦这是一个非常小的 DHCP 客户端程序。 udhcp 客户端与 DHCP 服务器协商租约,并在获得或丢失租约时通知一组脚本。您可以阅读它的用法这里或者仅编辑此脚本(正如您所做的那样)。

答案2

Ubuntu 16.04 如果服务器实例的网络接口由 DHCP 控制,则/etc/resolv.conf每当网络服务重新启动时 dhclient 程序都会覆盖您的文件。

/etc/dhcp/dhclient.conf您可以通过编辑文件并添加“取代”语句来解决问题域名,域名搜索域名服务器如下:

supersede domain-name "local.com";
supersede domain-search "local.com";
supersede domain-name-servers 192.168.56.103;

在这种特殊情况下,名称服务器位于“192.168.56.103”,域名为“local.com”

请注意,每行均以分号结尾,并且域名用双引号引起来。

答案3

我也遇到了这个。评论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() {
    :
}

然后使文件可执行:

chmod +x /etc/dhcp/dhclient-enter-hooks.d/nodnsupdate

现在,当 dhclient 运行时(无论是重新启动还是手动运行sudo ifdown -a ; sudo ifup -a),它都会加载此脚本nodnsupdate。该脚本覆盖了一个make_resolv_conf()通常会覆盖的内部函数resolv.conf,而不执行任何操作。

这对我在 Ubuntu 12.04 上有用。

答案4

我的 OVH 的 ubuntu 18.04 没有附带该/etc/network/interface文件。它使用 netplan 来管理 ips 和名称服务器。文件:/etc/netplan/50-cloud-init.yaml

# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        ens3:
            dhcp4: true
            match:
                macaddress: fa:16:3e:d8:f7:7b
            set-name: ens3
    version: 2

所以我按照它说的做了并创建了文件: /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

# network: {config: disabled}
network:
    ethernets:
        ens3:
            dhcp4: true
            match:
                macaddress: fa:16:3e:d8:f7:7b
            set-name: ens3
            nameservers:
                addresses:
                  - 1.1.1.1
                  - 1.0.0.1
                search: [mydomain.com]
    version: 2

然后我应用了设置netplan apply,重新启动,旧的设置仍然回来了。然后我检查ls -la /etc/resolv.conf并发现它软链接到:

/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

所以我删除了该文件,并创建了一个新文件。

rm -f /etc/resolv.conf  
{ echo "nameserver 1.1.1.1";
echo "nameserver 1.0.0.1;
echo "search mydomain.com"; } >  /etc/resolv.conf
chattr +i  /etc/resolv.conf
reboot  

重新启动后一切正常,我的文件仍然完好无损且未链接。chattr +i /etc/resolv.conf如果是软链接就不要这样做。首先将其删除。

相关内容