DNS Lookup for Yahoo(MEMO)

USER

まず、つぎのnslookupの内容を見て理解してください。その後に私が質問をします。

C:\Users\daish>nslookup
既定のサーバー: UnKnown
Address: 192.168.0.1

server 198.41.0.4
既定のサーバー: a.root-servers.net
Address: 198.41.0.4

www.yahoo.co.jp
サーバー: a.root-servers.net
Address: 198.41.0.4

名前: www.yahoo.co.jp
Served by:

  • a.dns.jp
    203.119.1.1
    2001:dc4::1
    jp
  • d.dns.jp
    210.138.175.244
    2001:240::53
    jp
  • e.dns.jp
    192.50.43.53
    2001:200:c000::35
    jp
  • f.dns.jp
    150.100.6.8
    2001:2f8:0:100::153
    jp
  • h.dns.jp
    161.232.72.25
    2a01:8840:1bc::25
    jp
  • g.dns.jp
    203.119.40.1
    jp
  • c.dns.jp
    156.154.100.5
    2001:502:ad09::5
    jp
  • b.dns.jp
    202.12.30.131
    2001:dc2::1
    jp

server 203.119.1.1
in-addr.arpa nameserver = e.in-addr-servers.arpa
in-addr.arpa nameserver = f.in-addr-servers.arpa
in-addr.arpa nameserver = d.in-addr-servers.arpa
in-addr.arpa nameserver = c.in-addr-servers.arpa
in-addr.arpa nameserver = b.in-addr-servers.arpa
in-addr.arpa nameserver = a.in-addr-servers.arpa
e.in-addr-servers.arpa internet address = 203.119.86.101
e.in-addr-servers.arpa AAAA IPv6 address = 2001:dd8:6::101
f.in-addr-servers.arpa internet address = 193.0.9.1
f.in-addr-servers.arpa AAAA IPv6 address = 2001:67c:e0::1
d.in-addr-servers.arpa internet address = 200.10.60.53
d.in-addr-servers.arpa AAAA IPv6 address = 2001:13c7:7010::53
c.in-addr-servers.arpa internet address = 196.216.169.10
c.in-addr-servers.arpa AAAA IPv6 address = 2001:43f8:110::10
b.in-addr-servers.arpa internet address = 199.253.183.183
b.in-addr-servers.arpa AAAA IPv6 address = 2001:500:87::87
a.in-addr-servers.arpa internet address = 199.180.182.53
a.in-addr-servers.arpa AAAA IPv6 address = 2620:37:e000::53
既定のサーバー: [203.119.1.1]
Address: 203.119.1.1

www.yahoo.co.jp
サーバー: [203.119.1.1]
Address: 203.119.1.1

名前: www.yahoo.co.jp
Served by:

  • ns01.yahoo.co.jp
    118.151.254.133
    yahoo.co.jp
  • ns12.yahoo.co.jp
    124.83.255.101
    yahoo.co.jp
  • ns11.yahoo.co.jp
    124.83.255.37
    yahoo.co.jp
  • ns02.yahoo.co.jp
    118.151.254.149
    yahoo.co.jp

server 118.151.254.133
既定のサーバー: [118.151.254.133]
Address: 118.151.254.133

www.yahoo.co.jp
サーバー: [118.151.254.133]
Address: 118.151.254.133

名前: www.yahoo.co.jp

ASSISTANT

このnslookupの出力は、ユーザーがDNSサーバーを使用してwww.yahoo.co.jpドメインの情報を検索しています。nslookupは、IPアドレスとドメイン名を相互に変換するためのツールです。以下、出力の解説です。

  1. 最初に、デフォルトのDNSサーバーが使用されていることが示されています。
    既定のサーバー: UnKnown
    Address: 192.168.0.1
  2. 次に、ルートサーバーの1つであるa.root-servers.net (198.41.0.4)を指定しています。
    既定のサーバー: a.root-servers.net
    Address: 198.41.0.4
  3. その後、a.root-servers.netからwww.yahoo.co.jpに関する情報を要求しています。このサーバーは、yahoo.co.jpドメインに関する情報を持っている他のDNSサーバーを示しています。
  4. 次に、そのリストから1つのDNSサーバー (203.119.1.1) を選択し、再度www.yahoo.co.jpの情報を要求します。このサーバーは、Yahooのドメインの詳細を持っている4つの異なるDNSサーバーを示しています。
  5. 最後に、そのリストから1つのDNSサーバー (118.151.254.133) を選択し、再度www.yahoo.co.jpの情報を要求します。ただし、最後の出力ではIPアドレスが表示されていません。

以上の手順を経て、www.yahoo.co.jpドメインに関する情報を取得しようとしています。しかし、最後の出力でIPアドレスが表示されなかったため、完全な情報は得られていません。

USER

そのとおりです。なぜ最後の出力でIPアドレスが表示されていないのですか?これではwww.yahoo.co.jpにはたどり着けません。

ASSISTANT

最後の出力でIPアドレスが表示されていない理由は、nslookupクエリが完全に実行されていないか、あるいは、出力が途中で切り取られている可能性があります。通常は、最後のnslookupクエリでwww.yahoo.co.jpのIPアドレスが表示されるはずです。

この問題を解決するために、再度nslookupを実行して、途中で出力が切り取られていないことを確認してください。もし問題が解決しない場合、以下の手順でnslookupを実行することができます。

  1. コマンドプロンプトを開きます。
  2. 次のコマンドを入力して、nslookupツールを起動します: nslookup
  3. 次のコマンドを入力して、yahoo.co.jpドメインの情報を要求します: www.yahoo.co.jp

最後のクエリで、www.yahoo.co.jpのIPアドレスが表示されるはずです。これにより、www.yahoo.co.jpにアクセスするために必要なIPアドレスが得られます。

USER

118.151.254.133は、yahoo.co.jpのネームサーバーですよね?このネームサーバーからwww.yahoo.co.jpのIPアドレスを知るための方法を教えてください。

ASSISTANT

はい、118.151.254.133はyahoo.co.jpのネームサーバー(ns01.yahoo.co.jp)の1つです。このネームサーバーからwww.yahoo.co.jpのIPアドレスを取得するには、以下の手順でnslookupを使用します。

  1. コマンドプロンプトを開きます。
  2. 次のコマンドを入力して、nslookupツールを起動します: nslookup
  3. 次のコマンドを入力して、yahoo.co.jpのネームサーバーを指定します: server 118.151.254.133
  4. 次のコマンドを入力して、www.yahoo.co.jpのIPアドレスを要求します: www.yahoo.co.jp

これにより、www.yahoo.co.jpのIPアドレスが表示されます。このIPアドレスを使用して、www.yahoo.co.jpにアクセスすることができます。

USER

以下がその実行結果です。表示されませんが、なぜですか?

C:\Users\daish>nslookup
既定のサーバー: UnKnown
Address: 192.168.0.1

server 118.151.254.133
既定のサーバー: ns01.yahoo.co.jp
Address: 118.151.254.133

www.yahoo.co.jp
サーバー: ns01.yahoo.co.jp
Address: 118.151.254.133

名前: www.yahoo.co.jp

>

ASSISTANT

失礼しました。私が提案した方法でIPアドレスが表示されなかった理由は、nslookupがデフォルトでAレコード(IPv4アドレス)を問い合わせているにもかかわらず、www.yahoo.co.jpがCNAMEレコード(別名)であるためです。

CNAMEレコードは、1つのドメイン名を別のドメイン名にマッピングするために使用されます。これを解決するために、CNAMEレコードを解決して、対応するAレコードを取得する必要があります。以下の手順でnslookupを使用してください。

  1. コマンドプロンプトを開きます。
  2. 次のコマンドを入力して、nslookupツールを起動します: nslookup
  3. 次のコマンドを入力して、yahoo.co.jpのネームサーバーを指定します: server 118.151.254.133
  4. 次のコマンドを入力して、www.yahoo.co.jpのCNAMEレコードを要求します: set q=CNAME
  5. 再度、次のコマンドを入力して、www.yahoo.co.jpのCNAMEレコードを要求します: www.yahoo.co.jp
  6. CNAMEレコードが表示されたら、Aレコードを問い合わせるために、次のコマンドを入力します: set q=A
  7. 最後に、CNAMEレコードで表示されたドメイン名を入力して、対応するAレコードを要求します。

これにより、www.yahoo.co.jpのIPアドレスが表示されるはずです。

USER

それは、www.yahoo.co.jpに紐づいたAレコードが無いことを知っている場合の手順です。
通常ブラウザがwww.yahoo.co.jpを表示する際に動作するDNSクエリの手順としては、一般には、Aレコードを探して存在しなかった場合に、CNAMEレコードを探す、という手順になるのですか?

ASSISTANT

失礼しました。通常のブラウザがDNSクエリを行う際の手順についてのご質問にお答えします。

通常、ブラウザはまずAレコード(IPv4アドレス)またはAAAAレコード(IPv6アドレス)を問い合わせます。その際、CNAMEレコードが存在する場合、DNSサーバーは自動的にCNAMEレコードを解決し、最終的なAレコードまたはAAAAレコードを返します。ブラウザは手動でCNAMEレコードを探す必要はありません。

つまり、ブラウザがwww.yahoo.co.jpを表示しようとする場合、以下の手順が実行されます。

  1. ブラウザは、www.yahoo.co.jpのAレコードまたはAAAAレコードを問い合わせます。
  2. DNSサーバーは、www.yahoo.co.jpのCNAMEレコードが存在することを検出し、自動的にそれを解決します。
  3. DNSサーバーは、解決されたCNAMEレコードに対応するAレコードまたはAAAAレコードを返します。
  4. ブラウザは、返されたIPアドレスを使用して、www.yahoo.co.jpにアクセスします。

従って、ブラウザが通常のDNSクエリの手順でwww.yahoo.co.jpを表示する際、まずAレコードまたはAAAAレコードを探し、存在しなかった場合にCNAMEレコードを探すという手順ではなく、DNSサーバーがCNAMEレコードの解決を自動的に行います。

USER

今回118.151.254.133は、手順2に書いてあるようなCNAMEレコードが存在することを教えてくれていません。手順2に書いてある「検出」とは、どのような手順で実現されるのですか?

ASSISTANT

失礼しました。手順2で言及した「検出」という表現は説明が不十分でした。手順2で言いたかったことは、DNSサーバーがクエリを処理する際に、CNAMEレコードが存在する場合、それを解決し、対応するAレコードまたはAAAAレコードを返すということです。

通常、クライアント(ブラウザ)は、AレコードまたはAAAAレコードを直接問い合わせます。しかし、問い合わせたドメインがCNAMEレコードに対応している場合、DNSサーバーはCNAMEレコードを解決し、最終的なAレコードまたはAAAAレコードを返す責任があります。

DNSサーバーがCNAMEレコードを解決する手順は以下のとおりです。

  1. クライアント(ブラウザ)がAレコードまたはAAAAレコードを問い合わせます。
  2. DNSサーバーは問い合わせられたドメインのレコードを検索します。
  3. DNSサーバーがCNAMEレコードを検出すると、そのCNAMEレコードが指すドメイン名(別名)に対応するAレコードまたはAAAAレコードを検索します。
  4. DNSサーバーは、CNAMEレコードが指すドメイン名に対応するAレコードまたはAAAAレコードをクライアントに返します。

今回のケースでは、nslookupコマンドを使用したため、直接的なCNAMEレコードの情報が表示されていません。しかし、通常のブラウザでアクセスする場合、DNSサーバーが自動的にCNAMEレコードの解決を行い、対応するIPアドレスを返すため、問題なくアクセスできます。

USER

nslookupの問い合わせ方法と、ブラウザで問い合わせる方法は、DNSの問い合わせのリクエストが異なるということですね。具体的に、どのようなDNSプロトコル上のリクエスト方法の違いがあるかおしえてください。

ASSISTANT

nslookupとブラウザのDNS問い合わせ方法に違いがあるわけではありません。どちらもDNSプロトコルを使用してドメイン名に対応するIPアドレスを問い合わせます。ただし、nslookupはDNSデバッグツールであり、ブラウザはウェブページの表示に特化しています。そのため、表示される情報が異なることがあります。

DNSプロトコル上のリクエスト方法は、基本的にどちらも同じです。DNSクライアント(ブラウザやnslookup)は、ドメイン名とリクエストタイプ(Aレコード、AAAAレコード、CNAMEレコードなど)を指定してDNSサーバーに問い合わせを行います。DNSサーバーは問い合わせに対応するレコードを検索し、結果をクライアントに返します。

nslookupの結果がブラウザの動作と異なる場合があるのは、nslookupがデバッグツールであり、クエリの結果を直接表示するためです。これに対して、ブラウザはDNSサーバーから受け取った情報を基にウェブページの表示を行い、CNAMEレコードの解決が自動的に行われるため、ユーザーはその詳細を知ることができません。

このケースで、nslookupがwww.yahoo.co.jpのIPアドレスを表示しなかったのは、デフォルトでAレコードを問い合わせているにもかかわらず、www.yahoo.co.jpがCNAMEレコードであったためです。これはnslookupの表示方法の問題であり、DNSプロトコル上のリクエスト方法の違いではありません。ブラウザでは、自動的にCNAMEレコードが解決され、対応するIPアドレスが返されるため、問題なくアクセスできます。

USER

digコマンドの場合は1回のDNSクエリでIPアドレスが解決されます。nslookupのコマンドは1回のDNSクエリでなぜ解決されないのですか?以下はdigでの実行結果です。

[ec2-user@ip-172-31-46-21 ~]$ dig www.yahoo.co.jp

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> www.yahoo.co.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41917
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.yahoo.co.jp. IN A

;; ANSWER SECTION:
www.yahoo.co.jp. 300 IN CNAME edge12.g.yimg.jp.
edge12.g.yimg.jp. 42 IN A 182.22.25.124

;; Query time: 8 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Thu Mar 16 08:26:07 JST 2023
;; MSG SIZE rcvd: 88

ASSISTANT

digコマンドとnslookupコマンドはどちらもDNS問い合わせを行うツールですが、結果の表示方法が異なります。digコマンドは、DNSクエリの結果をより詳細に表示するため、CNAMEレコードとそれに対応するAレコードが同時に表示されます。これに対して、nslookupはデフォルトでAレコードの問い合わせを行い、CNAMEレコードが存在する場合でも、結果にその詳細が表示されないことがあります。

nslookupが1回のDNSクエリでIPアドレスが解決されない理由は、実際には1回のクエリで解決されているが、表示される情報が異なるためです。nslookupはデフォルトでAレコードを問い合わせますが、問い合わせたドメインがCNAMEレコードである場合、表示される情報にはCNAMEレコードが指すドメイン名しか含まれません。しかし、実際の通信では、DNSサーバーはCNAMEレコードを解決し、対応するIPアドレスをクライアントに返します。

digコマンドの場合、結果にCNAMEレコードとそれに対応するAレコードが同時に表示されるため、1回のDNSクエリでIPアドレスが解決されているように見えます。実際には、どちらのツールも1回のDNSクエリでIPアドレスを取得していますが、表示される情報が異なるため、このような違いが生じています。

USER

nslookupコマンドで、問い合わせたドメインがCNAMEレコードである場合、表示される情報にはAレコードを返すようにするには、何かオプション等をつければよいですか?

ASSISTANT

nslookupコマンドを使って、CNAMEレコードと対応するAレコードを取得するには、次の手順で実行できます。

  1. まず、ドメイン名のCNAMEレコードを取得します。
nslookup -type=CNAME www.example.com
  1. 上記のコマンドから取得したCNAMEレコードに対応するドメイン名をメモし、次にそのドメイン名のAレコードを取得します。
nslookup -type=A cname.example.com

ただし、これは2つの別々のコマンドを実行しているため、1回のコマンドでCNAMEレコードと対応するAレコードを取得することはできません。nslookupはデバッグツールであり、デフォルトではCNAMEレコードとAレコードを同時に表示する機能がありません。

代わりに、digコマンドを使用することで、1回のコマンドでCNAMEレコードと対応するAレコードを取得できます。

dig +short www.example.com

このコマンドは、CNAMEレコードとそれに対応するAレコードを同時に表示します。ただし、digコマンドは主にUNIX系のシステムで使用されるツールであり、Windowsでは通常は使用できません。Windowsでdigコマンドを使用するには、CygwinやWSL (Windows Subsystem for Linux) などの追加ソフトウェアが必要です。

USER

最初に私がお送りしたコマンドに加えて、以下のようにしました。これをこれまでの経緯も含めてnslookupコマンドを説明してもらえますか。

set type=cname
www.yahoo.co.jp
サーバー: [118.151.254.133]
Address: 118.151.254.133

www.yahoo.co.jp canonical name = edge12.g.yimg.jp

set type=a
edge12.g.yimg.jp
サーバー: [118.151.254.133]
Address: 118.151.254.133

名前: edge12.g.yimg.jp
Served by:

  • gns12.yahoo.co.jp g.yimg.jp
  • gns02.yahoo.co.jp g.yimg.jp

server gns12.yahoo.co.jp
既定のサーバー: gns12.yahoo.co.jp
Address: 124.83.255.100

edge12.g.yimg.jp
サーバー: gns12.yahoo.co.jp
Address: 124.83.255.100

名前: edge12.g.yimg.jp
Address: 183.79.219.252

>

ASSISTANT

この追加のnslookupコマンドは、最初にお送りいただいたnslookupコマンドの続きで、CNAMEレコードとAレコードを順に取得しています。以下に、このコマンドの各ステップとその説明を示します。

  1. CNAMEレコードの取得:
> set type=cname
> www.yahoo.co.jp

このコマンドは、nslookupにCNAMEレコードの取得を指示しています。結果として、www.yahoo.co.jpのCNAMEレコードが表示され、edge12.g.yimg.jpであることがわかります。

  1. Aレコードの取得:
> set type=a
> edge12.g.yimg.jp

CNAMEレコードが指すドメイン名edge12.g.yimg.jpのAレコードを取得するように指示しています。ただし、この時点ではAレコードは表示されず、代わりにgns12.yahoo.co.jpgns02.yahoo.co.jpという2つのネームサーバーが表示されています。これらは、g.yimg.jpドメインのネームサーバーです。

  1. ネームサーバーの変更:
> server gns12.yahoo.co.jp

このコマンドは、nslookupの既定のネームサーバーをgns12.yahoo.co.jpに変更しています。これにより、次のDNS問い合わせはこのネームサーバーに送信されます。

  1. Aレコードの再取得:
> edge12.g.yimg.jp

このコマンドは、再びedge12.g.yimg.jpのAレコードを取得しようとしています。今回は、gns12.yahoo.co.jpネームサーバーから正しいAレコードが取得され、IPアドレス183.79.219.252が表示されています。

これらのコマンドを使用して、www.yahoo.co.jpのCNAMEレコードを取得し、そのCNAMEレコードが指すドメイン名のAレコード(IPアドレス)を正しく取得しました。これにより、www.yahoo.co.jpの実際のIPアドレスを確認できます。

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