Existe uma maneira de consultar nossas entradas DNS internas para descobrir todas as entradas CNAME que apontam para um servidor específico?
Edit: Nós somos um ambiente Windows, Server 2003.
Existe uma maneira de consultar nossas entradas DNS internas para descobrir todas as entradas CNAME que apontam para um servidor específico?
Edit: Nós somos um ambiente Windows, Server 2003.
Respostas:
Você não especificou qual é o seu ambiente, mas se estiver usando o Unix, acho que uma combinação de dig e grep deve funcionar. ns.example.com
deve ser o nome do host do seu servidor de nomes, example.com
é o domínio do qual o host faz parte e o HOST é o host para o qual você deseja encontrar todos os registros CNAME. Na verdade, esse é um caractere de tabulação no comando grep, não literalmente <TAB>
(talvez você precise ajustar a sequência de caracteres grep).
Além disso, seu servidor de nomes precisa ser configurado para permitir transferências de zona, cujos detalhes dependerão da implementação.
dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'
Ou, se você estiver no Windows, poderá usar o nslookup :
C:\> nslookup
> name ns.example.com
> ls -a example.com FILE
Isso deve gerar todos os registros do domínio example.com
que ns.example.com
"conhece" para FILE. Você pode usar a ferramenta que deseja classificar no arquivo de texto procurando os CNAMES correspondentes.
Ou com este script perl não testado (mas aparentemente correto) :
#!/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."."));
}
Alguns pontos para completude:
Se você tiver acesso à sua configuração de DNS, é bastante trivial descobrir esses dados. No entanto, qualquer pessoa pode ter um CNAME apontando para o seu servidor. Você não poderá rastrear isso.
Como o @wombie apontou, você não pode fazer uma pesquisa inversa para o CNAMES. Não há PTR equivalente para CNAMES, e mesmo se houver onde provavelmente apenas existiriam alguns registros. Uma verificação rápida de uma seleção aleatória de domínios mostraria que os registros PTR geralmente não apontam para o registro A. Da mesma forma, fazer pesquisas inversas de registros PTR para endereços aleatórios geralmente não encontra o registro A correspondente.
EDIT: CNAMEs não são a única maneira de criar um apelido para um sistema. O DNS permite que vários registros A apontem para o mesmo endereço. Funcionalmente, é o mesmo que adicionar um CNAME, mas o método é diferente. Os mesmos problemas se aplicam fora do seu domínio. Para pesquisar os vários registros A, você deve procurar o (s) endereço (s) IP (s) do sistema em questão.
use o PowerShell:
verifique o nome primário no servidor DNS da Microsoft:
Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Class MicrosoftDNS_AType -Filter "IPAddress = 'xx.xx.xx.xx (IP)'" -ComputerName mydnsservername
obtenha todos os cnames para esse host no servidor DNS da Microsoft:
Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Class MicrosoftDNS_CNAMEType -Filter "primaryname = 'primaryname da primeira consulta finalizada com um ponto.'" -ComputerName mydnsservername | selecione nome do usuário, nome primário
dnscmd
para exportar os dados da zona:dnscmd a.ns.example.com / zoneexport zone.example.com some-filename-for-this-zone
CNAME
registros de recursos que apontam para o nome de domínio de destino.