Как запросить DNS через HTTPS/DNS через TLS с помощью командной строки?

Как запросить DNS через HTTPS/DNS через TLS с помощью командной строки?

Я пишу скрипт, который должен запросить запись DNS с указанным пользователем DNS-сервером. DNS-сервер может быть в любом протоколе, включая UDP, TCP, DNS через HTTPS (DoH) и DNS через TLS (DoT).

Я знаю, digчто может обрабатывать DNS для UDP и TCP (с +tcpфлагом). Есть ли способ использовать digили другой инструмент для запроса сервера DoH и DoT?

Я предпочитаю уже существующие популярные инструменты, такие как curl, чтобы мой скрипт был более портативным, но другие предложения также приветствуются.

решение1

Я не нашел ни одного инструмента, подходящего для обеих целей, но я нашел способы их использования.

Существует два способа запроса DoH:

# 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

Для DoT вы можете использовать kdigинструмент, предоставленный knot. Командная строка похожа на 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

где 8.8.8.8— предварительно разрешенный адрес хоста TLS ( dns.google.com).


Обновление: Вот инструмент (https://github.com/ameshkov/dnslookup), который самостоятельно поддерживает все основные протоколы DNS и способен выдавать машиночитаемые выходные данные.

решение2

завитокимеет официальныйDoHподдержка с версии 7.62.0 (вопрос в том, сколько из ваших целевых конечных точек обновили curl до этой версии.)

Используйте его, используя --doh-urlопцию. Пример:

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

Видеть: https://github.com/curl/curl/wiki/DOH-implementation https://daniel.haxx.se/blog/2018/09/06/doh-in-curl/

решение3

Собакаальтернатива dig, написанная на Rust и поддерживающая DOH/DOT.монтаж

Примеры:

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

dog google.com --tls @dns.google

Также возможен вывод в формате json.

решение4

Помимо DoT (как упоминали другие пользователи), последняя версия digтакже поддерживает DoH-запросы с использованием +httpsфлага.

+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.

Пример,

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

При объявлении +httpsбудет digвыполнен запрос к указанному домену DNS-сервера ( cloudflare-dns.com) с HTTPS на порту 443 к конечной точке по умолчанию /dns-query.

Фактически, указанная выше команда отправит DoH-запрос (POST) по foobar.comадресу:

Есть возможность переключиться на запрос GET, объявить другую конечную точку и т. д. Прочтитестраница руководстваиз этих вариантов запроса, связанных с DoH:

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

Связанный контент