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 determinado servidor?

Edit: Nós somos um ambiente Windows, Server 2003.

    
por PhilPursglove 03.07.2011 / 23:22

4 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.com deve ser o nome do host do seu servidor de nomes, example.com é o domínio do qual seu host faz parte e HOST é o host para o qual você deseja localizar todos os registros CNAME. Na verdade, é um caractere de tabulação no comando grep, não literalmente <TAB> (talvez você precise ajustar a sequência do grep).

Além disso, seu servidor de nomes precisa ser configurado para permitir transferências de zona, cujos detalhes serão dependentes da implementação.

dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'

Ou, se estiver no Windows, você pode usar o nslookup :

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

Isso deve exibir todos os registros do domínio example.com que ns.example.com "conhece" para FILE. Você pode então usar qualquer ferramenta que você queira ordenar através do arquivo de texto procurando pelo CNAMES correspondente.

Ou com este não testado (mas aparentemente com aparência correta) 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."."));
}

Alguns pontos para completar:

  • Como afirmado @womble, não há equivalente de um registro PTR para um CNAME. Você terá que usar algum conhecimento contextual classificando todas as informações de zona para o CNAMES que correspondem aos registros A do seu host.
  • Isso só funciona para o seu servidor DNS (e se você tiver permissão para visualizar as informações da zona). Não há como "rastrear" o CNAMES para seu host que pertença a outras zonas.
  • Como afirma @BillThor, há outras maneiras de aliases um nome de host além do CNAMES. Mais uma vez, você precisará de alguma consciência contextual.
por 04.07.2011 / 00:28
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á rastreá-los.

Como @wombie apontou, você não pode fazer uma pesquisa inversa para o CNAMES. Não há equivalente de PTR para o CNAMES, e mesmo que seja provável que existam apenas alguns registros. Uma verificação rápida de uma seleção aleatória de domínios mostraria registros PTR, muitas vezes, não apontam de volta para o registro A. Da mesma forma, fazer procuras reversas 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 aliasar um sistema. O DNS permite que vários registros A apontem o mesmo endereço. Funcionalmente, isso é o mesmo que adicionar um CNAME, mas o método é diferente. Os mesmos problemas aplicam-se fora do seu domínio. Para procurar os vários registros A, você procuraria pelo (s) endereço (s) IP do sistema em questão.

    
por 04.07.2011 / 06:29
3

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

    
por 04.07.2011 / 03:58
1
  1. Encontre todas as zonas servidas pelas suas máquinas.
  2. Para cada zona, use dnscmd para exportar os dados da zona:
    dnscmd a.ns.example.com /zoneexport zone.example.com some-filename-for-this-zone
  3. Pesquise nos arquivos exportados por CNAME de registros de recursos que apontam para o nome de domínio de destino.
por 04.07.2011 / 16:09