CentOS7 の hostnamectl set-hostname が /etc/resolv.conf を台無しにする

CentOS7 の hostnamectl set-hostname が /etc/resolv.conf を台無しにする

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 - 現在の方法)

  1. 次の行を追加します/etc/sysconfig/network-scripts/ifcfg-<inf>: DNS1=8.8.8.8 DNS2=8.8.4.4 DOMAIN=mydomain.com
  2. リブート


「静的」resolv.conf (古い方法)

  1. PEERDNS=no/etc/sysconfig/network-scripts/ifcfg-<inf>
  2. 手動で正しい行を追加します/etc/resolv.conf(検索、ネームサーバーなど)(これは基本的に



詳細情報


ネットワーク エラーの結果としてこの質問に至りました。

サーバーは、KVM 環境で実行される CentOS 7 仮想マシンです。

OS は SolusVM コントロール パネル テンプレートを使用してインストールされました。

CentOS 7 をインストールした後、ホスト名を変更する 2 つの方法のうちの 1 つを実行しましたが、どちらを実行したか思い出せません。

  • hostname myserver.mydomain.com; または
  • SolusVMコントロールパネルのホスト名タブを使用

私は後者だけを実行したと確信しています。古いホスト名を使用していることを示す init GIT コミットがありますが、hostname静的IP と新しいホスト名/ドメインを含む単一のエントリがあります。差分については以下を参照してください。resolv.confhosts

この変更は何らかの理由で持続しなかったようです。VM が SolusVM (または KVM マネージャー) 経由で一時停止され、再起動されると、ホスト名は によって元に戻されましたsystemd

その後、CentOS 7ではホスト名を を使用して設定する必要があることがわかりましたhostnamectl set-hostname myserver.mydomain.com。[1]

これを実行して再起動した後、DNS 解決ができず、nslookup google.comDNS ping google.com/ 解決なしのエラーが発生しました。

SolusVM CentOS 7 インストール テンプレートで設定された DNS 構成は NetworkManager によって消去されたようですが、変更の原因が誰であるか、何が原因であるかははっきりしません。ただし、コマンドを実行した直後に/etc/hostname/etc/resolv.confおよびに変更が加えられたことは GIT から明らかです(ここでも、差分については下記を参照してください)。/etc/machine-infohostnamectl ...

同様の状況にある人のために、トラブルシューティングのため、または明確な例として、私が実行した正確な手順は次のとおりです。

目的: ホスト名.ドメイン名 (fqdn) を更新する

(明示的に: myOLDhostname.myOLDdomain.com -> myNEWhostname.myNEWdomain.com)

  1. 初期状態:

    • 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(つまり存在しない)
  2. コマンドを実行hostnamectl set-hostname myNEWhostname.myNEWdomain

  3. 再起動します。再起動後、VM に再度 SSH 接続します。
  4. nslookup google.com、を試すping google.comと、次のようなエラーが発生します:ping: unknown host google.com
  5. 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
  6. 検索した結果、、、 のエントリ/etc/sysconfig/network-scripts/ifcfg-eth0が見つからないため、 のエントリが欠落しています。DNS1DNS1DOMAINnameserver/etc/resolv.conf
  7. 以下を経由で追加しますsudoedit /etc/sysconfig/network-scripts/ifcfg-eth0:
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    DOMAIN=myNEWdomain.com
  8. もう一度コマンドを実行しますhostnamectl set-hostname myNEWhostname.myNEWdomain
  9. しかし、まだ DNS がないので、nslookup失敗pingします。
  10. 推奨どおりNetworkManagerを再起動してみるsystemctl restart NetworkManager.service
  11. まだDNSがないので、コマンドを実行しますreboot
  12. 再起動後、再度 ssh 経由でログインすると、正常に動作します。ping両方nslookpとも成功しました。
  13. ここで、cat /etc/resolv.conf含まれているnameserverエントリを確認します。
    # Generated by NetworkManager
    search myNEWdomain.com
    nameserver 8.8.4.4
    nameserver 8.8.8.8

etckeeperGIT の場合、 (基本的に の 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

関連情報