起動するたびに/etc/resolv.confを上書きするのは何ですか?

起動するたびに/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ファイルはそのまま残ります。

ファイルの一部を削除して/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. resolv.confローカルDHCPサーバーから提供されたデータは変更を上書きするため、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 -asudo ifup -a

  1. あなたのシステムが使用するウズベキスタンこれは非常に小さなDHCPクライアントプログラムです。 udhcpクライアントはDHCPサーバーとリースをネゴシエートし、リースが行われたか失われたときにスクリプトセットに通知します。使い方を読むことができます。ここまたは(元のように)このスクリプトを編集してください。

答え2

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

/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ロック機能を使用していません。また、Puppetが必要なときに変更できるresolv.confことを願っています。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を使用してIPおよびネームサーバーを管理します。文書:/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ソフトリンクの場合はこれを行わないでください。まず削除してください。

関連情報