DNS nach CNAMEs für einen Server abfragen

12

Gibt es eine Möglichkeit, unsere internen DNS-Einträge abzufragen, um alle CNAME-Einträge zu ermitteln, die auf einen bestimmten Server verweisen?

Bearbeiten: Wir sind eine Windows-Umgebung, Server 2003.

PhilPursglove
quelle

Antworten:

6

Sie haben nicht angegeben, was Ihre Umgebung ist, aber wenn Sie Unix verwenden, denke ich, dass eine Kombination aus dig und grep funktionieren sollte. ns.example.comsollte der Hostname Ihres Nameservers sein, example.comist die Domain, zu der Ihr Host gehört, und HOST ist der Host, für den Sie alle CNAME-Einträge suchen möchten. Das ist eigentlich ein Tabulatorzeichen im Befehl grep, nicht wörtlich <TAB>(möglicherweise müssen Sie die Zeichenfolge grep anpassen).

Außerdem muss Ihr Nameserver so konfiguriert sein, dass Zonenübertragungen möglich sind, deren Einzelheiten von der Implementierung abhängen.

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

Oder wenn Sie unter Windows arbeiten, können Sie nslookup verwenden :

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

Dies sollte alle Datensätze für die Domäne example.com, ns.example.comdie über FILE "Bescheid weiß", ausgeben. Sie können dann mit jedem beliebigen Werkzeug die Textdatei nach den entsprechenden CNAMES durchsuchen.

Oder mit diesem ungetesteten (aber scheinbar korrekt aussehenden) Perl- Skript :

#!/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."."));
}

Ein paar Punkte für die Vollständigkeit:

  • Wie bei @womble angegeben, gibt es für einen CNAME kein Äquivalent zu einem PTR-Datensatz. Sie müssen eine gewisse Kontexterkennung verwenden, indem Sie alle Zoneninformationen für CNAMES sortieren, die den A-Datensätzen Ihres Hosts entsprechen.
  • Dies funktioniert nur für Ihren DNS-Server (und wenn Sie zum Anzeigen von Zoneninformationen berechtigt sind). Es gibt keine Möglichkeit, CNAMES für Ihren Host zu "verfolgen", die zu anderen Zonen gehören.
  • Wie @BillThor feststellt, gibt es andere Möglichkeiten, einen Hostnamen jenseits von CNAMES zu aliasieren. Auch hier benötigen Sie ein gewisses Kontextbewusstsein.

quelle
Frage aktualisiert, wir sind auf Windows.
PhilPursglove
4

Wenn Sie Zugriff auf Ihre DNS-Konfiguration haben, ist es eher trivial, diese Daten zu ermitteln. Jeder kann jedoch einen CNAME haben, der auf Ihren Server verweist. Sie können diese nicht verfolgen.

Wie @wombie bereits betont hat, können Sie CNAMES nicht in umgekehrter Reihenfolge suchen. Es gibt kein PTR-Äquivalent für CNAMES, und selbst wenn dort, wo es wahrscheinlich ist, nur einige Datensätze existieren würden. Eine schnelle Überprüfung einer zufälligen Auswahl von Domänen ergab, dass PTR-Datensätze häufig nicht auf den A-Datensatz verweisen. Ebenso wird beim Rückwärtssuchen von PTR-Datensätzen nach zufälligen Adressen häufig nicht der entsprechende A-Datensatz gefunden.

BEARBEITEN: CNAMEs sind nicht die einzige Möglichkeit, ein System als Alias ​​zu kennzeichnen. Mit DNS können mehrere A-Einträge auf dieselbe Adresse verweisen. Funktionell ist dies dasselbe wie das Hinzufügen eines CNAME, aber die Methode ist anders. Die gleichen Probleme treten auch außerhalb Ihrer Domain auf. Um nach den verschiedenen A-Einträgen zu suchen, müssen Sie nach den IP-Adressen des betreffenden Systems suchen.

BillThor
quelle
3

Mit dem DNS-Protokoll können Sie diese Art der "umgekehrten" Suche nicht durchführen. Sie müssen das Protokoll verlassen, beispielsweise die von kce bereitgestellten grep-Vorschläge verwenden.

womble
quelle
2

benutze Powershell:

Suchen Sie auf Ihrem Microsoft DNS-Server nach dem Primärnamen:

Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Klasse MicrosoftDNS_AType -Filter "IPAddress = 'xx.xx.xx.xx (IP)'" -ComputerName mydnsservername

Rufen Sie alle cnames für diesen Host von Ihrem Microsoft DNS-Server ab:

Get-WmiObject -Namespace 'root \ MicrosoftDNS' -Klasse MicrosoftDNS_CNAMEType -Filter "primaryname = 'primaryname aus der ersten mit einem Punkt abgeschlossenen Abfrage."

Josef Aschauer
quelle
1
  1. Finden Sie alle Zonen, die von Ihren Maschinen bedient werden.
  2. Verwenden Sie für jede Zone, um dnscmddie Zonendaten zu exportieren:
    dnscmd a.ns.example.com / zoneexport zone.example.com Dateiname für diese Zone
  3. Durchsuchen Sie die exportierten Dateien nach CNAMERessourceneinträgen, die auf den Zieldomänennamen verweisen.
JdeBP
quelle