Linuxの名前解決トラブル対応で、
「pingは通るのにアプリは失敗する」「サーバごとに挙動が違う」 といった現象に遭遇したことはないでしょうか。
この原因の多くは、glibcの名前解決順序と、 それを制御する nsswitch.conf を正しく理解していないことにあります。
本記事では、getentを使った実務的なデバッグ手順を軸に、 nsswitch.confの読み解き方と障害切り分け方法を完全整理します。
目次
なぜgetentが重要なのか
多くの人は名前解決確認に以下を使いがちです。
- ping
- nslookup
- dig
しかし、これらはglibcの最終結果を必ずしも反映しません。
一方、getent は glibcが実際に返す結果 を表示します。
つまり、
「アプリが見る世界」をそのまま確認できる
のが getent です。
getent の基本構文
# hosts データベースを参照
getent hosts example.com
# IPv4 / IPv6 を含めた詳細確認
getent ahosts example.com
# ユーザー解決(名前解決以外にも使える)
getent passwd username
getent hosts と ahosts の違い
getent hosts
getent hosts example.com
- 最終的に選ばれたIPのみ表示
- 接続順は分からない
getent ahosts
getent ahosts example.com
- IPv6 / IPv4 の両方を表示
- glibcが試行する順番が分かる
通信トラブル時は ahosts が必須です。
/etc/nsswitch.conf の役割
nsswitch.conf は、glibcが「どの順番で名前解決を行うか」を定義します。
hosts: files dns
この設定は以下を意味します。
- /etc/hosts を確認
- 見つからなければ DNS
ここで重要なのは、上で見つかったら下は見ないという点です。
よくある nsswitch.conf 設定パターン
標準的な構成
hosts: files dns
systemd-resolved 利用時
hosts: files resolve dns
LDAP / AD 連携環境
hosts: files dns ldap
順序が違うだけで、解決結果・速度・失敗条件が大きく変わります。
files(/etc/hosts)による事故パターン
nsswitch.conf に files がある限り、/etc/hosts は最優先です。
典型例
192.168.0.10 example.com
- DNS変更しても反映されない
- LB配下でも単一IPに固定される
getent で確認すると一発で分かります。
getent hosts example.com
DNSが正しいのに通信できないケースの見抜き方
- dig / nslookup でDNS確認
- getent ahosts でglibc結果確認
- 両者のIP差分を見る
digは正しいが getent が違う場合、 原因は nsswitch.conf / hosts / キャッシュ です。
IPv6絡みのトラブル切り分け
getent ahosts example.com
出力例:
2001:db8::1 STREAM example.com
2001:db8::1 DGRAM
192.0.2.10 STREAM
192.0.2.10 DGRAM
- IPv6が先頭 → IPv6優先
- IPv6通信不可 → タイムアウト
この場合、IPv6無効化やアプリ設定見直しが必要になります。
キャッシュが原因の切り分け
nscd
systemctl status nscd
systemctl restart nscd
systemd-resolved
resolvectl status
resolvectl flush-caches
設定変更後は必ずキャッシュ影響を疑うのが実務の鉄則です。
実務でのデバッグ黄金ルート
- getent hosts / ahosts
- /etc/nsswitch.conf 確認
- /etc/hosts 確認
- /etc/resolv.conf(search含む)
- IPv6影響確認
- キャッシュ有無確認
この順序で確認すれば、迷子になりません。
まとめ
- getentはglibcの最終回答
- nsswitch.confが全ての起点
- digだけでは不十分
名前解決トラブルは「DNSの問題」ではなく、
glibcの挙動を理解しているかどうかで差が出ます。
あわせて読みたい


glibc名前解決の内部動作を理解する
Linuxで「DNSは正しいはずなのに名前解決がおかしい」「環境によって挙動が違う」 といった問題に直面したことはないでしょうか。 これらの多くは、glibc(GNU C Librar…
あわせて読みたい


DNS解決ができないときの調査手順(dig/nslookup)
はじめに サーバやPCからインターネットに接続しようとしたとき、ping google.com が失敗する、ブラウザでサイトが開けない、といったトラブルに遭遇することがあります…
