1
4

More than 3 years have passed since last update.

HTTP経由で世界中のネームサーバーを使いDNSクエリを実行する

Last updated at Posted at 2020-04-06

本稿では、HTTP経由でDNSクエリを実行できるAPIサービスについて紹介します。
これらサービスを活用することで、DNSレコード情報を、世界のさまざまな場所にある複数のネームサーバーを使って照合することが可能です。

これにより、ドメインのレコードに変更を加えた際の「DNS伝播(DNS propagation)」や、「位置情報認識DNSサーバー(geo-aware DNS servers)」、および「エニーキャストDNS展開(Anycast DNS deployments)」の検証とトラブルシューティングに使用することができます。

HTTP経由でDNSクエリを実行できるAPIサービス

サービス名 URL 特徴
Multilocation DNS Looking Glass(DNS-LG) http://www.dns-lg.com/ 9か国に24のノードを使い分けることができる。HTTP経由でDNSクエリを実行し、IPv4アドレスとIPv6アドレスの両方の逆PTRレコードの取得が可能。JSONエンコードされたDNS応答を出力
RRDA(RRDA REST DNS API) https://www.statdns.com/tools/ DNS-LGをサポートするAPI、オープンソースプロジェクトとして公開
DNS Bajaj http://www.zonecut.net/dns/index.cgi ネームサーバー間の相互関係をGraphvizを使ってグラフ描画することができる。
DNS Propagation Checker https://www.whatsmydns.net/ DNS伝播の状況について世界地図に描画し確認することができる。
Multi Server DNS Lookup (DNS Lookingglass) https://isc.sans.edu/tools/dnslookup.html ホスト名に対して一括して異なる国のDNSサーバにて検索ができる。
Dig web interface https://www.digwebinterface.com/ Webインターフェイスをもつdigコマンド。詳細なオプションスイッチを指定することができる。
Web-based Dig https://networking.ringofsaturn.com/Tools/dig.php
KLOTH.NET http://www.kloth.net/services/dig.php
HScripts.com https://www.hscripts.com/tools/HDNT/dns-record.php

Multilocation DNS Looking Glass(DNS-LG)の使用例

ここでは、DNS-LGを使用し、ホストアドレスの取得(Aレコード)を行います。
次の実行例では、エニーキャストノードとして、google1(8.8.8.8, AS15169)を指定しています。DNS-LGではこのほか24のノードを使い分けることが可能です。詳細な指定方法はDNS-LGのサイトを確認してください。

$ curl http://www.dns-lg.com/google1/qiita.com/a 
{
    "question": [
        {
            "name": "qiita.com.",
            "type": "A",
            "class": "IN"
        }
    ],
    "answer": [
        {
            "name": "qiita.com.",
            "type": "A",
            "class": "IN",
            "ttl": 59,
            "rdlength": 4,
            "rdata": "52.199.34.118"
        },
        {
            "name": "qiita.com.",
            "type": "A",
            "class": "IN",
            "ttl": 59,
            "rdlength": 4,
            "rdata": "52.199.172.165"
        },
        {
            "name": "qiita.com.",
            "type": "A",
            "class": "IN",
            "ttl": 59,
            "rdlength": 4,
            "rdata": "54.65.34.62"
        }
    ]
}

さらに、jqコマンドを使い、JSON形式のデータからIPアドレスの値だけを抽出します。

$ curl -s http://www.dns-lg.com/google1/qiita.com/a | jq -r '.answer[].rdata'
52.199.34.118
52.199.172.165
54.65.34.62

なお、curlコマンドの-sオプションは、不要なプログレスメーターを除去するために指定してあります。

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   735  100   735    0     0   1101      0 --:--:-- --:--:-- --:--:--  1101

dig コマンドの使用例

ローカル環境では、digコマンドを実行し、DNSクエリを実行することができます。
ここでは、+noallオプションを指定し、統計、コメント、その他のIPアドレスに直接関連しない情報を無効にしています。
また、+answerオプションを指定し、必要なDNSサーバーからの回答のみを出力するように指定しています。

$ dig +noall +answer qiita.com
qiita.com.      21  IN  A   52.199.172.165
qiita.com.      21  IN  A   54.65.34.62
qiita.com.      21  IN  A   52.199.34.118

+shortオプションを指定し、IPアドレス情報のみを出力するように指定しています。

$ dig qiita.com +short
52.199.172.165
54.65.34.62
52.199.34.118

dig コマンドの batch mode

digコマンドでは、ドメイン名のリストに従って再帰的に調査するモードがあります。これを batch mode と呼びます。

  1. エディタを使用し、新規テキストファイルを作成します。ここでは、nano digginIt01.txtまたはnano digginIt02.txtコマンド構文を実行します。

    $ nano digginIt01.txt
    
  2. 新規テキストファイルにて、ドメイン名のリストを作成します。ここでは異なるオプションスイッチを指定した二つの例を示しています。なお、コマンドを正しく機能させるためには、それぞれのコマンドが独立した行になっていることに注意してください。

    digginIt01.txt
    +nocmd +noall +answer qiita.com
    +nocmd +noall +answer blog.qiita.com
    
    digginIt02.txt
    +short qiita.com
    +short blog.qiita.com
    
  3. digコマンドにて-fオプションを指定し、digginIt0*.txtファイルを読み込みます。このときの実行結果は次のとおりです。

    digginIt01.txtを指定した実行結果
    $ dig -f digginIt01.txt
    qiita.com.              5       IN      A       52.199.172.165
    qiita.com.              5       IN      A       54.65.34.62
    qiita.com.              5       IN      A       52.199.34.118
    blog.qiita.com.         5       IN      A       13.35.67.23
    blog.qiita.com.         5       IN      A       13.35.67.56
    blog.qiita.com.         5       IN      A       13.35.67.76
    blog.qiita.com.         5       IN      A       13.35.67.89
    
    digginIt02.txtを指定した実行結果
    $ dig -f digginIt02.txt
    52.199.172.165
    54.65.34.62
    52.199.34.118
    13.35.67.23
    13.35.67.76
    13.35.67.56
    13.35.67.89
    

参考情報

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4