Existe-t-il un moyen d'interroger nos entrées DNS internes pour découvrir toutes les entrées CNAME qui pointent vers un serveur particulier?
Edit: Nous sommes un environnement Windows, Server 2003.
Existe-t-il un moyen d'interroger nos entrées DNS internes pour découvrir toutes les entrées CNAME qui pointent vers un serveur particulier?
Edit: Nous sommes un environnement Windows, Server 2003.
Réponses:
Vous n'avez pas spécifié votre environnement mais si vous utilisez Unix, je pense qu'une combinaison de dig et grep devrait fonctionner. ns.example.com
doit être le nom d'hôte de votre serveur de noms, example.com
est le domaine dont votre hôte fait partie et HOST est l'hôte pour lequel vous souhaitez trouver tous les enregistrements CNAME. Il s'agit en fait d'un caractère de tabulation dans la commande grep, pas littéralement <TAB>
(vous devrez peut-être ajuster la chaîne grep).
Votre serveur de noms doit également être configuré pour autoriser les transferts de zone, dont les détails dépendent de l'implémentation.
dig @ns.example.com example.com axfr |grep 'CNAME<tab>HOST$'
Ou si vous êtes sous Windows, vous pouvez utiliser nslookup :
C:\> nslookup
> name ns.example.com
> ls -a example.com FILE
Cela devrait sortir tous les enregistrements du domaine example.com
qui ns.example.com
"connaît" dans FILE. Vous pouvez ensuite utiliser l'outil que vous souhaitez pour trier le fichier texte à la recherche du CNAMES correspondant.
Ou avec ce script perl non testé (mais d'aspect correct) :
#!/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."."));
}
Quelques points pour l'exhaustivité:
Si vous avez accès à votre configuration DNS, il est plutôt trivial de découvrir ces données. Cependant, n'importe qui peut avoir un CNAME pointant vers votre serveur. Vous ne pourrez pas les retracer.
Comme l'a souligné @wombie, vous ne pouvez pas effectuer de recherche inversée pour CNAMES. Il n'y a pas d'équivalent PTR pour CNAMES, et même s'il existait probablement, seuls certains enregistrements existeraient. Une vérification rapide d'une sélection aléatoire de domaines montrerait que les enregistrements PTR ne pointent souvent pas vers l'enregistrement A. De même, la recherche inversée d'enregistrements PTR pour des adresses aléatoires ne trouve souvent pas l'enregistrement A correspondant.
EDIT: les CNAME ne sont pas le seul moyen d'aliaser un système. DNS permet à plusieurs enregistrements A de pointer vers la même adresse. Fonctionnellement, cela revient à ajouter un CNAME mais la méthode est différente. Les mêmes problèmes s'appliquent en dehors de votre domaine. Pour rechercher les différents enregistrements A, vous devez rechercher la ou les adresses IP du système en question.
utiliser PowerShell:
vérifiez le nom principal sur votre serveur DNS Microsoft:
Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Class MicrosoftDNS_AType -Filter "IPAddress = 'xx.xx.xx.xx (IP)'" -ComputerName mydnsservername
obtenez tous les noms de domaine de cet hôte à partir de votre serveur DNS Microsoft:
Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Class MicrosoftDNS_CNAMEType -Filter "primaryname = 'primaryname de la première requête terminée par un point.'" -ComputerName mydnsservername | select ownername, primaryname
dnscmd
pour exporter les données de zone:dnscmd a.ns.example.com / zoneexport zone.example.com nom-de-fichier-pour-cette-zone
CNAME
ressources qui pointent vers le nom de domaine cible.