🐧 Linux 総合学習プラットフォーム
中級 ・ DNS / dig / 名前解決

名前解決がおかしい時の切り分け

「特定のホスト名だけ繋がらない」「サーバによって引ける・引けないが違う」。DNSのどの段階で食い違っているのかを順番に切り分けたい。

手順

dig +short example.comまず普段使いのリゾルバでAレコードを引く。何も返らないのか、想定外のIPが返るのかで、この後の追い方が変わる。
dig @8.8.8.8 +short example.com@でDNSサーバを指定して外部のパブリックDNSに直接聞く。ここで正しく引けるなら、問題は自分側のリゾルバ設定にある。
cat /etc/resolv.confこのマシンがどのDNSサーバに聞いているかを確認する。systemd-resolved環境では127.0.0.53が書かれており、実体の参照先はresolvectl statusで見る。
getent hosts example.comdigはDNSにしか聞かないが、getentは/etc/hostsも含めた「アプリと同じ順序」で解決する。digと結果が違うなら/etc/hostsの古い記述が犯人の可能性が高い。
grep '^hosts:' /etc/nsswitch.conf名前解決の順序(例: files dns)を確認する。filesが先ならhostsファイルがDNSより優先される、という仕組みを裏取りする。
dig +short example.com @ns1.example-dns.net最後に権威DNSサーバへ直接聞き、大元の登録値を確認する。ここが正しくて手元が古いなら、キャッシュのTTL切れ待ちか、リゾルバのキャッシュ削除で解決する。
注意「digで引けるのにアプリは繋がらない」場合、/etc/hostsやnsswitchの順序が原因のことが多い。digの結果だけで正常と断定せず、必ずgetentでアプリ目線の解決結果も確認すること。

▶ 学習アプリで実務レシピを使う