/etc/resolv.confが変更され続けるのはなぜですか?

/etc/resolv.confが変更され続けるのはなぜですか?

私はvirt-managerを使用して2つのイーサネットインターフェイス(1つはNATに接続され、もう1つはbr0にブリッジ)を持つDebianベースのLinux仮想マシンを実行しています。/etc/network/interfaces構成は次のとおりです。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

br0にはDHCPサーバーがあり、スイッチ以外には何も接続されていません。

コンピュータを再起動すると、/etc/resolv.conf次の項目があります。

nameserver 192.168.150.1

これはNAPによって割り当てられたネットワークアドレスです。つまり、試行するとping google.comエラーが発生し、temporary name resolution failure他の項目を追加します。

nameserver 8.8.8.8

仮想マシンが正常に動作し、すべてのWebサイトにアクセスできますが、しばらくすると、サービスを開始しないか/etc/resolv.confプログラムを実行せずにマシンを実行してもアイテムが再表示されます。

何が上書きされているかを調べる方法はありますか?見つからない場合(bashファイルを使用せずに/etc/resolv.conf )Watを追加できますか?nameserver 8.8.8.8/etc/resolv.conf

答え1

なぜならそうしなければならないからです。はい、/etc/resolv.confしなければならない絶えず変える他のサービスで更新する必要があるたびに。

ここに質問があります。どんなサービスを提供しますか?より多くの情報が必要です。

問題の簡単な説明を見ると、インターフェイスは2つだけです。 1つはlo変更する必要のないDHCP /etc/resolv.conf、もう1つはdhcpサービスを使用するeth0です。 dhcpサービスは、アップストリームルーター、スイッチ、またはほとんどの場合、libvirtおよびブリッジ内の仮想dhcpサーバーでリースを更新する必要があります。

私は説明を仮定2つのインターフェース構成を見ると~へゲスト構成ではなくVMです。

まあ、1つのオプションはdhcpclientに通知することです。DHCPリースで指定されたサーバーの上書き/etc/dhcp/dhclient.conf仮想マシンの内部に次の行を追加します。

supersede domain-name-servers 1.1.1.1, 2.2.2.2, 3.3.3.3;

またはプレフィックスを使用して、つまり、最初のDNSリゾルバーとして追加、次の行を使用します。

prepend domain-name-servers 8.8.8.8, 8.8.4.4;

氷山

問題は、上記の「氷山の一角」よりはるかに複雑です。

仮想ネットワーク構成が複雑です。ブリッジ(192.168.150.zzアドレス(デフォルトはxx.yy.122.zzではない)を提供すると仮定します)が正しく設定されていることを確認する必要があります。読んでくださいhttps://wiki.libvirt.org/page/VirtualNetworking

このファイルを更新できる他の代替プログラムがたくさんあります/etc/resolv.conf。あなたの説明によると、この場合、どちらも問題にならないようです。しかし、ご存知のように、/etc/resolv.conf支配権のための競争は長年にわたって長い間行われてきました、そして今日もまだ存在しています。/etc/resolv.conf時々制御し変更することができるいくつかのプログラムは次のとおりです。

  1. resolvconf。絶対的な制御権を持ち、/etc/resolv.conf他のプログラムがそれを変更できないように設計されたプログラムです。それを削除します。
  2. Network Manager(あなたはそれを使用していると報告しません)。使用するDNSサーバーを定義するいくつかのエントリがあります。構成ファイルを移動して構成をリセットする無効問題が解決することを確認してください。
  3. 文書/etc/network/interfaces DNS設定行を含めることができます、ここではそうではありません。
  4. サービスsystemd resolvedはローカルサーバー127.0.0.53を設定している可能性がありますが、これを報告しません。関連
  5. dnsmasqまたは、同様のDNSサーバーを制御するように構成できます。実行中のプログラムがresolv.confあることを確認してください。dnsmasq
  6. 各新しいリースはdhclient更新できます(必要に応じて)。dhcp.conf上記のように。

答え2

ここで文句を言います。私もそのような問題に直面しました。私が経験している問題は、ネットワーク管理者がResolv.confを介して設定を適用していることです。これを確認したいかもしれません。現在職場が退屈で必要な場合は、家に帰って詳細を調べてみましょう。

grep DNS /etc/sysconfig/network-scripts/ifcfg-*

DNSサーバーおよび/または

sudo vim /etc/NetworkManager/NetworkManager.conf

そしてこれを[main]セクションに追加してください:

dns=none
rc-manager=unmanaged

答え3

通常、これはsystemdによるものですが、他の回答を参照してください。ベンダーが追加したスクリプトである可能性があるため、「breaking DNS」機能を無効にするために他のより明確なコマンドを要求するようにsystemdを変更することもできます。ある時点でファイルを変更できないようにします。たとえば、次のようになります。

set -e
cd /etc
TMPFILE=`mktemp -q resolv.XXXXXXXXXX`
echo "nameserver 8.8.8.8" > "$TMPFILE"
chmod 0644 "$TMPFILE"
chattr -i resolv.conf
mv "$TMPFILE" resolv.conf
chattr +i resolv.conf

ただし、ベンダースクリプトは不変フラグを簡単に設定解除し、DNS構成を破壊する可能性があり、深い防御にはsystemdを破損しようとする試みも含まれます。ここにもいくつかの競争条件があります。さらに、SELinuxなどのセキュリティポリシーフレームワーク(無効にしていない場合)は、上記で行ったinodeの変更について不満を示し、さまざまな手順(無効化など)に従う必要があります。

関連情報