Zurück zu den Updates
New releaseJul 21, 2026

dnsdiag v2.9.4

DNS-Messung, Fehlerbehebung und Sicherheits-Audit-Toolset

Teilen

PyPI PyPI Downloads Downloads PyPI Docker Pulls GitHub stars

DNS-Messung, Fehlerbehebung und Sicherheits-Audit-Toolset

Haben Sie sich jemals gefragt, ob Ihr ISP Ihren DNS-Verkehr abfängt? Haben Sie ungewöhnliches Verhalten Ihrer DNS-Antworten bemerkt oder wurden Sie auf die falsche Adresse umgeleitet und vermuten, dass mit Ihrem DNS etwas nicht stimmt? Wir bieten eine Reihe von Tools zur Durchführung grundlegender Audits Ihrer DNS-Anfragen und -Antworten, damit Sie sicherstellen können, dass Ihr DNS wie erwartet funktioniert.

Mit dnsping können Sie die Reaktionszeit eines beliebigen DNS-Servers für beliebige Abfragen messen. Ähnlich wie das normale Ping-Dienstprogramm bietet dnsping eine vergleichbare Funktionalität für DNS-Anfragen und hilft Ihnen, die Reaktionsfähigkeit des Servers zu überwachen.

Sie können auch den Weg Ihrer DNS-Anfrage zu ihrem Ziel mit dnstraceroute verfolgen und überprüfen, ob sie nicht umgeleitet oder abgefangen wird. Durch den Vergleich von DNS-Abfragen, die an denselben Server gesendet werden, können Sie mit dnstraceroute etwaige Unterschiede in den genommenen Pfaden beobachten und so auf mögliche Probleme aufmerksam werden.

dnseval bewertet mehrere DNS-Resolver, um Ihnen bei der Auswahl des besten DNS-Resolvers für Ihr Netzwerk zu helfen. Es wird empfohlen, einen eigenen DNS-Resolver zu verwenden, um die Abhängigkeit von externen DNS-Resolvern zu vermeiden. dnseval kann jedoch bei der Auswahl des optimalen DNS-Resolvers helfen, wenn dies erforderlich ist. Es ermöglicht Ihnen den Vergleich von DNS-Servern basierend auf Leistung (Latenz) und Zuverlässigkeit (Paketverlust) und bietet Ihnen einen umfassenden Überblick für eine fundierte Entscheidungsfindung.

Installation

Es gibt mehrere Möglichkeiten, dieses Toolset zu verwenden, wobei wir empfehlen, es direkt aus dem Quellcode auszuführen, um eine optimale Flexibilität und Kontrolle zu gewährleisten.

Quellcode

  1. Checken Sie das Git-Repository aus und installieren Sie die Abhängigkeiten:
git clone https://github.com/farrokhi/dnsdiag.git
cd dnsdiag
pip3 install -r requirements.txt
  1. Alternativ können Sie das Paket mit pip installieren:
pip3 install dnsdiag

Verwendung von uv (Empfohlen)

uv ist ein schneller Python-Paketmanager, der Tools direkt ohne Installation ausführen kann:

# dnsping direkt ohne Installation ausführen
uvx --from dnsdiag dnsping google.com

# Mit bestimmten Optionen ausführen
uvx --from dnsdiag dnsping -c 5 --tls -s 8.8.8.8 example.com

# dnstraceroute ausführen
uvx --from dnsdiag dnstraceroute cloudflare.com

# dnseval ausführen
uvx --from dnsdiag dnseval -f public-servers.txt github.com

Um dnsdiag dauerhaft zu installieren:

# dnsdiag-Tools installieren
uv tool install dnsdiag

# Auf die neueste Version aktualisieren
uv tool upgrade dnsdiag

Binärpaket

Von Zeit zu Zeit werden Binärpakete für Windows, macOS und Linux veröffentlicht. Sie können die neueste Version von der Release-Seite herunterladen.

Unterstützte Plattformen

Vorgefertigte Binärdateien sind verfügbar für:

  • Linux (x86_64, ARM64)
  • macOS (Intel, Apple Silicon)
  • Windows (x86_64)

Windows ARM64 wird derzeit nicht unterstützt, da die Build-Abhängigkeiten native Compiler-Toolchains erfordern, die nicht ohne Weiteres verfügbar sind. Wenn Sie Windows auf ARM verwenden, können Sie dnsdiag mit dem Windows-Subsystem für Linux (WSL2) ausführen oder direkt aus dem Quellcode installieren.

Docker

Wenn Sie dnsdiag nicht auf Ihrem lokalen Rechner installieren möchten, können Sie das Docker-Image verwenden, um die Tools in einer containerisierten Umgebung auszuführen. Zum Beispiel:

docker run --network host -it --rm farrokhi/dnsdiag dnsping.py

dnsping

dnsping ermöglicht es Ihnen, einen DNS-Resolver zu "pingen", indem Sie eine beliebige DNS-Abfrage mehrmals senden. Eine vollständige Liste der unterstützten Befehlszeilenoptionen finden Sie mit --help. Hier sind einige wichtige Flags:

  • Verwenden Sie --tcp, --tls, --doh, --quic oder --http3, um das Transportprotokoll auszuwählen (Standard ist UDP). Diese Optionen schließen sich gegenseitig aus; pro Befehl kann nur ein Protokoll angegeben werden.
  • Verwenden Sie --flags, um Antwort-Flags, einschließlich EDNS-Flags, für jede Antwort anzuzeigen.
  • Verwenden Sie --dnssec, um DNSSEC-Validierung anzufordern, falls verfügbar.
  • Erweiterte DNS-Fehlermeldungen (RFC 8914) werden automatisch angezeigt, wenn vorhanden.
  • Verwenden Sie --nsid, um die Name Server Identifier (NSID) anzuzeigen, falls verfügbar (RFC 5001).
  • Verwenden Sie --ecs, um EDNS-Client-Subnetz-Informationen für die geografische Routing-Optimierung einzubeziehen.
  • Verwenden Sie --cookie, um DNS-Cookies anzuzeigen (RFC 7873), wenn sie in Antworten vorhanden sind.
./dnsping.py -c 5 --dnssec --flags --tls -t AAAA -s 8.8.8.8 brokendnssec.net
dnsping.py DNS: 8.8.8.8:853, hostname: brokendnssec.net, proto: TLS, class: IN, type: AAAA, flags: [RD]
75  bytes from 8.8.8.8: seq=1   time=73.703 ms  SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75  bytes from 8.8.8.8: seq=2   time=69.523 ms  SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75  bytes from 8.8.8.8: seq=3   time=58.058 ms  SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75  bytes from 8.8.8.8: seq=4   time=54.235 ms  SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]
75  bytes from 8.8.8.8: seq=5   time=57.806 ms  SERVFAIL [QR RD RA -- DO] [EDE:10("For brokendnssec.net/soa")]

--- 8.8.8.8 dnsping statistics ---
5 requests transmitted, 5 responses received, 0% lost
min=54.235 ms, avg=22.665 ms, max=69.523 ms, stddev=38.202 ms

dnsping bietet auch Statistiken wie minimale, maximale und durchschnittliche Antwortzeiten sowie Jitter (Standardabweichung) und Paketverlust.

Hier sind einige interessante Anwendungsfälle für dnsping:

  • Vergleich der Antwortzeiten über verschiedene Transportprotokolle hinweg (z. B. UDP vs. DoH).
  • Bewertung der Zuverlässigkeit Ihres DNS-Servers durch Messung von Jitter und Paketverlust.
  • Messung der Antwortzeiten mit aktiviertem DNSSEC mit dem Flag --dnssec.
  • Testen des EDNS-Client-Subnetz-Verhaltens für geolokalisierungsbewusste Antworten:
./dnsping.py -c 3 --ecs 203.0.113.0/24 -s 94.140.14.14 google.com
dnsping.py DNS: 94.140.14.14:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
66  bytes from 94.140.14.14: seq=1   time=31.407 ms  NOERROR [ECS:203.0.113.0/24/24]
66  bytes from 94.140.14.14: seq=2   time=29.156 ms  NOERROR [ECS:203.0.113.0/24/24]
66  bytes from 94.140.14.14: seq=3   time=30.892 ms  NOERROR [ECS:203.0.113.0/24/24]

--- 94.140.14.14 dnsping statistics ---
3 requests transmitted, 3 responses received, 0% lost
min=29.156 ms, avg=30.485 ms, max=31.407 ms, stddev=1.176 ms
  • Identifikation von DNS-Servern mit der NSID-Option:
./dnsping.py -c 2 --nsid -s 8.8.8.8 google.com
dnsping.py DNS: 8.8.8.8:53, hostname: google.com, proto: UDP, class: IN, type: A, flags: [RD]
68  bytes from 8.8.8.8: seq=1   time=36.399 ms  NOERROR [NSID:gpdns-ams]
68  bytes from 8.8.8.8: seq=2   time=32.156 ms  NOERROR [NSID:gpdns-ams]

--- 8.8.8.8 dnsping statistics ---
2 requests transmitted, 2 responses received, 0% lost
min=32.156 ms, avg=34.278 ms, max=36.399 ms, stddev=2.122 ms
  • Testen von DNS-Cookies für erhöhte Sicherheit und Cache-Optimierung:
./dnsping.py -c 2 --cookie -s anyns.pch.net quad9.net
dnsping.py DNS: anyns.pch.net:53, hostname: quad9.net, proto: UDP, class: IN, type: A, flags: [RD]
82  bytes from anyns.pch.net: seq=1   time=30.552  ms  NOERROR [COOKIE:27f609c017bb2ec4ea70de5c68eec3fc39f6a53ee49c55f8]
82  bytes from anyns.pch.net: seq=2   time=24.794  ms  NOERROR [COOKIE:719631dd9fcce722d3ac859b68eec3fd2e5430b5c8a7f8cf]

--- anyns.pch.net dnsping statistics ---
2 requests transmitted, 2 responses received, 0% lost
min=24.794 ms, avg=27.673 ms, max=30.552 ms, stddev=4.072 ms

Interpretation von DNSSEC- und sicherheitsrelevanten Flags

Bei Verwendung von --dnssec und --flags zeigt dnsping DNS-Protokollfelder an, die direkt für die DNS-Sicherheitsvalidierung relevant sind. Diese Werte geben an, ob ein Resolver in der Lage ist, DNSSEC zu validieren und ob eine Antwort erfolgreich verifiziert wurde.

Häufige Flags:

  • DO (DNSSEC OK)
    Zeigt an, dass der Client DNSSEC-bezogene Datensätze anfordert. Das Vorhandensein zeigt, dass der Resolver DNSSEC-Abfragen unterstützt.

  • AD (Authenticated Data)
    Wird von validierenden Resolvern gesetzt, wenn die Antwort kryptografisch mittels DNSSEC validiert wurde. Dies ist ein starkes Signal, dass die DNSSEC-Validierung aktiv und erfolgreich ist.

Typische Muster:

ErgebnisBedeutung
NOERROR mit AD-FlagDNSSEC-Validierung erfolgreich
SERVFAIL mit DO-FlagDNSSEC-Validierung fehlgeschlagen (oft aufgrund fehlerhafter Signaturen oder Fehlkonfiguration)
Kein AD-Flag vorhandenResolver führt keine DNSSEC-Validierung durch

Erweiterte DNS-Fehler (EDE, RFC 8914) bieten zusätzliche diagnostische Informationen, wenn die DNSSEC-Validierung fehlschlägt. Zum Beispiel:

  • EDE:10DNSSEC Bogus (ungültige oder fehlerhafte DNSSEC-Daten)
  • EDE:6DNSSEC Signature Expired (DNSSEC-Signatur abgelaufen)
  • EDE:7DNSSEC Signature Not Yet Valid (DNSSEC-Signatur noch nicht gültig)

Diese Indikatoren machen dnsping nicht nur für Leistungstests nützlich, sondern auch zur Validierung, ob Resolver DNSSEC korrekt durchsetzen, und zur Diagnose von DNSSEC-Bereitstellungsproblemen.

dnstraceroute

dnstraceroute ist ein Dienstprogramm, das den Pfad Ihrer DNS-Anfragen zu ihrem Ziel verfolgt. Sie können dies mit Ihrem tatsächlichen Netzwerk-Traceroute vergleichen, um sicherzustellen, dass Ihr DNS-Verkehr nicht über unerwünschte Pfade geleitet wird.

dnstraceroute unterstützt mehrere Transportprotokolle (sich gegenseitig ausschließend):

  • UDP (Standard) – Traditionelle DNS-Abfragen
  • TCP (--tcp) – DNS über TCP
  • DoQ (--quic) – DNS über QUIC (unterstützt von AdGuard DNS)
  • DoH3 (--http3) – DNS über HTTP/3 (unterstützt von Google DNS und Cloudflare)
./dnstraceroute.py --expert --asn -C -t A -s 8.8.4.4 facebook.com

Sie können auch moderne DNS-Protokolle testen:

# Testen von DNS über QUIC mit AdGuard DNS
./dnstraceroute.py --quic -s 94.140.14.14 -c 3 google.com

# Testen von DNS über HTTP/3 mit Google DNS
./dnstraceroute.py --http3 -s 8.8.8.8 -c 3 google.com
dnstraceroute.py DNS: 8.8.4.4:53, hostname: facebook.com, rdatatype: A
1	192.168.0.1 (192.168.0.1) 1 ms
2	192.168.28.177 (192.168.28.177) 4 ms
3	192.168.0.1 (192.168.0.1) 693 ms
4	172.19.4.17 (172.19.4.17) 3 ms
5	dns.google (8.8.4.4) [AS15169 GOOGLE, US] 8 ms

=== Expert Hints ===
 [*] public DNS server is next to a private IP address (possible hijacking)

Durch die Verwendung des Flags --expert mit dnstraceroute wird die Anzeige von Expertenhinweisen aktiviert, einschließlich Warnungen vor möglicher DNS-Verkehrsentführung.

dnseval

dnseval ist ein Bulk-Ping-Dienstprogramm, das beliebige DNS-Abfragen an eine bestimmte Liste von DNS-Servern sendet, sodass Sie deren Antwortzeiten gleichzeitig vergleichen können.

Sie können dnseval verwenden, um Antwortzeiten über verschiedene Transportprotokolle hinweg zu bewerten, einschließlich UDP (Standard), TCP, DoT (DNS over TLS), DoH (DNS over HTTPS), DoQ (DNS over QUIC) und DoH3 (DNS over HTTP/3), indem Sie die Flags --tcp, --tls, --doh, --quic bzw. --http3 verwenden. Diese Protokolloptionen schließen sich gegenseitig aus; pro Befehl kann nur eines angegeben werden.

Protokollunterstützungsübersicht

ToolUDPTCPTLS (DoT)DoHDoQDoH3
dnsping
dnstraceroute--
dnseval

DoQ: DNS over QUIC, DoH3: DNS over HTTP/3

./dnseval.py --skip-warmup --dnssec -c10 -f public-servers.txt ripe.net
server                   avg(ms)  min(ms)  max(ms)  stddev(ms)  lost(%)  ttl      flags                      response
---------------------------------------------------------------------------------------------------------------------
1.0.0.1                  29.01    14.15    45.36    8.60        %0       300      QR -- -- RD RA AD -- DO     NOERROR
1.1.1.1                  23.90    18.14    42.07    7.83        %0       300      QR -- -- RD RA AD -- DO     NOERROR
1.0.0.2                  25.90    21.36    31.58    4.26        %0       300      QR -- -- RD RA AD -- DO     NOERROR
1.1.1.2                  22.68    18.36    32.15    3.96        %0       300      QR -- -- RD RA AD -- DO     NOERROR
1.0.0.3                  22.53    18.98    32.52    3.94        %0       300      QR -- -- RD RA AD -- DO     NOERROR
1.1.1.3                  21.70    20.25    22.97    0.77        %0       299      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1001     21.70    19.13    27.50    2.28        %0       299      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1111     22.63    20.42    30.18    3.13        %0       299      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1002     24.97    20.89    44.63    7.16        %0       299      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1112     23.24    21.37    25.87    1.48        %0       298      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1003     21.68    19.28    24.88    1.65        %0       298      QR -- -- RD RA AD -- DO     NOERROR
2606:4700:4700::1113     22.61    19.86    26.09    1.73        %0       299      QR -- -- RD RA AD -- DO     NOERROR
195.46.39.39             25.56    16.42    55.37    15.37       %0       300      QR -- -- RD RA -- -- --     NOERROR
195.46.39.40             19.08    16.51    23.86    2.24        %0       300      QR -- -- RD RA -- -- --     NOERROR
2a05:d014:939:3300::39   0.00     0.00     0.00     0.00        %100     N/A      -- -- -- -- -- -- -- --     No Response
2a05:d014:939:3300::40   0.00     0.00     0.00     0.00        %100     N/A      -- -- -- -- -- -- -- --     No Response
208.67.220.220           30.60    14.54    120.64   31.88       %0       300      QR -- -- RD RA AD -- DO     NOERROR
208.67.222.222           21.78    17.42    36.45    6.06        %0       50       QR -- -- RD RA AD -- DO     NOERROR
2620:0:ccc::2            29.48    19.23    98.29    24.22       %0       299      QR -- -- RD RA AD -- DO     NOERROR
2620:0:ccd::2            22.36    17.90    30.18    3.98        %0       299      QR -- -- RD RA AD -- DO     NOERROR
216.146.35.35            172.53   114.46   360.87   71.47       %0       299      QR -- -- RD RA AD -- DO     NOERROR
216.146.36.36            187.36   118.21   324.32   59.08       %0       110      QR -- -- RD RA AD -- DO     NOERROR
209.244.0.3              46.49    25.23    115.86   28.19       %0       300      QR -- -- RD RA -- -- DO     NOERROR
209.244.0.4              58.33    28.09    109.18   29.20       %0       299      QR -- -- RD RA -- -- DO     NOERROR
4.2.2.1                  64.58    30.21    86.79    30.19       %25      299      QR -- -- RD RA -- -- DO     NOERROR
4.2.2.2                  40.54    22.69    74.80    20.76       %0       70       QR -- -- RD RA -- -- DO     NOERROR
4.2.2.3                  90.62    90.62    90.62    0.00        %50      70       QR -- -- RD RA -- -- DO     NOERROR
4.2.2.4                  31.53    23.80    70.93    14.51       %0       294      QR -- -- RD RA -- -- DO     NOERROR
4.2.2.5                  24.11    24.05    24.18    0.09        %33      294      QR -- -- RD RA -- -- DO     NOERROR
80.80.80.80              0.00     0.00     0.00     0.00        %100     N/A      -- -- -- -- -- -- -- --     No Response
80.80.81.81              0.00     0.00     0.00     0.00        %100     N/A      -- -- -- -- -- -- -- --     No Response
8.8.4.4                  28.35    20.85    39.14    7.24        %0       300      QR -- -- RD RA AD -- DO     NOERROR
8.8.8.8                  21.22    16.22    24.93    2.39        %0       299      QR -- -- RD RA AD -- DO     NOERROR

Sie können die Ergebnisse auch im JSONL-Format für die weitere Verarbeitung speichern. Jede Zeile in der Ausgabedatei ist ein gültiges JSON-Objekt, das die vollständigen Messergebnisse für einen DNS-Server enthält.

./dnseval.py -c 5 -j results.jsonl -f public-servers.txt example.com

Die Ausgabe kann zeilenweise mit Standard-JSON-Tools wie jq analysiert werden.

cat results.jsonl | jq -r 'select(.data.r_lost_percent == 0) | .data.resolver'

Autor

Babak Farrokhi

Lizenz

dnsdiag wird unter einer 2-Klausel-BSD-Lizenz veröffentlicht.

Kategorien