명령줄을 사용하여 TLS를 통해 HTTPS/DNS를 통해 DNS를 쿼리하는 방법은 무엇입니까?

명령줄을 사용하여 TLS를 통해 HTTPS/DNS를 통해 DNS를 쿼리하는 방법은 무엇입니까?

사용자가 지정한 DNS 서버로 DNS 레코드를 쿼리해야 하는 스크립트를 작성 중입니다. DNS 서버는 UDP, TCP, DoH(DNS over HTTPS) 및 DoT(DNS over TLS)를 포함한 모든 프로토콜에 있을 수 있습니다.

나는 digUDP와 TCP(플래그 포함)에 대한 DNS를 처리할 수 있다는 것을 알고 있습니다 +tcp. digDoH 및 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

kdigDoT의 경우 에서 제공하는 도구를 사용할 수 있습니다 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.8TLS 호스트( )의 미리 확인된 주소입니다 dns.google.com.


업데이트: 여기에 도구가 있습니다(https://github.com/ameshkov/dnslookup)는 모든 주요 DNS 프로토콜을 자체적으로 지원하고 기계가 읽을 수 있는 출력을 생성할 수 있습니다.

답변2

곱슬 곱슬하다공식적인DoH버전 7.62.0부터 지원됩니다. (문제는 대상 엔드포인트 중 이 버전으로 업데이트된 컬링이 몇 개인지입니다.)

옵션 을 활용하여 사용하세요 --doh-url. 예:

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

보다: https://github.com/curl/curl/wiki/DOH-구현 https://daniel.haxx.se/blog/2018/09/06/doh-in-curl/

답변3

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을 선언하면 포트 443의 HTTPS를 사용하여 제공된 DNS 서버 도메인()을 기본 엔드포인트에 dig쿼리합니다 .cloudflare-dns.com/dns-query

효과적으로 위 명령은 다음에 대해 DoH(POST) 요청을 보냅니다 foobar.com.

GET 요청으로 전환하고, 다른 엔드포인트를 선언하는 등의 옵션이 있습니다.매뉴얼 페이지DoH와 관련된 쿼리 옵션은 다음과 같습니다.

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

관련 정보