私は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
時々制御し変更することができるいくつかのプログラムは次のとおりです。
resolvconf
。絶対的な制御権を持ち、/etc/resolv.conf
他のプログラムがそれを変更できないように設計されたプログラムです。それを削除します。Network Manager
(あなたはそれを使用していると報告しません)。使用するDNSサーバーを定義するいくつかのエントリがあります。構成ファイルを移動して構成をリセットする無効問題が解決することを確認してください。- 文書
/etc/network/interfaces
DNS設定行を含めることができます、ここではそうではありません。 - サービス
systemd
resolved
はローカルサーバー127.0.0.53を設定している可能性がありますが、これを報告しません。関連。 dnsmasq
または、同様のDNSサーバーを制御するように構成できます。実行中のプログラムがresolv.conf
あることを確認してください。dnsmasq
- 各新しいリースは
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の変更について不満を示し、さまざまな手順(無効化など)に従う必要があります。