Wie fragt man DNS über HTTPS/DNS über TLS mithilfe der Befehlszeile ab?

Wie fragt man DNS über HTTPS/DNS über TLS mithilfe der Befehlszeile ab?

Ich schreibe ein Skript, das DNS-Einträge mit einem vom Benutzer angegebenen DNS-Server abfragen muss. Der DNS-Server kann jedes beliebige Protokoll verwenden, einschließlich UDP, TCP, DNS über HTTPS (DoH) und DNS über TLS (DoT).

Ich weiß, digdass DNS für UDP und TCP (mit Flag) verarbeitet werden kann +tcp. Gibt es eine Möglichkeit digoder ein anderes Tool, mit dem ich DoH- und DoT-Server abfragen kann?

Ich bevorzuge bereits vorhandene beliebte Tools, curldamit mein Skript portabler wäre, aber andere Vorschläge sind ebenfalls willkommen.

Antwort1

Ich habe kein einziges Werkzeug für beide Zwecke gefunden, aber ich habe Möglichkeiten gefunden, sie zu verwenden.

Es gibt zwei Möglichkeiten, DoH abzufragen:

# json
curl -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=example.com&type=A' | jq .
# dns wireformat
curl -H 'accept: application/dns-message' 'https://dns.google/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB'  | hexdump -c

Für DoT können Sie kdigdas von bereitgestellte Tool verwenden knot. Die Befehlszeile ähnelt dig:

apt-get install knot-dnsutils
# For macOS:
# brew install knot
kdig -d @8.8.8.8 +tls-ca +tls-host=dns.google.com example.com

wobei dies 8.8.8.8die vorab aufgelöste Adresse des TLS-Hosts ( dns.google.com) ist.


Update: Hier ist ein Werkzeug (https://github.com/ameshkov/dnslookup), das alle wichtigen DNS-Protokolle selbst unterstützt und maschinenlesbare Ausgaben erzeugen kann.

Antwort2

Lockehat offiziellDoHUnterstützung seit Version 7.62.0 (die Frage ist, wie viele Ihrer Zielendpunkte curl auf dem neuesten Stand dieser Version haben.)

Nutzen Sie es, indem Sie die --doh-urlOption nutzen. Beispiel:

curl --doh-url https://cloudflare-dns.com/dns-query https://www.google.com

Sehen: https://github.com/curl/curl/wiki/DOH-implementation https://daniel.haxx.se/blog/2018/09/06/doh-in-curl/

Antwort3

Hundist eine Dig-Alternative, die in Rust geschrieben ist und DOH/DOT unterstützt.Installation

Beispiele:

dog -H @https://dns.google/dns-query google.com

dog google.com --tls @dns.google

Die Ausgabe kann auch als JSON erfolgen.

Antwort4

Neben DoT (wie von anderen Benutzern hier erwähnt) unterstützt die neueste Version digauch DoH-Abfragen mithilfe des +httpsFlags.

+https[=value], +nohttps
    This option indicates whether to use DNS over HTTPS (DoH) when  querying  name
    servers.   When  this  option is in use, the port number defaults to 443.  The
    HTTP POST request mode is used when sending the query.

    If value is specified, it will be used as the HTTP endpoint in the query  URI;
    the  default  is /dns-query. So, for example, dig @example.com +https will use
    the URI https://example.com/dns-query.

Beispiel,

dig @cloudflare-dns.com +https foobar.com

Durch die Angabe +httpswird digdie angegebene DNS-Serverdomäne ( cloudflare-dns.com) mit HTTPS über Port 443 an den Standardendpunkt abgefragt /dns-query.

Tatsächlich sendet der obige Befehl eine DoH-Anfrage (POST) foobar.coman:

Es gibt Optionen zum Wechseln zur GET-Anfrage, zum Deklarieren eines anderen Endpunkts usw. Lesen Sie diemanpagedieser Abfragemöglichkeiten im Zusammenhang mit DoH:

  • +https
  • +https-get
  • +https-post
  • +http-plain
  • +http-plain-get
  • +http-plain-post

verwandte Informationen