web-dev-qa-db-ja.com

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
20
Chris Snow

hostnamedoを設定するには、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を使用していない限り、domainnameコマンドを実行すると_(none)_が正しい出力になります。

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


NISとDNSドメイン

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

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

[〜#〜] dns [〜#〜](インターネット)ドメイン名を確認するには、dnsdomainnameコマンドを実行するか、 _-d, --domain_オプション付きのhostnamednsdomainnameコマンドを使用してDNSドメイン名を設定することはできません。表示するためにのみ使用されます。)

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

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

名前解決

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

_hosts:      files dns
_

これは、リゾルバー関数がホスト名またはIPアドレスを検索するときに、最初に_/etc/hosts_ファイルのエントリを確認し、次に/etc/resolv.conf_にリストされているDNSサーバー

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

_hostname -d_を実行してドメイン名を取得すると、同じ操作が実行され、ドメイン名の部分は、FQDNからホスト名の部分と最初のドットを取り除いて決定されます。

ドメイン名を構成する

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

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

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

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

_172.22.0.9  nodename.domainname nodename
_

hostname manページからの抜粋

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

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の前に解析されるため、_/etc/hosts_でFQDNを変更するのが最も一般的です。

32

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

1
Ponn Dk

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

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

0
KenR