Linux のホスト名の存在意義と決め方

Linux は Windows と違ってホスト名での名前解決が標準設定で行われません。Windows の場合は NBT や LLMNR という名前解決の仕組みにより、同一ネットワーク内であれば DNS サーバが無くてもホスト名の名前解決が行われます。

しかし Linux は DNS サーバが無ければ名前解決は一切できません。DNS のキャッシュを残すようなこともしません。Windows と異なり、Linux は名前解決に関しては完全に DNS サーバに依存します。

例えば同一ネットワーク内の別の Linux サーバに ping を実行する際も、自力では名前解決ができないので以下のような結果になります。

[root@cache-sv ~]# ping tech-sv
ping: tech-sv: 名前またはサービスが不明です

DNS サーバに定義された名前で問い合わせを行うと名前解決に成功するので、以下のように ping に応答があります。

[root@cache-sv ~]# ping tech.yamashiro.blog.
PING tech.yamashiro.blog (192.168.11.14) 56(84) bytes of data.
64 bytes from 192.168.11.14 (192.168.11.14): icmp_seq=1 ttl=64 time=0.353 ms
64 bytes from 192.168.11.14 (192.168.11.14): icmp_seq=2 ttl=64 time=0.310 ms

DNS サーバが全ての名前解決を行うのであれば、各ホストに設定するホスト名に意味はあるのでしょうか。結局、名前解決のベースになるのは DNS サーバにあるゾーンファイルです。

結論を言うと、名前解決という意味合いでは Linux のホスト名はほとんど意味を持ちません。ただし、ログやプロンプトにはホスト名が出力されるため、分かりやすいホスト名を設定することは重要です。

ホスト名の決め方

Linux のホスト名について、まずはよくある誤解を解いておきます。

下図のようにデフォルトだと「localhost.localdomain」というホスト名が設定されています。

ドットで区切られた「localdomain」がドメイン名だという誤解です。訂正すると、localdomain もホスト名の一部です。つまり「localhost.localdomain」というホスト名ということになります。

[root@localhost ~]# hostname
localhost.localdomain

[root@localhost ~]# domainname
(none)

[root@localhost ~]# grep -v '^#' /etc/resolv.conf
search localdomain

また、最初のドットで区切られる前のラベルのことを「ショートホスト名」と呼び、hostname に -s オプションを引数として与えることで出力することができます。

[root@localhost ~]# hostname --help
    ...
    -s, --short            short host name
    ...

[root@localhost ~]# hostname -s
localhost

Red Hat Customer Portal では、ホスト名は DNS で使われる FQDN と同じものにすることを推奨しています。よって DNS の名前空間に登録済みの場合はその名前の FQDN をホスト名に設定するとよいでしょう。もし DNS に関連しない場合は分かりやすい適当なホスト名でよいと言えます。ドットで区切る必要性もありません。

ホスト名の大文字/小文字

DNS では大文字と小文字は区別されません。よってどちらでホスト名を設定してもいいのですが、デフォルトが「localhost.localdomain」で、通常ゾーンファイルのレコードは小文字で記載するのでホスト名も小文字で設定した方がよいでしょう。

Windows のコンピュータ名

Windows の名前は「コンピュータ名」と一括りに設定しますが、実際は「ホスト名」と「NetBIOS名」に分かれており、NetBIOS 名は15バイト以内の大文字という制限があります。その為 Windows では慣習として大文字のコンピュータ名を設定することが多いです。

Linux のドメイン名とは

Linux にはそもそもドメイン名というものは存在するかというと、設定としてはあります。先ほども記載しましたが、「domainname」というコマンドで設定内容が確認できます。

[root@localhost ~]# domainname
(none)

これは Windows でいう Active Directory ドメイン名のようなものです。Linux の場合は NIS ドメイン名と呼ばれます。通常設定することはない値です。

なお、/etc/resolv.conf には domain というパラメータがあります。これは所謂ドメインのサフィックス設定であり、ドメイン名ではありません。/etc/resolv.conf に domain を記述したとしても、domainname コマンドは (none) のままです。

Linux のホスト名を決めるうえでドメインのことを深く考える必要はありません。名前空間の一部であれば FQDN を、そうでないなら適当な名前を設定するだけです。

1 COMMENT

とおりすがり

はじめまして。仮想マシンをポコポコ用意する機会が増えて命名規則についていろいろ調べているうちに貴サイトにたどり着きました。
記載していただいた内容はRedHad系に限った内容で、Ubuntu/Debian系では少し状況が異なって、FQDNではなくshort name を記載するようです。

タイトルが”Linux のホスト名の存在意義と決め方”となっていたので、突っ込ませてもらいました。
cf.
https://serverfault.com/questions/331936/setting-the-hostname-fqdn-or-short-name
https://www.debian.org/doc/manuals/debian-reference/ch03.en.html#_the_hostname

返信する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)