CentOS 7.0で完全修飾ホスト名を設定する方法は?


19

CentOS 7.0で完全修飾ホスト名を設定するにはどうすればよいですか?

たとえば、以下を使用してオンラインでいくつかの投稿を見てきました。

$ sudo hostnamectl set-hostname nodename.domainname

ただし、domainnameを実行しても何も返されません。

$ domainname
(none)

また:

$ hostname
nodename.domainname

しかしながら、

$ hostname -f
hostname: Name or service not known
$ hostname -d
hostname: Name or service not known

いくつかのデバッグ出力:

$ cat /etc/hostname
nodename.domainname

$ grep ^hosts /etc/nsswitch.conf
hosts:      files dns

回答:


30

ホスト名 を設定するには、次のように、ホスト名のみを使用してくださいhostnamectl

hostnamectl set-hostname nodename


(DNS)ドメイン名編集/etc/hostsファイルを設定し、次のことを確認するには:

  1. そこに線<machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>があります
  2. の他の行はありませんが<some IP> <hostname>、これには127.0.0.1および::1(IPv6)アドレスを持つ行が含まれます。

NISを使用している場合を除き(none)domainnameコマンドの実行時の正しい出力であることに注意してください。

DNSドメイン名が正しく設定されているかどうかを確認するには、dnsdomainnameコマンドを使用してhostnamevs hostname -f(FQDN)の出力を確認します。


NISとDNSドメイン

この問題に最初に出会ったとき、私は混乱しました。このdomainnameコマンドは、インターネットの人気よりも前のようです。DNSドメイン名の代わりに、システムのNIS(ネットワーク情報サービス)別名YP(Yellow Pages)ドメイン名(マスターNISサーバーによって提供されるサービスを持つコンピューターのグループ)を表示または設定します。このコマンドは、getdomainname(2)標準ライブラリ関数によって返された名前を単に表示します。(nisdomainnameおよびypdomainnameは、このコマンドの代替名です。)

FQDNまたはDNSドメイン名を表示する

DNS(インターネット)ドメイン名を確認するには、dnsdomainnameコマンドを実行するかhostname-d, --domainオプションを使用する必要があります。(このdnsdomainnameコマンドはDNSドメイン名を設定するために使用できないことに注意してください-それは表示するためにのみ使用されます。)

システムのFQDN(完全修飾ドメイン名)を表示するにhostnameは、-f, --fqdn, --longオプションを指定して実行します(同様に、このコマンドを使用してドメイン名部分を設定することはできません)。

上記のコマンドは、システムのリゾルバー(gethostbyname(3)POSIXで指定された標準ライブラリの関数によって実装されます)を使用して、DNSドメイン名とFQDNを決定します。

名前解決

RHEL 7などの最新のオペレーティングシステムhosts/etc/nsswitch.confは、エントリはホスト名の解決に使用されます。CentOS 7マシンでは、この行は次のように構成されています(CentOS 7のデフォルト)。

hosts:      files dns

これは、リゾルバー関数がホスト名またはIPアドレスを検索するときに、最初に/etc/hosts ファイル内のエントリをチェックし、次ににリストされているDNSサーバーを試すことを意味し/etc/resolv.confます。

hostname -fホストのFQDNを取得するために実行すると、リゾルバー関数はシステムのホスト名のFQDNを取得しようとします。ホストが/etc/hostsファイルまたは関連するDNSサーバーにリストされていない場合、試行は失敗し、そのことがhostname報告されName or service not knownます。

場合はhostname -d、ドメイン名を取得するために実行され、同じ操作が行われ、ドメイン名の部分は、ホスト名部分とFQDNから最初のドットをストリッピングすることにより決定されます。

ドメイン名を構成する

1.関連するDNSネームサーバーを更新する

私の場合、ローカルLANのDNSサーバーに新しいCentOS 7マシンのエントリを既に追加していたので、or オプションで/etc/hosts実行hostnameしたときにファイルにFQDNが見つからなかった場合、ローカルDNSサービスは次のことができました。新しいホスト名のFQDNを完全に解決します。-d-f

2. /etc/hostsファイルを使用する

DNSサーバーが構成されていない場合は、完全修飾ドメイン名を/etc/hostsファイルで指定できます。これを行う最も一般的な方法は、システムのプライマリIPアドレスを指定し、その後にFQDNと短いホスト名を指定することです。例えば、

172.22.0.9  nodename.domainname nodename

hostnameマニュアルページからの抜粋

hostnameまたはでFQDNを変更することはできませんdnsdomainname

FQDNの推奨される設定方法は、/etc/hosts,DNSまたはNIS を使用して、ホスト名を完全修飾名のエイリアスにすることです。たとえば、ホスト名が「ursula」の場合、次の行が表示される場合が/etc/hostsあります。

27.0.1.1    ursula.example.com ursula

技術的には:FQDNは、gethostname(2)によって返されるホスト名に対してgetaddrinfo(3)が返す名前です。DNSドメイン名は、最初のドットの後の部分です。

そのため、リゾルバーの構成(通常は/etc/host.conf)によって、変更方法に依存します 。通常、hostsファイルはDNSまたはNISの前に解析されるため、でFQDNを変更するのが最も一般的 /etc/hostsです。


ご回答有難うございます。質問を更新しました-残念ながら、このhostname -fコマンドは私のCentOS vmでは動作しません。
クリススノー

@SHCの内容/etc/hostnameと出力も含めるように質問を編集できますgrep ^hosts: /etc/nsswitch.confか?Network Managerについてはあまり知りませんが/etc/NetworkManager/NetworkManager.conf、その[keyfile]セクションに次の行が含まれていることにも気付きましたhostname=<nodename>
アンソニーG-モニカの正義

1
@SHC私はそれ以来この問題を調査してきましたが、私の答えを根本的に修正しました。これで、質問がより包括的に解決されるはずです。
アンソニーG-モニカの正義

この答えへの導線は身体と矛盾しています。 DNSドメイン名を設定hostnamectl set-hostname nodename.domainnameしませ(また、NISドメイン名も設定するわけではありません)。
sourcejedi

@sourcejedi現時点では時間がありませんが、機会があれば答えを明確にしようと思います。
アンソニーG-モニカの正義

1

Centos7では、nmtuiを使用してホスト名を設定し、nodename.domainname / FQDN形式を指定すると、一貫した結果が得られます。ホスト名[d / f / s]はすべて、正しい期待される結果を提供します。/etc/resolv.confまたは/ etc / hostsには保存されません。ただし、FQDNは1行のエントリとして/ etc / hostnameに書き込まれます。


0

私にとって、/ etc / hostnameファイルには、ホスト名の代わりにFQDNが含まれていました(たとえば、hostname.example.comの代わりにホスト名)。/ etc / hostnameのホスト名からドメインを削除すると、「hostname -f」コマンドは正常に機能しました。

これはCentOS 7 VMをインストールしたときに導入されたと思います。完全修飾ドメイン名ではなく、ホスト名のみを入力する必要がありました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.