web-dev-qa-db-ja.com

サーバーのCNAMEのDNSのクエリ

特定のサーバーを指すすべてのCNAMEエントリを検出するために内部DNSエントリをクエリする方法はありますか?

編集:私たちはWindows環境であるServer 2003です。

12
PhilPursglove

環境を指定していませんが、Unixを使用している場合は、Digとgrepの組み合わせが機能するはずです。 ns.example.comはネームサーバーのホスト名、example.comはホストが属しているドメイン、HostはすべてのCNAMEレコードを検索するホストです。これは実際にはgrepコマンドのタブ文字であり、文字どおり<TAB>ではありません(grep文字列を調整する必要がある場合があります)。

また、ネームサーバーはゾーン転送を許可するように構成する必要があります。その詳細は実装に依存します。

Dig @ns.example.com example.com axfr |grep 'CNAME<tab>Host$'

または、Windowsを使用している場合は nslookup を使用できます。

C:\> nslookup
> name ns.example.com
> ls -a example.com FILE

これは、ドメインexample.comのすべてのレコードをns.example.comが「知っている」FILEに出力するはずです。その後、対応するCNAMEを探すために、テキストファイルを並べ替えるツールを使用できます。

またはこれとunested(しかし見た目は正しいようです)Perl script

#!/usr/bin/Perl

use Net::DNS;

($target, $zone) = @ARGV;

$res = new Net::DNS::Resolver;
foreach $rr ($res->axfr($zone)) {
     print $rr->name."\n" if (($rr->type eq "CNAME") && ($rr->rdatastr eq $target."."));
}

完全性のためのいくつかのポイント:

  • @wombleが述べたように、CNAMEのPTRレコードに相当するものはありません。ホストのAレコードに対応するCNAMESのすべてのゾーン情報を並べ替えて、コンテキスト認識を使用する必要があります。
  • これは、DNSサーバーでのみ機能します(ゾーン情報を表示する権限がある場合)。他のゾーンに属するホストのCNAMEを「追跡」する方法はありません。
  • @BillThorが述べているように、CNAMES以外にもホスト名にエイリアスを設定する方法は他にもあります。繰り返しますが、いくつかの状況認識が必要になります。
6
user62491

DNS構成にアクセスできる場合、このデータを発見するのは簡単です。ただし、誰でもサーバーを指すCNAMEを持つことができます。これらを追跡することはできません。

@wombieが指摘したように、CNAMESの逆引きはできません。 CNAMESに相当するPTRはなく、たとえ存在する可能性があるとしても、一部のレコードしか存在しません。無作為に選択されたドメインを簡単に確認すると、PTRレコードがAレコードをポイントしていないことがよくあります。同様に、ランダムアドレスのPTRレコードの逆ルックアップを実行しても、対応するAレコードが見つからないことがよくあります。

編集:CNAMEはシステムにエイリアスを設定する唯一の方法ではありません。 DNSでは、複数のAレコードが同じアドレスを指すことができます。機能的にはCNAMEを追加するのと同じですが、方法が異なります。ドメイン外でも同じ問題が発生します。さまざまなAレコードを検索するには、問題のシステムのIPアドレスを検索します。

4
BillThor

DNSプロトコルでは、このような「逆」ルックアップを行うことはできません。 kceが提供するgrepの提案を使用するなど、プロトコルを終了する必要があります。

3
womble

powershellを使用します。

microsoft DNSサーバーのプライマリ名を確認します。

Get-WmiObject -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_AType -Filter "IPAddress = 'xx.xx.xx.xx(IP)'" -ComputerName mydnsservername

microsoft DNSサーバーからそのホストのすべてのcnameを取得します。

Get-WmiObject -Namespace 'root\MicrosoftDNS' -Class MicrosoftDNS_CNAMEType -Filter "primaryname = 'ドットで終了した最初のクエリのプライマリ名。'" -ComputerName mydnsservername | select ownername、primaryname

2
Josef Aschauer
  1. マシンが提供するすべてのゾーンを見つけます。
  2. 各ゾーンについて、 dnscmd を使用してゾーンデータをエクスポートします:
    dnscmd a.ns.example.com/zoneexport zone.example.com some-filename-for-this-zone
  3. エクスポートされたファイルで、ターゲットドメイン名を指すCNAMEリソースレコードを検索します。
1
JdeBP