web-dev-qa-db-ja.com

systemctl restart 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を編集することです。
しかし、動作を理解したいのですが、ファイルがこのデフォルトのエラーメッセージにリセットされないようにするにはどうすればよいですか。

7
csny

おそらく、古典的な/etc/init.d/networknetwork.serviceに翻訳されます)とNetworkManager.serviceを混在させている可能性があります。それらは部分的に共存することが期待されていますが、そのうちの1つとstopdisableを選択する方がはるかに優れています。

どちらの方法でも、/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.confに1つまたは2つ以上のネームサーバーが必要になることはありません。 libcリゾルバーの動作にはあまり期待しないでください。ネームサーバーを順番に試行するだけで、リストに無効なネームサーバーがある場合は、長い遅延が発生します。

4つ以上のネームサーバーを使用する理由がわかりません。ただし、ある場合は、必ずnboundまたはdnsmasqのようなローカル転送DNSサーバーを構成し、/etc/resolv.conf127.0.0.1にポイントする必要があります。動的構成で最高のエクスペリエンスを得るには、この場合はNetworkManagerを使用する必要があります。

Dnsmasqを備えたNetworkManagerは長い間サポートされており、Ubuntuおよびおそらく他のディストリビューションのデフォルトです。

[main]
dns=dnsmasq

アンバインドされたNetworkManagerは、最新のNetworkManagerバージョンでアルファ品質であり、現在のところdnssec-triggerも必要です。主な使用例は、ローカルホストでDNSSEC検証を提供するためです。

[main]
dns=unbound

Dnsmasqと非バインドプラグインの両方が/etc/resolv.confからnameserver 127.0.0.1を構成し、それぞれがそれぞれのローカルDNSサーバーを構成します。

10
Pavel Šimerda

Dhclient.confを使用してネームサーバーを指定します。ネームサーバーエントリの順序をきめ細かく制御でき、ネットワークを構成する「Red Hat Way」と一致しています。

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
0
Markus R

NetworkManager GUIツールを使用して、resolv.confを永続的な値で構成することをお勧めします-これはネットワークの再起動後も残ります:

$ nmtui

または:

$ nm-connection-editor

DNSサーバー、検索ドメインなどを追加します。 enter image description here

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

$ Sudo systemctl restart network
$ cat /etc/resolv.conf
0
Noam Manos