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

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

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

答え1

設定するにはホスト名 するを使用します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ドメイン名を表示する

確認するにはドメイン名(インターネット) ドメイン名を設定するには、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

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

を実行してドメイン名を取得する場合hostname -d、同じ操作が実行され、FQDN からホスト名部分と最初のドットを削除することによってドメイン名部分が決定されます。

ドメイン名を設定する

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

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

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

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

     172.22.0.9  nodename.domainname nodename
    

抜粋hostnameマニュアルページ

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

FQDN を設定するための推奨方法は、DNS または NIS を使用して、ホスト名を完全修飾名の別名にすることです/etc/hosts,。たとえば、ホスト名が「ursula」の場合、次のような行が作成されます/etc/hosts

127.0.1.1    ursula.example.com ursula

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

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

答え2

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

答え3

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

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

答え4

OP (RHEL7) と同様の問題ですが、ファイルにリストされている短いホスト名から末尾のスペースを削除することで解決しました/etc/hostname。その後にsystemctl restart systemd-hostnamed. が続き、コマンドで FQDN が表示されるようになりましたhostname -f

関連情報