特定のサーバーを指すすべてのCNAMEエントリを検出するために、内部DNSエントリを照会する方法はありますか?
編集:私たちはWindows環境、Server 2003です。
特定のサーバーを指すすべてのCNAMEエントリを検出するために、内部DNSエントリを照会する方法はありますか?
編集:私たちはWindows環境、Server 2003です。
回答:
環境を指定しませんでしたが、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を探してテキストファイルをソートするためのツールを使用できます。
それともこれでテストされていない(しかし、探して上品正しい)perlのスクリプト:
#!/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."."));
}
完全性のためのいくつかのポイント:
DNS構成にアクセスできる場合、このデータを発見するのはかなり簡単です。ただし、誰でもサーバーを指すCNAMEを持つことができます。これらをトレースすることはできません。
@wombieが指摘したように、CNAMESの逆ルックアップはできません。CNAMESに相当するPTRはありません。たとえそれが存在する可能性がある場合でも、いくつかのレコードのみが存在します。ランダムに選択されたドメインを簡単に確認すると、PTRレコードがAレコードを指し示していないことがよくあります。同様に、ランダムアドレスのPTRレコードの逆ルックアップを実行しても、対応するAレコードが見つからないことがよくあります。
編集:CNAMEはシステムをエイリアスする唯一の方法ではありません。DNSでは、複数のAレコードが同じアドレスを指すことができます。機能的には、これはCNAMEの追加と同じですが、方法は異なります。ドメイン外でも同じ問題が発生します。さまざまなAレコードを検索するには、問題のシステムのIPアドレスを検索します。
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