
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
て次の点を確認します:
<machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>
そこに線がある- を含む他の行はなく
<some IP> <hostname>
、これには127.0.0.1
および::1
(IPv6) アドレスを含む行も含まれます。
NIS を使用していない限り、コマンドを(none)
実行すると正しい出力になることに注意してくださいdomainname
。
DNS ドメイン名が正しく設定されているかどうかを確認するにはdnsdomainname
、コマンドを使用してhostname
vs 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 からホスト名部分と最初のドットを削除することによってドメイン名部分が決定されます。
ドメイン名を設定する
関連するDNSネームサーバーを更新する
私の場合、ローカル LAN の DNS サーバーに新しい CentOS 7 マシンのエントリをすでに追加していたため、またはオプションを指定して
/etc/hosts
実行したときにファイル内に FQDN が見つからなかった場合でも、ローカル DNS サービスは新しいホスト名の FQDN を完全に解決できました。hostname
-d
-f
/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
。