Der Check überwacht und testet die in der Netzwerkkarte eingetragenen DNS-Server und prüft ob die Root DNS Server / Root-Nameserver aktuell sind.
########################################################
# von Tobias Maffert - www.maffert.net - 03.2020
########################################################
# Was macht dieser Check:
# Ueberprueft die DNS-Server der Netzwerkkarte auf Fehler
# Ueberprueft die im DNS-Server eingetragenen DNS-Root Server
#
# Voraussetzungen:
# Erwartet die Eingabe einer URL (z.B. google.de)
#
# Changelog:
# 1.7 = Filter fuer das auslesen der DNS-Server IPs angepasst - machte auf manchen wegen der TTL groesser als 00 Probleme
########################################################
Write-Host "DNS-Server Check 1.7"
Write-Host "____________________________"
Write-Host ""
$url = $args[0]
[int]$ldnscheck_status = 0
[int]$rdns_status = 0
# Informationen einholen:
$IPType = 'IPv4'
$adapter = Get-NetAdapter | ? {$_.Status -eq "up"}
$ifindex = ($interface = $adapter | Get-NetIPInterface -AddressFamily $IPType -ErrorAction SilentlyContinue).ifindex
$ldns = (Get-DnsClientServerAddress -InterfaceIndex $ifindex -AddressFamily IPv4).ServerAddresses
Write-Host "DNS Test mit $url :"
# Pruefe die in der Netzwerkkarte eigetragenen DNS-Server
$ldnscheck = @()
$ldnscheckerg = @()
foreach ($ldnsein in $ldns) {
$ldnscheck = (Resolve-DnsName -Name $url -Server $ldnsein -ErrorAction SilentlyContinue| where {$_.Type -eq "A"}).IPAddress
if (!$ldnscheck) {
write-host "FEHLER bei DNS-Server $ldnsein!"
$errorcount++
$ldnscheck_status = 1
}
$ldnscheckerg += "DNS-Server $ldnsein" + " | Ausgabe: $ldnscheck"
}
if ($ldnscheck_status -like "0"){Write-Host "OK: Der Lokale DNS-Server funktioniert einwandfrei."}
$ldnscheckerg
Write-Host ""
Write-Host "DNS Root Server Check (Stammhinweise):"
## Uberpruefe die Root DNS Server
# Informationen einholen
$ips = (Get-DnsServerRootHint | ForEach-Object {$_.IPAddress} | ForEach-Object {$_.RecordData} | ForEach-Object {$_.IPv4Address}).IPAddressToString | select -uniq
$server = Get-DnsServerRootHint | ForEach-Object {$_.NameServer} | ForEach-Object {$_.RecordData} | ForEach-Object {$_.NameServer}
# Root Server aufloesen
$Rips = @()
foreach ($serverein in $server) {
$Rips += (Resolve-DnsName -Name $serverein | where {$_.Type -eq "A"}).IPAddress
}
# Root Server mit den aktuellen vergleichen und ggf. melden
$verroot = compare ("$ips") ("$Rips") | ForEach-Object {$_.InputObject}
if (! $verroot) {
Write-Host "OK: alle Root Server sind aktuell."
}
else {
Write-Host "FEHLER: veraltete Root Server gefunden, bitte pruefen!"
$errorcount++
$rdns_status = 1
}
# Fehlerbehandlung
if($errorcount -ge 1) {
exit 2
}
else {
exit 0
}