私は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を変更しないでください。
私はそれと何か関係があると思いますが、dhcpに設定するとうまく機能するので、/etc/resolv.conf
を自動的に構成すれば成功すると思います。
回避策は、サービスの再起動後に/etc/resolv.conf
を編集することです。
しかし、動作を理解したいのですが、ファイルがこのデフォルトのエラーメッセージにリセットされないようにするにはどうすればよいですか。
おそらく、古典的な/etc/init.d/network
(network.service
に翻訳されます)とNetworkManager.service
を混在させている可能性があります。それらは部分的に共存することが期待されていますが、そのうちの1つとstopとdisableを選択する方がはるかに優れています。
どちらの方法でも、/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.conf
を127.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サーバーを構成します。
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
参考文献: