CentOS7 ホスト名 ctl set-hostname が /etc/resolv.conf と混同されます。

CentOS7 ホスト名 ctl 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仮想マシンです。

オペレーティングシステムは、SolusVMコントロールパネルテンプレートを介してインストールされます。

CentOS 7をインストールした後、2つの方法のいずれかを使用してホスト名を変更しましたが、どの方法を使用したか覚えていません。

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

私は以前のホスト名を表示しhostnameて使用するinit GITコミットがありましたが、固定IPと新しいホスト名/ドメインを持つエントリがあったので、後者だけが行ったと確信しています。違いは下記をご覧ください。resolv.confhosts

何らかの理由でこの変更が続いていないように見え、SolusVM(またはKVM Manager)を介してVMがハングして再起動が発生した場合、ホスト名は元の名前に戻りましたsystemd

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

これを実行して再起動した後、DNS検証がなくなり、たとえばnslookup google.comDNS ping google.com/確認なしエラーが発生することがわかりました。

SolusVM CentOS 7インストールテンプレートで設定されたすべてのDNS設定はNetworkManagerによって削除されたように見え、これらの変更の原因が誰であるかは不明ですが、GITでは変更が行われたことは明らかです/etc/hostname。すぐにコマンドを実行します(以下の違いをもう一度参照してください)。/etc/resolv.conf/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

GITの場合etckeeper(デフォルトでは管理者の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

関連情報