web-dev-qa-db-ja.com

すべての起動時に/etc/resolv.confを上書きするものは何ですか?

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

驚いたことに、再構築して再起動すると、ファイルの名前がresolv.conf~に変更され、その場所に、私を悩ませてきた同じ標準ファイルがありました。

ファイルの内容から、ネットワーク自体から情報を取得していると思います。インターネットにアクセスせずにVirtualboxで.isoを起動すると、ファイルがそのまま保持されます。

ファイルのrequest部分から/etc/dhcp/dhclient.confdomain-name-serverを削除して、ネットから情報を取得しないようにdomain-name-searchを変更してみました。

残念ながら動作しませんでした。

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プログラムの一部です。 busyboxの一部である小さなdhcpクライアント

さらに調査します。


UPDATE2とソリューション:

私は一部をコメントアウトしました(#Startから#End)。これは/etc/resolv.confファイルを上書きするようで、確かに十分です。それが犯人だった。したがって、あいまいなスクリプトがこの問題をすべて引き起こしました。

問題を解決するために実際に何を知る必要があるかを反映するように質問を変更しました。これにより、同じ問題を持つ人々が見つけやすくなり、答えを受け入れることができます。

ここで物事を理解する上で助けてくれてありがとう。

29
Minix

1)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 restartまたはSudo ifdown -aおよびSudo ifup -aを再起動します

3)システムで dhcp を使用しています。これは非常に小さなDHCPクライアントプログラムです。 udhcpクライアントはDHCPサーバーとリースをネゴシエートし、リースが取得または失われたときにスクリプトのセットを通知します。あなたはそれの使用法について読むことができます ここ または単にあなたがしたようにこのスクリプトを編集してください。

27
kirill-a

Ubuntu 16.04サーバーインスタンスのネットワークインターフェースがDHCPによって制御されている場合、ネットワークサービスが再起動されるたびに、dhclientプログラムは/etc/resolv.confファイルを上書きします。

この問題を解決するには、/etc/dhcp/dhclient.confファイルを編集し、domain-namedomain-searchおよびdomain-nameの「supersede」ステートメントを追加します。 -serversは次のとおりです。

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

この特定のケースでは、ネームサーバーは「192.168.56.103」にあり、ドメイン名は「local.com」です。

各行はセミコロンで終了し、ドメイン名は二重引用符で囲まれていることに注意してください。

5
Sand1512

私もこれに遭遇しました。 _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。このスクリプトは、通常_resolv.conf_を上書きするmake_resolv_conf()という内部関数をオーバーライドし、代わりに何もしません。

これは私にとってUbuntu 12.04で機能しました。

4
richardkmiller

resolv.confのDNS関連の変更を永続的にするには、dhclient.confという名前のDHCP構成ファイルを変更する必要があります。このファイルは/etc/dhcp/dhclient.confにあります。

ファイルを編集用に開きます(Sudoを使用することを忘れないでください)。次のような行が表示されます。

#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;

上記の「#」を削除して、必要なドメイン名またはドメイン名サーバーを使用します。それを保存。 DNS関連の変更は永続的です。

クレジットは次の場所に移動します https://itsfoss.com/resolvconf-permanent-ubuntu/

1
MAChitgarha

このディレクトリに移動します:

  cd /etc/resolvconf/resolv.conf.d

Headという名前のファイルを開き、そこにDNS IPまたは名前を入力します。 tailという名前のファイルを開き、そこにドメインを配置します。リブート。

0
user245423

Ubuntu 18.04ではNetworkManagerを使用します。 「resolv.conf」ファイルを削除して、NetworkManagerにファイルを生成させる必要があります。

ターミナルでファイルを削除するには、Sudo rm -f /etc/resolv.conf;これによりファイルが削除されます。

システムを再起動すると、NetworkManagerがresolv.confファイルを生成します。

0
mabvutosicho

以下のコマンドを使用して、resolv.confまたは再起動後に上書きされないファイル:

chattr -V +i filename e.g chattr -V +i /etc/resolv.conf

変更を元に戻すには、以下のコマンドを使用します。

chattr -i filename - to re-enable insert to the file

chattr(属性の変更)は、特定の属性をLinuxシステムのファイルに設定/設定解除するために使用されるコマンドラインLinuxユーティリティであり、たとえ次のようにログインしていても、重要なファイルやフォルダーが誤って削除または変更されるのを防ぎます。 rootユーザー。

0
Ashish Jain

Azure VMでは/etc/resolv.confは直接編集できません。

DNSエントリをネットワーク構成ファイルに追加してみてください/etc/sysconfig/network-scripts/ifcfg-eth0などは以下のようになります。

DOMAIN=example.com
DNS1=10.*.*.*
DNS2=10.*.*.*
DNS3=10.*.*.*

ファイルを保存した後、ネットワークサービスを再起動します。構成がresolve.confにも追加されることがわかります。

0
Krishan