CentOS 5 の /etc/hosts を使ったローカル名前解決について確認します。DNS を使う構成であっても、古いサーバーでは /etc/hosts に重要な名前解決が残っていることがあります。移行や障害調査では、DNS だけでなく hosts ファイルも必ず確認します。
hosts ファイルの役割
/etc/hosts は、ローカルホスト上で名前と IP アドレスを対応付けるファイルです。DNS よりも前に参照される設定になっていることが多く、特定サーバーだけ名前解決結果が違う原因になります。
- 自ホスト名の名前解決
- DNS がない小規模環境での名前解決
- 移行中の一時的な名前解決
- 古いアプリケーションが参照する固定名の定義
便利な一方で、hosts に依存しすぎると、どの名前がどこで定義されているのか分かりにくくなります。運用では、恒久的な名前解決は DNS に寄せ、hosts は必要最小限にするのが扱いやすいです。
現在の名前解決順序を確認する
CentOS 5 では /etc/nsswitch.conf の hosts 行で、名前解決の参照順序を確認します。
grep ^hosts /etc/nsswitch.conf
cat /etc/hosts
hostname
hostname -fhosts: files dns のようになっていれば、まず /etc/hosts を見て、その後 DNS を参照します。ここを理解していないと、DNS を直したのに特定サーバーだけ古い IP を引き続き参照する、といった状況になります。
hosts ファイルの基本例
基本的には、IP アドレス、FQDN、短縮名の順に書きます。自ホスト名は、FQDN と短縮名の両方で解決できるようにしておくと、古いサービスの起動時に問題が出にくくなります。
127.0.0.1 localhost.localdomain localhost
192.168.1.10 server01.example.local server01
192.168.1.20 db01.example.local db01
192.168.1.30 web01.example.local web01複数の名前を同じ IP に割り当てることはできますが、別名を増やしすぎると管理が難しくなります。アプリケーションの移行都合で一時的に書く場合は、なぜその行が必要なのかをコメントで残すと後から判断しやすくなります。
確認コマンド
getent hosts は、nsswitch の順序に従った名前解決結果を確認できます。DNS だけを見たい場合と、OS の名前解決全体を見たい場合を分けます。
getent hosts server01
getent hosts server01.example.local
ping -c 3 server01
nslookup server01.example.localnslookup や dig は DNS を確認するための道具です。/etc/hosts の結果を含めて確認したい場合は、getent hosts を使う方が実態に近いです。
運用上の注意
- hosts はサーバーごとに内容がずれるため、台数が増えると管理しにくい
- 一時対応で追加した行が長期間残りやすい
- DNS と hosts の結果が違うと障害調査が難しくなる
- 移行時は hosts の棚卸しが必要になる
CentOS 5 のような古い環境では、過去の暫定対応が hosts に残っていることがあります。新しい環境へ移す時は、単にファイルをコピーするのではなく、本当に必要な名前解決かどうかを見直します。
まとめ
/etc/hosts は単純なファイルですが、名前解決の優先順位に関わるため影響は大きいです。CentOS 5 の環境を調査する時は、DNS、nsswitch、hosts の 3 点を合わせて確認し、ローカル定義に依存した構成を見落とさないようにします。
関連する記事
- CentOS 5 サーバー管理ガイド
CentOS 5 系の記事を役割別に確認できるハブページです。 - CentOS 5 BIND 内部 DNS サーバー構築
恒久的な名前解決を DNS 側で管理する場合の基本です。 - CentOS 5 ネットワーク設定
ホスト名やネットワーク設定と合わせて確認します。
参考書籍
DNS の名前解決、権威 DNS、キャッシュ DNS、ゾーン設計を体系的に確認したい場合の参考書籍です。
Amazon で見る
