Como consultar DNS sobre HTTPS/DNS sobre TLS usando linha de comando?

Como consultar DNS sobre HTTPS/DNS sobre TLS usando linha de comando?

Estou escrevendo um script que precisa consultar o registro DNS com um servidor DNS especificado pelo usuário. O servidor DNS pode estar em qualquer protocolo, incluindo UDP, TCP, DNS sobre HTTPS (DoH) e DNS sobre TLS (DoT).

Eu sei digque é capaz de lidar com DNS para UDP e TCP (com +tcpsinalizador). Existe uma maneira de usar digou outra ferramenta para consultar o servidor DoH e DoT?

Eu prefiro ferramentas populares já existentes, curlpara que meu script seja mais portátil, mas outras sugestões também são bem-vindas.

Responder1

Não encontrei uma única ferramenta para ambos os fins, mas encontrei maneiras de usá-las.

Existem duas maneiras de consultar 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

Para DoT, você pode usar kdiga ferramenta fornecida pelo knot. A linha de comando é semelhante a 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

onde the 8.8.8.8é o endereço pré-resolvido do host tls ( dns.google.com).


Atualização: aqui está uma ferramenta (https://github.com/ameshkov/dnslookup) que suporta todos os principais protocolos DNS por conta própria e é capaz de produzir resultados legíveis por máquina.

Responder2

ondulaçãotem oficialDoHsuporte desde a versão 7.62.0 (a questão é quantos de seus endpoints de destino foram atualizados para esta versão).

Use-o utilizando a --doh-urlopção. Exemplo:

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

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

Responder3

Cachorroé uma alternativa dig escrita em Rust e com suporte para DOH/DOT.instalação

Exemplos:

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

dog google.com --tls @dns.google

Ele também pode gerar como json.

Responder4

Além do DoT (conforme mencionado por outros usuários aqui), a versão mais recente digtambém oferece suporte à consulta DoH usando o +httpssinalizador.

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

Exemplo,

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

Ao declarar +https, digirá consultar o domínio do servidor DNS fornecido ( cloudflare-dns.com) com HTTPS na porta 443 para o endpoint padrão /dns-query.

Efetivamente, o comando acima enviará uma solicitação DoH (POST) prestes foobar.coma:

Existem opções para mudar para solicitação GET, declarar um endpoint diferente e etc.página de manualdestas opções de consulta relacionadas ao DoH:

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

informação relacionada