Tags: DNS, Troubleshooting, PowerShell
Für das Troubleshooting von DNS-Problemen hat sich nslookup als ein nützliches Tool etabliert. Es existiert auf mehreren Plattformen, darunter auch auf Windows. Mit dem PowerShell-Cmdlet Resolve-DnsName gibt es jedoch eine Alternative, die auch proprietäre Microsoft-Protokolle für die Namensauflösung wie NetBIOS oder LLMNR berücksichtigt.
Bei nslookup handelt es sich um einen DNS-Client, mit dem sich die Namensauflösung überprüfen und anhand mehrerer Parameter anpassen lässt. Für die simple Abfrage eines Hostname kann man diesen gleich als Parameter übergeben:
nslookup dc.contoso.com
Interaktiver Modus von nslookup
Für Operationen, die mehrere Befehle erfordern, nutzt man das Dienstprogramm meist im interaktiven Modus. Dazu ruft man es ohne Argumente auf und landet dann auf einem Prompt. Durch Eingabe von Help kann man sich alle verfügbaren Befehle anzeigen lassen.
Tippt man hier einfach den Namen eines Hosts ein, dann liefert nslookup den A- bzw. AAAA-Eintrag des Rechners. Über Befehle wie
set type=CNAME
kann man aber auch andere Records abfragen, darunter CNAME, MX, NS oder PTR.
In Dual-Stack-Umgebungen, in denen IPv6 nicht ordentlich gepflegt wird und bei denen die Clients keinen korrekten DNS-Server für IPv6 konfiguriert haben, steigt nslookup grundsätzlich aus. Scheitert die Abfrage über IPv6, dann verzichtet es auf einen weiteren Versuch über IPv4.
Resolve-DnsName
PowerShell verfügt über ein eigenes Cmdlet, das die Aufgaben von nslookup übernehmen kann. Anders als das herkömmliche Dienstprogramm bietet es keinen interaktiven Modus, vielmehr übergibt man Resolve-DnsName alle notwendigen Informationen als Parameter.
Ein weiterer Unterschied besteht darin, dass sich das Cmdlet nicht durch eine ungültige IPv6-Konfiguration irritieren lässt, sondern in diesem Fall eine Abfrage über IPv4 nachlegt.
Im einfachsten Fall ruft man das Cmdlet mit dem gewünschten Hostname als Parameter auf:
Resolve-DnsName dc.contoso.com
Möchte man die Abfrage an einen bestimmten DNS-Server richten, dann gibt man diesen über den Parameter Server an:
Resolve-DnsName dc.contoso.com -Server 192.168.0.1
Alternativ zur IP-Adresse kann man auch den Hostname des DNS-Servers verwenden.
Wenn man ein Problem bei der Namensauflösung auf DNS reduzieren und verhindern möchte, dass diese bei einem Scheitern etwa über NetBIOS erfolgt, dann fügt man den Schalter DnsOnly an:
Resolve-DnsName -Name dc.contoso.com -DnsOnly
Als Störfaktor bei der Untersuchung von DNS-Problemen kann sich auch eine hosts-Datei bemerkbar machen. Diese kann man mit dem Schalter NoHostsFile ignorieren:
Resolve-DnsName -Name dc.contoso.com -NoHostsFile
Umgekehrt kann man über NetbiosFallback oder LlmnrFallback dafür sorgen, dass bei einer gescheiterten DNS-Auflösung NetBIOS oder Link Local Multicast Name Resolution (LLMNR) zum Zug kommen.
Schließlich ist es sogar möglich, nur die Namensauflösung über diese Legacy-Protokolle zu untersuchen, indem man sie über die Parameter LlmnrOnly oder LlmnrNetbiosOnly erzwingt. Eine interessante Option bietet zudem der Schalter CacheOnly für den Fall, dass ein DNS-Server aktuell nicht erreichbar ist oder der Cache veraltete Einträge enthält.
Wie nslookup liefert Resolve-DnsName standardmäßig den A- bzw. AAAA-Record für den Host. Über den Parameter Type kann man aber auch andere DNS-Einträge abfragen.
Zusammenfassung
Das altgediente nslookup erfüllt nach wie vor seinen Zweck, und zwar nicht nur für die einfache Auflösung eines Hostname, den man ihm als Parameter übergibt. Es bietet darüber hinaus einen interaktiven Modus, in dem man mehrere Befehle absetzen kann, denen man nicht jedes Mal ein nslookup voranstellen muss.
Mehr Möglichkeiten bietet PowerShell mit Resolve-DnsName, das auch ältere Microsoft-Protokolle für die Namensauflösung untersuchen kann. Es kann auch gezielt die hosts-Datei ausblenden oder sich nur aus dem Cache bedienen.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links