Consultando DNS para CNAMEs para um servidor

12

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.

PhilPursglove
fonte

Respostas:

6

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.comdeve 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.comque 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:

  • Como o @womble afirmou, não há equivalente a um registro PTR para um CNAME. Você precisará usar alguma conscientização contextual, classificando todas as informações de zona do CNAMES que correspondem aos registros A do seu host.
  • Isso funciona apenas para o servidor DNS (e se você tiver permissão para exibir informações da zona). Não há como "rastrear" CNAMES para seu host que pertençam a outras zonas.
  • Como o @BillThor afirma, existem outras maneiras de usar o apelido de um nome de host além do CNAMES. Novamente, você precisará de alguma consciência contextual.

fonte
Pergunta atualizada, estamos no Windows.
22411 PhilPursglove
4

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.

BillThor
fonte
3

O protocolo DNS não permite que você faça esse tipo de pesquisa "reversa". Você precisará sair do protocolo, como usar as sugestões grep fornecidas pelo kce.

mulher
fonte
2

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

Josef Aschauer
fonte
1
  1. Encontre todas as zonas atendidas por suas máquinas.
  2. Para cada zona, use dnscmdpara exportar os dados da zona:
    dnscmd a.ns.example.com / zoneexport zone.example.com some-filename-for-this-zone
  3. Pesquise nos arquivos exportados os CNAMEregistros de recursos que apontam para o nome de domínio de destino.
JdeBP
fonte