
Я пишу скрипт, который должен запросить запись 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
решение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