systemctl が network.service を再起動すると、ネームサーバーが削除されます。

systemctl が network.service を再起動すると、ネームサーバーが削除されます。

Centos 7で作業していますが、ネットワークインターフェイスをdhcpから静的IP設定に設定するのに問題があります。

変更が/etc/resolv.conf消え、systemctl restart network.service
一般ファイルが作成されました。

cat /etc/resolv.conf
# Generated by NetworkManager


# No nameservers found; try putting DNS servers into your
# ifcfg files in /etc/sysconfig/network-scripts like so:
#
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# DOMAIN=lab.foo.com bar.foo.com

注:ifcfg-ens160ファイルのPEERDNS = "yes"です。
PEERDNS=、ここでは次のいずれかのオプションです。 yes - DNSディレクティブが設定されている場合は/etc/resolv.confを変更します。 DHCP を使用する場合、デフォルトは yes です。
no - /etc/resolv.conf を変更しないでください。

ここから抜粋:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/3/html/Reference_Guide/s1-networkscripts-interfaces.html

何か関連があるようですが、dhcpに設定すると正常に動作するため、/etc/resolv.conf自動的に設定すると成功すると期待します。

回避策は、/etc/resolv.confサービスを再起動して編集することです。
しかし、私はこの動作とファイルがデフォルトの失敗メッセージにリセットされるのを防ぐ方法を理解したいと思います。

答え1

/etc/init.d/network古典(に翻訳されているnetwork.service)をと比較することができますNetworkManager.service。これらは部分的に共存すると予想されますが、そのうちの1つだけを選択して次のことを行うのが最善です。止めるそして障害を負うもう一つ。

/etc/resolv.confどちらも直接作成せずに正しく設定/etc/sysconfig/networkおよび/または/etc/sysconfig/network-scripts/ifup-*ファイリングすることをお勧めします。

有効にする必要がありますDHCPまたはでネームサーバーを手動で設定します/etc/sysconfig

はい(DHCP):

BOOTPROTO=dhcp

はい(静的):

BOOTPROTO=none
DNS1=192.168.1.1

実際に/etc/resolv.conf自分で設定し、NetworkManagerが上書きされないようにするには、次のようにします/etc/NetworkManager/NetworkManager.conf

[main]
dns=none

ネームサーバーの数に関する追加の質問に関連して、/etc/resolv.conflibcリゾルバの動作であまりにも多くを期待してはいけません。単にネームサーバーを順番に試して、リストに存在しないネームサーバーがある場合、長い時間遅延が発生します。

ネームサーバーを3つ以上使用する理由はよくわかりません。ただし、そのようなものがある場合は、次のローカル転送DNSサーバーを構成する必要があります。束縛されていないまたはDNS動的構成のベストエクスペリエンスを得るには、この場合NetworkManagerを使用する必要があります/etc/resolv.conf127.0.0.1

NetworkManagerとdnsmasqは長い間サポートされており、Ubuntuや他のディストリビューションのデフォルトです。

[main]
dns=dnsmasq

バインドされていない NetworkManager は、最新の NetworkManager バージョンでアルファ品質であり、現在、次のものが必要です。dnssecトリガー主なユースケースは、ローカルホストでDNSSEC検証を提供するためです。

[main]
dns=unbound

dnsmasqとアンバウンドプラグインの両方が/etc/resolv.conf構成されておりnameserver 127.0.0.1、各プラグインは独自のローカルDNSサーバーを構成します。

答え2

ネームサーバーを指定するには、dhclient.conf を使用します。これはネームサーバーエントリの順序を細かく制御でき、ネットワーク設定の「Red Hat方式」と一致します。

dhclient.confはデフォルトでは存在しませんが、生成できます。

interface "eth0" {
    prepend domain-name-servers 8.8.8.8;
    append domain-name-servers 8.8.4.4;
}

生成されたresolv.conf:

# Generated by NetworkManager
search example.com
nameserver 8.8.8.8
nameserver 10.0.2.3
nameserver 8.8.4.4

Vagrantでテスト:

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.provision "shell", inline: <<VAGRANTEOF
  cat <<EOF > /etc/dhcp/dhclient-eth0.conf
interface "eth0" {
    prepend domain-name-servers 8.8.8.8;
    append domain-name-servers 8.8.4.4;
}
EOF
  sudo service network restart
VAGRANTEOF
end

追加資料:

  • dhclient.conf マンページ
  • /usr/share/doc/dhclient-4.2.5/dhclient.conf.example

答え3

NetworkManager GUI ツールを使用して resolv.conf を永続値として設定することをお勧めします。この値は、ネットワークを再起動しても保持されます。

$ nmtui

または:

$ nm-connection-editor

DNSサーバー、検索ドメインなどを追加してください。 ここに画像の説明を入力してください。

ここで、ネットワークを再起動した後も、これらの値がまだ定義されていることを確認してください。

$ sudo systemctl restart network
$ cat /etc/resolv.conf

関連情報