
CentOS7。ネットワークはすべて正常です。
# cat /etc/resolv.conf
nameserver 192.168.1.1
そこでホスト名を変更することにしました。
# hostnamectl set-hostname host.domain
# reboot
# cat /etc/resolv.conf
# Generated by NetworkManager
search domain
# 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
なぜhostnamectl set-hostname
私の が台無しになるのですか/etc/resolv.conf
?
答え1
公式の回答として、MikeA が質問のコメントで述べていることを繰り返します。
必ずしも dhcpclient である必要はなく、NetworkManager である場合もあります。DNS1、DNS2、および DOMAIN を同じファイルで指定すると、正しい /etc/resolv/conf が作成されます。
このファイルに DNS1、DNS2、DOMAIN が含まれていない場合は、/etc/resolv.conf に正しい行 (検索とネームサーバーなど) を手動で追加する必要があります - MikeA
私は彼のコメントに従い、成功しました (詳細については下記を参照してください)。
NetworkManager (CentOS 7 - 現在の方法)
- 次の行を追加します
/etc/sysconfig/network-scripts/ifcfg-<inf>
:DNS1=8.8.8.8 DNS2=8.8.4.4 DOMAIN=mydomain.com
- リブート
「静的」resolv.conf (古い方法)
PEERDNS=no
で/etc/sysconfig/network-scripts/ifcfg-<inf>
- 手動で正しい行を追加します
/etc/resolv.conf
(検索、ネームサーバーなど)(これは基本的に
詳細情報
ネットワーク エラーの結果としてこの質問に至りました。
サーバーは、KVM 環境で実行される CentOS 7 仮想マシンです。
OS は SolusVM コントロール パネル テンプレートを使用してインストールされました。
CentOS 7 をインストールした後、ホスト名を変更する 2 つの方法のうちの 1 つを実行しましたが、どちらを実行したか思い出せません。
hostname myserver.mydomain.com
; または- SolusVMコントロールパネルのホスト名タブを使用
私は後者だけを実行したと確信しています。古いホスト名を使用していることを示す init GIT コミットがありますが、hostname
静的IP と新しいホスト名/ドメインを含む単一のエントリがあります。差分については以下を参照してください。resolv.conf
hosts
この変更は何らかの理由で持続しなかったようです。VM が SolusVM (または KVM マネージャー) 経由で一時停止され、再起動されると、ホスト名は によって元に戻されましたsystemd
。
その後、CentOS 7ではホスト名を を使用して設定する必要があることがわかりましたhostnamectl set-hostname myserver.mydomain.com
。[1]
これを実行して再起動した後、DNS 解決ができず、nslookup google.com
DNS ping google.com
/ 解決なしのエラーが発生しました。
SolusVM CentOS 7 インストール テンプレートで設定された DNS 構成は NetworkManager によって消去されたようですが、変更の原因が誰であるか、何が原因であるかははっきりしません。ただし、コマンドを実行した直後に/etc/hostname
、/etc/resolv.conf
およびに変更が加えられたことは GIT から明らかです(ここでも、差分については下記を参照してください)。/etc/machine-info
hostnamectl ...
同様の状況にある人のために、トラブルシューティングのため、または明確な例として、私が実行した正確な手順は次のとおりです。
目的: ホスト名.ドメイン名 (fqdn) を更新する
(明示的に: myOLDhostname.myOLDdomain.com -> myNEWhostname.myNEWdomain.com)
初期状態:
hostname
:myOLDhostname.myOLDdomain.com
resolv.conf
:
# Generated by NetworkManager search myOLDdomain.com nameserver 8.8.8.8 nameserver 8.8.4.4
machine-info
:/dev/null
(つまり存在しない)
コマンドを実行
hostnamectl set-hostname myNEWhostname.myNEWdomain
- 再起動します。再起動後、VM に再度 SSH 接続します。
nslookup google.com
、を試すping google.com
と、次のようなエラーが発生します:ping: unknown host google.com
cat /etc/resolv.conf
次のように表示されます:
# Generated by NetworkManager
search myNEWdomain.com
# 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
- 検索した結果、、、 のエントリ
/etc/sysconfig/network-scripts/ifcfg-eth0
が見つからないため、 のエントリが欠落しています。DNS1
DNS1
DOMAIN
nameserver
/etc/resolv.conf
- 以下を経由で追加します
sudoedit /etc/sysconfig/network-scripts/ifcfg-eth0
:
DNS1=8.8.8.8
DNS2=8.8.4.4
DOMAIN=myNEWdomain.com
- もう一度コマンドを実行します
hostnamectl set-hostname myNEWhostname.myNEWdomain
- しかし、まだ DNS がないので、
nslookup
失敗ping
します。 - 推奨どおりNetworkManagerを再起動してみる
systemctl restart NetworkManager.service
- まだDNSがないので、コマンドを実行します
reboot
- 再起動後、再度 ssh 経由でログインすると、正常に動作します。
ping
両方nslookp
とも成功しました。 - ここで、
cat /etc/resolv.conf
含まれているnameserver
エントリを確認します。
# Generated by NetworkManager
search myNEWdomain.com
nameserver 8.8.4.4
nameserver 8.8.8.8
etckeeper
GIT の場合、 (基本的に の GIT リポジトリを管理します)を使用します。これは初期設定を示しており、明示的に、コマンドを実行するまで/etc
のネットワーク関連ファイルに他の変更が加えられていなかったことを示しています。/etc/{hostname,resolv.conf,hosts}
hostnamectl
答え2
メイン セクションに次のスニペットresolv.conf
を追加することで、Networkmanager に変更しないように指示できます。nodns
/etc/NetworkManager/conf.d/nodns.conf
[main]
dns=none
(忘れないでsystemctl restart NetworkManager
)