🐧 Linux 総合学習プラットフォーム
ネットワーク基礎 ・ 中級

名前解決の確認

つながらない原因が「経路」なのか「名前解決」なのかを切り分けることは重要です。IPアドレス直打ちでは届くのに名前ではダメな場合、DNSが疑わしいといえます。dig や nslookup で対象ドメインのIPアドレスや応答してくれるDNSサーバを確認します。dig は応答の詳細まで見られ、nslookup は手軽に引けるのが特徴です。

「つながらない」という症状に出くわしたとき、その原因が経路(パケットの通り道)にあるのか、それとも名前解決(名前からIPアドレスへの変換)にあるのかを切り分けることは、調査をぐっと効率化します。両者はまったく別の段階で起きる問題なので、ごちゃ混ぜにして闇雲に設定を見直すと遠回りになります。切り分けの考え方はシンプルで、IPアドレスを直接指定すれば届くのに、名前を指定すると届かない——この状況なら、ネットワークの経路そのものは生きていて、疑うべきは名前解決、つまりDNS側だと判断できます。逆に、名前でもIPアドレスでも届かないなら、問題はより下の層(経路やゲートウェイ、インターフェース)にある可能性が高い、と見当がつきます。この一段を意識するだけで、調べる範囲が半分に絞れます。

dig で名前を引く

名前解決の状態を詳しく調べる定番が dig コマンドです。dig www.example.com のように使うと、問い合わせの詳細な結果が表示されます。注目すべきはANSWER SECTION(応答欄)で、ここに名前に対応するIPアドレス(AレコードならIPv4アドレス)が並びます。ここにアドレスが返ってくれば名前解決は成功しており、返ってこなければ解決に失敗している、と読み取れます。答えだけを手早く知りたいときは dig +short www.example.com とすると、対応するIPアドレスだけが短く表示されます。出力の末尾にある SERVER の行には、実際に問い合わせに答えてくれたDNSサーバのアドレスが示されるので、「どのDNSサーバが応答しているか」も同時に確認できます。名前解決はふだんUDPの53番ポートで行われるので、SERVER 行にも 53 番が示されます。

dig にはトラブル切り分けに役立つ使い方がいくつかあります。特定のDNSサーバに直接問い合わせたいときは dig @8.8.8.8 www.example.com のように @ に続けてサーバのアドレスを指定します。これを使うと、いま設定されているDNSサーバの調子が悪いのか、それとも名前そのものに問題があるのかを分けて確かめられます。たとえば、設定中のサーバでは引けないのに、別のサーバを指定すると引ける場合、原因は自分の参照先DNSサーバ側にあると分かります。逆にIPアドレスからホスト名を引きたいときは dig -x 210.250.32.116 のように -x を使います(逆引き)。逆引きは登録されていないことも多いので、引けなくても異常とは限りません。どの階層のサーバを順にたどって答えにたどり着いたかを根元から追いたいときは dig +trace も使えます。これらを組み合わせると、「名前が登録されていないのか」「自分のDNSサーバだけが答えられないのか」「経路の問題でDNSサーバに届いていないのか」を一つずつ切り分けられます。

nslookup という選択肢

より手軽に名前解決を試したいときは nslookup コマンドも使えます。nslookup www.example.com とすると、最初に問い合わせ先のDNSサーバ(Server と Address)が表示され、続いて結果が出ます。出力の最後の Address 行が、指定した名前に対応するIPアドレスです。途中に canonical name と出ることがありますが、これは別名(エイリアス)の本当の名前を示しています。dig が応答の全項目を省略せず細かく見せてくれるのに対し、nslookup は要点を手早く確認するのに向きます。どちらを使ってもよいので、まずは結果のIPアドレスが返るかどうかに注目しましょう。返らなければ、DNSサーバの設定ミスや到達不可が疑われます。なお、より詳しく確実に調べたい現場では nslookup より dig が好まれる傾向があります。

参照先サーバの確認

名前解決がうまくいかないときは、そもそも自分がどのDNSサーバに問い合わせているかを確認することも欠かせません。Linuxでは参照先のDNSサーバが /etc/resolv.conf の nameserver 行に書かれています。ここに正しいサーバのアドレスが書かれていなかったり、到達できないアドレスが指定されていたりすると、名前解決そのものが成立しません。dig の出力末尾の SERVER 行と、このファイルの内容を突き合わせれば、「想定どおりのサーバに問い合わせているか」を確かめられます。多くの環境ではこのファイルは自動生成されますが、調査の際は中身を一度確認しておくと安心です。DNSサーバ自体に到達できているかは、その nameserver のアドレスへ ping を打って確かめることもできます。

実務での切り分けは、次の順序が分かりやすいでしょう。まず ping を名前で打ってみて失敗したら、同じ相手をIPアドレスで ping してみます。IPアドレスなら通るのに名前で通らないなら、これは名前解決の問題だと確定できるので、dig や nslookup でその名前が引けるかを確かめ、引けなければ /etc/resolv.conf のDNSサーバ設定や、dig @別のサーバ での比較に進みます。逆に名前でもIPでも通らないなら、DNSではなく経路側の問題として ip addr・ip route・traceroute などで調べる方向へ切り替えます。このように、名前解決という一段を独立した検査項目として扱うことで、「なぜか特定のサイトだけ開けない」「IPでは入れるのにURLでは開けない」といった分かりにくい症状も、落ち着いて原因の所在へたどり着けるようになります。dig や nslookup、/etc/resolv.conf の確認はいずれも状態を見るだけの安全な操作なので、つながらないと感じたら、まず名前が引けるかどうかを早い段階で確かめる癖をつけておくと、無駄な設定変更を避けられます。

この項目に出てくる用語

DNSでぃーえぬえす
ドメイン名とIPアドレスを対応付ける仕組み。
名前解決なまえかいけつ
ドメイン名をIPアドレスに変換する処理のこと。
Aレコードえーれこーど
ドメイン名にIPv4アドレスを対応させるDNSの記録。

関連コマンド

dignslookupping

▶ 学習アプリでこの続きを学ぶ・演習する