DNS (Domain Name Service) – nslookup を使いこなそう

DNS サーバー

前回までは DNS の概要について説明を行ってきました.

本記事では一歩進んで Windows で利用可能な DNS クライアント,調査ツールである nslookup を使いこなすための解説を行います.

DNS 問合せのレスポンスコードや挙動,どういった場合にそれらが返るのかがわかるようになります.

nslookup の使い方

コマンドプロンプトを起動する

「cmd」を検索すると「コマンドプロンプト」が表示されますのでクリックしてコマンドプロンプトを表示します.

「nslookup」を実行すると nslookup プログラムが起動し,プロンプトが「>」に変わります.

それぞれのレコードの確認方法

正引きアドレス (Aレコード) を確認する

「www.google.com」の A レコードを確認するには,「www.google.com.」と入力します.
「www.google.com」の IP アドレスは IPv4 アドレスだと「142.250.207.4」,IPv6 アドレスだと「2404:6800:4004:820::2004」であることが分かります.

> www.google.com. [Enter]
サーバー:  UnKnown
Address:  192.168.250.2

権限のない回答:
名前:    www.google.com
Addresses:  2404:6800:4004:820::2004
          142.250.207.4

nslookup 起動時,規定では「type=any」が指定されていますので,何も考えずに FQDN を入力することで正引きの名前解決ができます.明示的に指定する場合は次のように type を指定してから実行します.

type=a は A レコードの解決をします.を明示しているため,上の例と違って IPv6 のアドレスは返ってきません.

> set type=a
> www.google.com
サーバー:  UnKnown
Address:  192.168.250.2

権限のない回答:
名前:    www.google.com
Address:  142.250.207.4

逆引きアドレス (PTR) を確認する

逆引きアドレスを確認するには「type=ptr」を指定の上検索したい IP アドレスを入力します.
本来正しくない入力方法ですが,このように IP アドレスを入力するだけでも Windows の nslookup は正しい逆引きアドレスを返してくれます.

> set type=ptr
> 142.250.207.4
サーバー:  UnKnown
Address:  192.168.250.2

権限のない回答:
4.207.250.142.in-addr.arpa      name = nrt13s54-in-f4.1e100.net

正しい逆引きアドレスの解決方法は,IP アドレスを逆順に入力してドメイン名に「.in-addr.arpa.」を入力します.
140.250.207.4 の逆引きアドレスは「4.207.250.140.in-addr.arpa.」になります.

> set type=ptr
> 4.207.250.142.in-addr.arpa.
サーバー:  UnKnown
Address:  192.168.250.2

権限のない回答:
4.207.250.142.in-addr.arpa      name = nrt13s54-in-f4.1e100.net

DNS サーバー (NS レコード) を確認する

あるドメインの権威 DNS サーバーを調べるには「type=ns」を指定の上,確認したいドメインを入力します.

「google.com」の場合は ns1.google.com ~ ns4.google.com が権威 DNS サーバーとなっており,それぞれのサーバーの IPv4 / IPv6 アドレスが分かります.

> set type=ns
> gooogle.com.
サーバー:  UnKnown
Address:  192.168.250.2

権限のない回答:
gooogle.com     nameserver = ns2.google.com
gooogle.com     nameserver = ns1.google.com
gooogle.com     nameserver = ns3.google.com
gooogle.com     nameserver = ns4.google.com

ns2.google.com  internet address = 216.239.34.10
ns2.google.com  AAAA IPv6 address = 2001:4860:4802:34::a
ns1.google.com  internet address = 216.239.32.10
ns1.google.com  AAAA IPv6 address = 2001:4860:4802:32::a
ns3.google.com  internet address = 216.239.36.10
ns3.google.com  AAAA IPv6 address = 2001:4860:4802:36::a
ns4.google.com  internet address = 216.239.38.10
ns4.google.com  AAAA IPv6 address = 2001:4860:4802:38::a

MX レコードを確認する

MX レコードを確認するには「type=mx」を指定の上,確認したいドメインや FQDN を入力します.

> set type=mx
> google.com.
サーバー:  UnKnown
Address:  192.168.250.2

権限のない回答:
google.com      MX preference = 10, mail exchanger = smtp.google.com

smtp.google.com internet address = 142.251.170.26
smtp.google.com internet address = 142.251.170.27
smtp.google.com internet address = 173.194.174.26
smtp.google.com internet address = 142.251.8.26
smtp.google.com internet address = 142.251.8.27
smtp.google.com AAAA IPv6 address = 2404:6800:4008:c19::1a
smtp.google.com AAAA IPv6 address = 2404:6800:4008:c19::1b
smtp.google.com AAAA IPv6 address = 2404:6800:4008:c15::1b
smtp.google.com AAAA IPv6 address = 2404:6800:4008:c15::1a

TXT レコードを確認する

TXT レコードを確認するには「type=txt」を指定の上,確認したいドメインや FQDN を入力します.
TXT レコードには SPF などの情報の他,ドメインの所有者証明に利用されると説明をしています.
google.com の TXT レコードはそのような情報が沢山記載されていることが確認できました.

> set type=txt
> google.com.
サーバー:  UnKnown
Address:  192.168.250.2

権限のない回答:
google.com      text =

        "onetrust-domain-verification=de01ed21f2fa4d8781cbc3ffb89cf4ef"
google.com      text =

        "atlassian-domain-verification=5YjTmWmjI92ewqkx2oXmBaD60Td9zWon9r6eakvHX6B77zzkFQto8PQ9QsKnbf4I"
google.com      text =

        "apple-domain-verification=30afIBcvSuDV2PLX"
google.com      text =

        "google-site-verification=wD8N7i1JTNTkezJ49swvWW48f8_9xveREV4oB-0Hf5o"
google.com      text =

        "google-site-verification=TV9-DBe4R80X4v0M4U_bd_J9cpOJM0nikft0jAgjmsQ"
google.com      text =

        "MS=E4A68B9AB2BB9670BCE15412F62916164C0B20BB"
google.com      text =

        "v=spf1 include:_spf.google.com ~all"

nslookup のオプションを理解する

先ほどより type=XXX と type は幾つか出していますが,nslookup はその他にも様々なオプションがあります.

名前説明
typeクエリーの種類を指定します.A,PTR,NS,MX,TXT などです.
[no]recurse規定は recurse で,再帰問合せが有効です.norecurse とすると再帰問合せは無効になります.
server明示的に問合せを行うリゾルバー (キャッシュ DNS サーバー) を指定します.
debugTTL やレスポンスコード,再帰問合せの情報などを付加します.デバッグ・トラブルシュートを行う場合に利用します.
[no]search検索ドメインを付与する.しない.を決定します.規定では search で,検索ドメインを付与します.

検索ドメインの付与とは

search / nosearch の挙動について説明します.

規定の「search」の状態の場合,DNS 問合せの際に最後に「.」を付けない場合,検索ドメイン名を付与した問合せが先に行われます.画像内の「DNSサフィックス一覧」に記載のドメイン名です.

「lab.seichan.org」がサフィックス一覧にありますので,「.」を最後につけない場合は,従って次のような順番で DNS 問合せが行われます.

www.google.com.lab.seichan.org.
www.gooogle.com.

これはドメイン名を省略した問合せの場合に自動的に付加してくれるため,組織内の名前解決を行うには役に立ちますが,トラブルシュートを行う場合はこれによって混乱が生じる可能性があります.

ですので,明示的に「.」で終える癖をつけておくことをお薦めします.

nosearch を有効にすることで「.」を付けなくても付加を行わないようになります.

debug を使いこなす

debug を使いこなすことで DNS のトラブルシュートにおおいに役立ちます.
まずは代表的な DNS レスポンスコードについて知っておきましょう.

DNS レスポンスコード

コードメッセージ説明
0NOERROR正常に完了したことを表すコード.
1FORMERR返ってきたDNSのフォーマットが不正.bit 化けや 512byte 超のレスポンスが届かない場合などに発生します.
(EDNS0 に対応できていないなど)
2SERVFAILエラーが発生した.
キャッシュサーバーが DNS 検索中にどこかの権威サーバーが無応答でタイムアウトした場合や,CNAME ループによるタイムアウトなど,時間内に応答が返って来ないなどで発生します.
3MXDOMAIN問い合わせた値に対する一切のレコードが存在しない場合に発生します.
(全てのレコードタイプを見ても存在していない)
5REFUSED接続が拒否された.クライアント – サーバー間の Firewall で Reject されている場合や,DNS キャッシュサーバーが拒否しているなどで発生します.
NODATANXDOMAIN の派生.
その他のレコードタイプ (例えばAAAA を問い合わせ,AAAA のレコードは無く, A は存在) が存在している場合は NOERR で完了し,結果が空で完了します.

その他のレスポンスについて知りたい方は以下の URL を参照ください.
https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml

nslookup の set debug の見方

  1. 権威DNSサーバーからの回答なのかどうか
    非表示: 権威 DNS サーバーからの回答
    権限のない回答: リゾルバー (キャッシュサーバー) からの回答
  2. Got answer: DNS 問合せのサマリー
    • rcode: レスポンスの結果
    • questions: 問合せの数
    • authority records: 権威サーバーの数
    • additional: 付加 (グルー)情報の数
  3. QUESTIONS:問合せした内容
  4. ANSWERS: 問合せの回答
  5. AHTHORITY RECORDS:
    委任応答 (リゾルバーが回答) の場合,問い合わせたドメインの権威サーバーの情報が記載されます.
    権威 DNS サーバーが複数ある場合はその数分記載されます.
  6. ADDITIONAL RECORDS:
    権威サーバーの IP アドレス (A や AAAA) を付加した情報が返されます.
    グルー (糊付け) レコードです.委任先の権威サーバー名と IP アドレスを一緒に返すことで名前解決のループを排除することができます.

NOERROR の DNS レスポンス

set debug を有効にした後の「www.google.com.」確認時の結果です.

rcode が NOERROR で応答があり,Answers が 1 以上なので,問合せに対して回答が返って来ていると判断できます.

NODATA の DNS レスポンス

set debug を有効にした後,MX レコードを検索しようとして「www.google.com.」を対象にした際の結果です.

rcode が NODATA ではなく,NOERROR で応答がありますが,Answers が 0なので,指定したリソース (MX) としては存在していないけれど,その他のリソースレコードとしては存在しているということになります.

このような場合,実行結果に権威 DNS サーバーの SOA の情報が表示されます.
この結果になった場合,指定したリソースレコード以外では存在するということがわかりますので 「type=any」で再度検索を行うとどのようなリソース種別で登録されているのか確認することができるはずです.

NXDOMAIN の DNS レスポンス

set debug を有効にした後,「hogehoge.google.com.」という存在しない名前を引いた場合のの結果です.

先の例と違いレスポンスが NXDOMAIN で返って来ていることから,指定したリソースおよびその他のリソースとしてもレコードは登録されていないということがわかります.

この場合の nslookup としての最終結果は「Non-existend domain」が表示されます.

今までの違いとしての NOERROR / NODATA / NXDOMAIN の応答の違いについて理解できたでしょうか.

SERVFAIL の DNS レスポンス

set debug を有効にした後の「www.google.com.」確認時の結果です.

レスポンスが SERVFAIL のため,リゾルバーには到達できたけど,その後の問合せを行ったドメインの権威 DNS サーバーまで到達ができなかった.などのリゾルバーと権威 DNS サーバーの間の何らかのエラーによって発生します.

このようなケースでは,実行結果としては「Server failed」が返ります.

権威 DNS サーバーまで到達できていないことから NODATA / NXDOMAIN と違って権威 DNS サーバーの情報も表示されません.

このような結果が返ってきた場合は以下が調査のポイントとなります.

  • リゾルバー (キャッシュサーバー) から先 (フォワードを行っていればフォワード先,行っていなければインターネット) のネットワークの疎通性があるか
  • 全てのドメインで発生するのか,一部のドメインだけなのか
    • 一部のドメインだけ.の場合,条件付きフォワードが一番疑われます.また本当にそのドメインの権威 DNS サーバーが動作していないかもしれません
    • 全てのドメインの場合,問題はこちら側にあります.疎通性の確認などを一つ一つ明らかにしていく必要があります.

REFUSED の DNS レスポンス

set debug を有効にした後の「www.google.com.」確認時の結果です.

レスポンスが REFUSED のため,リゾルバー (や問合せを行っている DNS サーバー) が問合せを拒否している状態となります.

この場合の実行結果としては「Query refused」が返されます.

もちろん,問合せの段階で拒否されていますので NODATA や NSDOMAIN と違い権威 DNS サーバーの情報も表示されません.

このような結果が返ってきた場合は以下が調査のポイントとなります.

  • リゾルバー自体の ACL の確認.クライアントからの問い合わせを許可しているのか
  • ネットワーク,Firewall の確認 DNS サーバーアクセスを拒否していないか

FORMERR の DNS レスポンス

FORMERR を Windows の nslookup で実現させることが難しく,Linux などでよく用いられる dig コマンドを利用しています.

EDNS0 を有効にして問合せを行っていますが,リゾルバーが対応しておらず,512 byte 内に収まらないため FORMERR という結果が返ります.

通常であれば,ここで TCP Fallback するのでこのようなエラーになる事は稀です.

もしこのような結果になった場合の調査ポイントは次のとおりです

  • UDP Port 53
    512 byte 超のパケットがとおるようになっているか
    • クライアント – リゾルバーの間の Firewall やルーター
    • リゾルバー – 権威 DNS サーバーの間 の Firewall やルーター
  • TCP Port 53
    TCP Fallback した際に TCP Port 53 を利用した通信が可能な状態か

以上で nslookup についての解説を終わります.
次回は Windows DNS の設定について解説していきますので引き続き見て頂ければと思います.

コメント

タイトルとURLをコピーしました