ブートごとに/etc/resolv.confを上書きするものは何ですか?


23

linux直接起動するミニのファイルが与えられましたfirefox。私がインターネットに接続できないということだけが、それがしなければならないすべてのために機能します。

ネットワークには3つのDNSサーバーがあり、すべて機能します。私もそれらをpingできます。しかししようとしたときping google.deか、wget google.de私が取得bad addressエラー。

nslookup google.de 何らかの理由で動作します。

ファイルに入れresolv.confresolv.confものと同じ内容を持たないブート済みシステム上で問題を追跡しました.iso

作成と変更に入るすべての要因を理解してみましたresolv.conf。私はそれをすべて手に入れたとは確信していませんが、私は間違いなくそこに私の解決策を見つけませんでした。

だから最後の溝の努力として、私はresolv.confファイルを不変にしてみました

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

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

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

ファイルの一部から/etc/dhcp/dhclient.conf削除することで、ネットから情報を取得しないように変更しようdomain-name-serverdomain-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

それはudhcpcプログラムの一部です。小さなdhcpクライアント、それはの一部ですbusybox

さらに調査します。


更新2とソリューション:

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

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

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


1
ファイルが変更されていないため、resolv.confで不変フラグを設定しても期待どおりに機能しません。/ etcのディレクトリエントリは、ファイルの名前が変更されたときに変更されました。/ etcを不変に設定する必要があります-本当にしたくないことです。
doneal24 14

@ DougO'Nealなるほど。ヘッドアップをありがとう。
ミニックス14

回答:


24

1)すべての変更はローカルDHCPサーバーが提供するデータによって上書きされるため、resolv.confを手動で更新しないでください。静的にしたい場合は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クライアントプログラムであるudhcpを使用します。udhcpクライアントは、DHCPサーバーとリースをネゴシエートし、リースが取得または失われると、一連のスクリプトに通知します。ここで使用方法を読むか、このスクリプトを編集することができます(あなたがしたように)。


1
にエントリを追加して/etc/resolvconf/resolv.conf.d/base実行しましたresolvconf -u。残念ながら機能しませんでした。
Minix 14

sudo dpkg-reconfigure resolvconfを実行しようとしましたか?resolvconf -uを実行した後、エントリは結果ファイルにありませんでしたか?「nameserver 127.0.0.1」や「search google.com」など、どのように追加しましたか?
キリル-a

走りましたdpkg-reconfigure resolvconf。エントリはそこにありませんでした。との両方のエントリがnameserver ipありsearch domainます。
ミニックス

いいえ、実行してdpkg-reconfigure resolvconfもエントリは追加されませんが、自動更新を無効にすることができます。更新を無効にする場合、resolv.confを手動で編集できますが、上書きしないでください。
キリルa 14

とても不器用な言い方をするのが悪いので、私はあなたのコメントに文ごとに答えていた。実行後resolvconf -u、エントリは追加されませんでした。
Minix 14

4

私もこれに遭遇しました。コメントアウトして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で機能しました。


Ubuntuの18.04で動作しませんでした:( /etc/resolv.conf再起動後に上書きされました。
ダンDascalescu

3

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

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

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

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

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


残念ながら、これはUbuntu 18.04では機能しませんでした。再起動後、/etc/resolv.conf127.0.0.53で上書きされました。
ダンダスカレスク


あなたが実行している場合もチェックdnsmasq
Sand1512

0

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

  cd /etc/resolvconf/resolv.conf.d

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


このディレクトリは、Ubuntu 18.04にはデフォルトでは存在しません。それを作成するサービスをインストールする必要がありますか?
ダンダスカレスク

0

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

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

DOMAIN = example.com

DNS1 = 10。。*
DNS2 = 10。。*
DNS3 = 10。。*

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


0

DNS関連の変更をresolv.conf永続的にするには、という名前のDHCP構成ファイルを変更する必要がありますdhclient.conf。ファイルは次の場所にあります /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/


この答えは2年前にすでに与えられてい
ダンダスカレスク

0

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

chattr -V + iファイル名例chattr -V + i /etc/resolv.conf

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

chattr -i filename-ファイルへの挿入を再度有効にします

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


私は問題のユーザーが実際に試したと信じていますが、chattrこれは効果がないことを認めました。
クサラナナンダ

これは確かに動作しますが、試したオプションのユーザーは、それが不変作るためのファイルを編集するためではないです
アシシュジャイナ教

sudo chattr -V + i filenameを使用してコマンドを実行してください。たとえば、sudo chattr -V + i /etc/resolv.conf
Ashish Jain

-1

NetworkManagerを使用したubuntu 18.04で。'resolv.conf'ファイルを削除し、NetworkManagerに生成させる必要があります。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.