本稿では、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 と呼びます。
-
エディタを使用し、新規テキストファイルを作成します。ここでは、
nano digginIt01.txt
またはnano digginIt02.txt
コマンド構文を実行します。$ nano digginIt01.txt
-
新規テキストファイルにて、ドメイン名のリストを作成します。ここでは異なるオプションスイッチを指定した二つの例を示しています。なお、コマンドを正しく機能させるためには、それぞれのコマンドが独立した行になっていることに注意してください。
digginIt01.txt+nocmd +noall +answer qiita.com +nocmd +noall +answer blog.qiita.com
digginIt02.txt+short qiita.com +short blog.qiita.com
-
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
参考情報
- SecurityTrails, IP lookup: Top 8 ways to perform an IP address lookup, https://securitytrails.com/blog/ip-lookup-strategy
- Lee Allen (著), Kevin Cardwell (著), Advanced Penetration Testing for Highly-Secured Environments - Second Edition
- jq コマンドを使う日常のご紹介, https://qiita.com/takeshinoda@github/items/2dec7a72930ec1f658af