インフラ作業支援ラボInfra Support Lab← ガイド一覧← 戻る

LinuxでDNS名前解決できない原因と確認手順|getent・resolv.conf・dig

Linuxでホスト名をIPアドレスへ名前解決できないとき、いきなり/etc/resolv.confを書き換えず、NSS・ローカル設定・resolver・DNSサーバー・通信経路を順番に確認して原因を切り分けるページです。

このページの目的

getentdigの結果を比較し、「Linuxの名前解決経路で失敗」「DNS問い合わせ自体が失敗」「特定の名前・DNSサーバーだけ失敗」を分けます。設定変更より先に、どこで止まっているかを確認します。

最初にやること

障害が出ているホスト名でgetent hostsを実行し、次にdigを確認します。両方の結果が違う場合は、nsswitch.conf/etc/hostsを含むLinux側の名前解決経路を優先して確認します。

このページの対象:Linuxクライアント側でDNS・名前解決が失敗するケースです。BINDなど権威DNSサーバーの構築・ゾーン設計は対象外です。名前解決は成功しているのにSSHだけ接続できない場合は、SSH接続トラブルガイドを確認してください。

DNSトラブル早見表

最初の確認結果から、次に見る場所を決めます。1つのコマンド結果だけで原因を断定しないのがポイントです。

症状・確認結果優先して確認する範囲次の確認
getentdigも失敗resolver設定、DNSサーバー、経路・通信resolv.confresolvectl → DNS指定dig
dig成功、getent失敗NSS、/etc/hosts、名前解決順序nsswitch.conf/etc/hosts
IPアドレスなら通信できるが名前だけ失敗名前解決系getent hostsdig
特定ホスト名だけ失敗対象レコード、検索ドメイン、hostsFQDNで確認 → DNS応答コード確認
NXDOMAIN問い合わせた名前・DNSゾーンFQDN・レコード有無を確認
SERVFAILやtimeoutDNSサーバー処理、上流、経路別DNS指定・経路・パケット確認

目的からDNSの確認先を選ぶ

まず名前解決障害かを確認する

アプリケーションのエラーだけでDNS障害と決めつけず、障害が出ている名前をLinux自身が解決できるか確認します。対象ホスト名は実際に失敗している名前へ置き換えてください。

getent hosts example.com dig example.com

getentはName Service Switch(NSS)の設定に従ってhostsデータベースを参照します。一方、digはDNS問い合わせの確認に向いています。2つを比較すると、DNSそのものとLinux側の名前解決経路を分けやすくなります。

pingだけで判定しない:ICMPが許可されていない環境もあるため、ping失敗だけでネットワークやDNSの異常を確定しません。

getentでLinuxの名前解決を確認する

getent hosts example.com getent ahosts example.com
詳しく確認:コマンドごとの役割や結果の比較を詳しく確認する場合は DNS確認コマンドの使い分けへ。

getent/etc/nsswitch.confで設定されたNSS経由で問い合わせます。普段のアプリケーションがOSの名前解決機能を使う場合に近い確認として使えます。

nsswitch.confと/etc/hostsを確認する

grep -E '^hosts:' /etc/nsswitch.conf grep -n 'example.com' /etc/hosts

hosts:行は環境によってfilesdnsresolvemyhostnamemymachinesなどのNSSモジュールを含みます。利用できるモジュールは環境によって異なり、順序や条件によってDNSより先に/etc/hostsやローカル名が参照されることがあります。

dig成功・getent失敗なら:DNSサーバー自体を直す前に、hosts:行と/etc/hosts、NSSモジュールの状態を確認します。

/etc/resolv.confを確認する

ls -l /etc/resolv.conf cat /etc/resolv.conf
詳しく確認:systemd-resolvedや127.0.0.53、resolv.confの管理元を詳しく確認する場合は systemd-resolvedとresolv.confへ。

主に確認するのはnameserversearchoptionsです。glibc resolverではnameserverに問い合わせ先を、searchに検索ドメインを設定できます。

いきなり編集しない:/etc/resolv.confはNetworkManager、systemd-resolved、DHCPクライアントなどにより生成・管理される場合があります。まずls -lでsymlinkか確認し、管理元を特定してから変更してください。

短いホスト名だけ失敗する場合はsearchoptions ndots:の影響も確認します。まずFQDNでも同じ症状になるか比較すると切り分けやすくなります。

systemd-resolved環境を確認する

systemctl is-active systemd-resolved resolvectl status resolvectl query example.com

systemd-resolvedを使う環境では、リンクごとのDNSサーバーや検索・ルーティングドメインをresolvectl statusで確認できます。/etc/resolv.confがローカルstub resolverを指している構成もあるため、127.0.0.53が書かれているだけで誤設定とは判断しません。

複数NIC・VPN環境:systemd-resolvedではDNSサーバーがインターフェースごとに設定される場合があります。グローバルなresolv.confだけでなく、どのリンクへDNS問い合わせがルーティングされるかも確認します。

digでDNS問い合わせを確認する

dig example.com # DNSサーバーを明示して比較 dig @192.0.2.53 example.com # 必要な場合はTCPでも比較 dig +tcp @192.0.2.53 example.com
詳しく確認:NOERROR・NXDOMAIN・SERVFAIL・REFUSEDなど応答コードを詳しく切り分ける場合は digのstatusの見方へ。

DNSサーバーを明示したdig @DNS_SERVERで、特定のDNSサーバーへ問い合わせた結果を比較できます。デフォルト問い合わせと結果が違う場合は、実際に選ばれているDNSサーバーや経路を確認します。

結果考え方
dig成功・getent失敗NSS、hosts、resolver統合部分を優先して確認
デフォルトdig失敗・特定DNS指定は成功通常利用しているDNSサーバーや選択経路を確認
どのDNS指定でもtimeoutDNSサーバー到達性、Firewall、経路を確認
NXDOMAIN問い合わせ先DNSは応答しているため、名前・ゾーン・レコードの存在を確認

DNSサーバーへの経路・通信を確認する

DNSサーバーが分かったら、そのアドレスへのルートと、必要に応じてDNSパケットの送受信を確認します。

ip route get 192.0.2.53 # TCP/53の確認。これだけでDNS全体が正常とは判断しない nc -vz 192.0.2.53 53 # 必要な場合のみパケット確認 sudo tcpdump -ni any 'port 53'

通常のDNS問い合わせではUDPが使われることが多く、応答サイズや条件によってTCPも使われます。そのためncでTCP/53へ接続できることだけを根拠に「DNSは正常」とは判断しません。digの応答とパケット確認を合わせます。

よくあるエラー文字列・DNS応答

表示最初に考えること
Temporary failure in name resolution一時的なresolver/DNS失敗として、getent、resolver設定、DNS応答を確認
Could not resolve hostアプリが指定名を解決できていないため、対象名とOS側名前解決を確認
Name or service not known名前の誤り、NSS、DNS結果などを確認。文字列だけで原因を確定しない
NXDOMAINDNSサーバーから「その名前は存在しない」という応答。名前・ゾーン・レコードを確認
SERVFAILDNSサーバーが処理を完了できていない。上流・DNSSEC・サーバー状態などサーバー側調査も必要
timeout / no servers could be reachedDNSサーバー、経路、Firewall、resolverの問い合わせ先を確認

確認結果から次の対応を決める

確認結果次に見る場所
getentdigも失敗resolv.confresolvectl、DNSサーバー指定dig、経路
dig成功・getent失敗nsswitch.conf/etc/hosts、NSSモジュール
resolv.confがstub resolverを指すresolvectl statusで実際のDNSサーバー・リンクを確認
特定DNS指定だけ成功通常利用しているDNSサーバーと選択経路を確認
問い合わせは出るが応答がないDNSサーバー、経路、Firewall、上流
名前解決は成功するがSSHだけ失敗SSH接続トラブルガイド

設定変更前のチェック

このページのゴール:「とりあえずDNS設定を書き換える」のではなく、NSS・resolver・DNSサーバー・通信のどこに問題があるかを確認してから、管理元に合った修正を行うことです。

参考資料

名前解決後もSSHだけ接続できない場合

DNS解決が成功しているのにSSH接続が失敗する場合は、TCP接続・sshd・認証をSSHトラブルガイドで切り分けます。

SSH接続を確認