DNS over HTTPS (DoH)용 JSON API

이전에는 웹 기반 애플리케이션에서 고급 기능을 사용하려면 브라우저 확장 프로그램이 DANE, DNS-SD 서비스 검색과 같은 DNS 기능 또는 IP 주소 이외의 모든 주소(예: MX 레코드)를 SSHFP 레코드와 같은 DNSSEC 종속 기능을 사용하려면 이러한 확장 프로그램을 사용해야 합니다. 브라우저나 OS가 DNSSEC를 직접 검사하지 않을 수 있기 때문입니다.

2016년부터 Google Public DNS는 DNSSEC를 사용하는 DoH용 웹 친화적인 API를 제공했습니다 유효성 검사를 수행할 수 있습니다. 간단한 GET 쿼리 매개변수와 JSON 응답을 통해 클라이언트는 일반적인 웹 API를 사용하여 검색 결과를 얻을 수 있고 도메인 이름 포인터 압축

DoH에 대한 자세한 내용은 일반 DoH 문서 페이지를 참조하세요. 일반적으로 HTTP 헤더, 리디렉션 처리, 개인 정보 보호 권장사항, HTTP 상태 코드입니다.

보안 전송 페이지에는 DoH용 curl 명령줄 예시 및 DoH 및 DNS에 공통된 정보 TLS 지원 및 DNS 자르기와 같은 TLS (DoT)

JSON API 사양

모든 API 호출은 HTTP GET 요청입니다. 중복 매개변수의 경우 첫 번째 값만 사용됩니다.

지원되는 매개변수

이름

문자열, 필수

유일한 필수 매개변수입니다. RFC 4343 백슬래시 이스케이프가 허용됩니다.

  • 길이 (백슬래시 이스케이프 대체 후)는 1 ~ 1 사이여야 합니다. 253명 (선택적으로 후행 점이 있는 경우 무시)
  • 모든 라벨 (사이점 사이의 이름 부분)의 길이는 1~63바이트여야 합니다.
  • .example.com, example..com와 같은 잘못된 이름 또는 빈 문자열 가져오기 400 잘못된 요청입니다.
  • 비 ASCII 문자는 퓨니코딩해야 합니다 (ελ이 아닌 xn--qxam).
유형

문자열, 기본값: 1

RR 유형은 [1, 65535] 의 숫자 또는 표준 문자열로 나타낼 수 있습니다. A 또는 aaaa과 같이 대소문자를 구분하지 않습니다. 'ANY'에 255 사용 가능 이는 일반적인 쿼리를 지원하지 않음 A 및 AAAA 또는 MX 레코드 모두에 대한 쿼리를 보내는 대신 사용할 수 있습니다. 권한 있는 네임서버가 이러한 쿼리에 대한 모든 레코드를 반환할 필요는 없습니다. 응답하지 않는 응답도 있고, 다른 인스턴스 (예: cloudflare.com)는 HINFO만 반환합니다.

cd

불리언, 기본값: false

CD (Checking Disabled) 플래그. cd=1 또는 cd=true를 사용하여 DNSSEC 유효성 검사를 사용 중지합니다. cd=0, cd=false 또는 cd 매개변수를 사용하지 않고 DNSSEC 유효성 검사를 사용 설정합니다.

개수

문자열, 기본값: 비어 있음

원하는 콘텐츠 유형 옵션 ct=application/dns-message를 사용하여 응답 HTTP 본문입니다. ct=application/x-javascript를 사용하여 JSON 텍스트를 명시적으로 요청합니다. 다른 콘텐츠 유형 값은 무시되고 기본 JSON 콘텐츠가 반환됩니다.

포함된

불리언, 기본값: false

DO (DNSSEC OK) 플래그. do=1 또는 do=true를 사용하여 DNSSEC 레코드 (RRSIG, NSEC, NSEC3)를 포함합니다. do=0, do=false 또는 do 매개변수를 사용하지 않고 DNSSEC 레코드를 생략합니다.

애플리케이션은 모든 DNSSEC를 항상 처리 (필요한 경우 무시)해야 함 JSON 응답에 포함된 레코드 향후 JSON 응답의 기본 동작을 변경할 수 있습니다. 바이너리 DNS 메시지 응답은 항상 DO 플래그의 값을 따릅니다.

edns_client_subnet

문자열, 기본값: 비어 있음

edns0-client-subnet 옵션 형식은 서브넷 마스크가 있는 IP 주소입니다. 예시: 1.2.3.4/24, 2001:700:300::/48.

개인 정보 보호 문제로 인해 DNS-over-HTTPS를 사용하고 있고 HTTPS를 사용하지 않고 IP 주소의 모든 부분이 권한 네임서버로 전송됩니다. 지리적 위치 정확도를 얻으려면 edns_client_subnet=0.0.0.0/0를 사용하세요. Google Public DNS는 일반적으로 대략적인 네트워크 정보를 전송합니다. (일반적으로 IPv4 주소의 마지막 부분을 0으로 만듭니다.)

random_padding

문자열, 무시됨

이 매개변수의 값은 무시됩니다. 예: XmkMw~o_mgP2pf.gpw-Oi5dK

API 클라이언트는 HTTPS GET 요청의 패킷 크기는 이것을 사용하여 모든 요청을 정확하게 요청을 임의의 데이터로 패딩하여 동일한 크기로 생성되도록 할 수 있습니다. URL의 잘못된 해석을 방지하기 위해 패딩 문자의 수를 제한합니다. 를 예약되지 않은 URL 문자로 대체합니다. 대소문자, 숫자, 하이픈, 마침표, 밑줄, 물결표가 포함되어 있습니다.

JSON 형식의 DNS 응답

성공적인 응답 (여기에 추가된 댓글은 실제 응답에 표시되지 않음):

{
  "Status": 0,  // NOERROR - Standard DNS response code (32 bit integer).
  "TC": false,  // Whether the response is truncated
  "RD": true,   // Always true for Google Public DNS
  "RA": true,   // Always true for Google Public DNS
  "AD": false,  // Whether all response data was validated with DNSSEC
  "CD": false,  // Whether the client asked to disable DNSSEC
  "Question":
  [
    {
      "name": "apple.com.",  // FQDN with trailing dot
      "type": 1              // A - Standard DNS RR type
    }
  ],
  "Answer":
  [
    {
      "name": "apple.com.",   // Always matches name in the Question section
      "type": 1,              // A - Standard DNS RR type
      "TTL": 3599,            // Record's time-to-live in seconds
      "data": "17.178.96.59"  // Data for A - IP address as text
    },
    {
      "name": "apple.com.",
      "type": 1,
      "TTL": 3599,
      "data": "17.172.224.47"
    },
    {
      "name": "apple.com.",
      "type": 1,
      "TTL": 3599,
      "data": "17.142.160.59"
    }
  ],
  "edns_client_subnet": "12.34.56.78/0"  // IP address / scope prefix-length
}

자세한 내용은 RFC 7871 (EDNS 클라이언트 서브넷)을 참조하세요. '범위 접두사-길이'와 이것이 캐싱에 미치는 영향에 대한 세부정보입니다.

진단 정보가 포함된 실패 응답:

{
  "Status": 2,  // SERVFAIL - Standard DNS response code (32 bit integer).
  "TC": false,  // Whether the response is truncated
  "RD": true,   // Always true for Google Public DNS
  "RA": true,   // Always true for Google Public DNS
  "AD": false,  // Whether all response data was validated with DNSSEC
  "CD": false,  // Whether the client asked to disable DNSSEC
  "Question":
  [
    {
      "name": "dnssec-failed.org.",  // FQDN with trailing dot
      "type": 1                      // A - Standard DNS RR type
    }
  ],
  "Comment": "DNSSEC validation failure. Please check http://dnsviz.net/d/dnssec-failed.org/dnssec/."
}

따옴표 및 네임서버 속성이 포함된 SPF 및 TXT 레코드:

{
  "Status": 0,  // NOERROR - Standard DNS response code (32 bit integer).
  "TC": false,  // Whether the response is truncated
  "RD": true,   // Always true for Google Public DNS
  "RA": true,   // Always true for Google Public DNS
  "AD": false,  // Whether all response data was validated with DNSSEC
  "CD": false,  // Whether the client asked to disable DNSSEC
  "Question": [
    {
      "name": "*.dns-example.info.",  // FQDN with trailing dot
      "type": 99                      // SPF - Standard DNS RR type
    }
  ],
  "Answer": [
    {
      "name": "*.dns-example.info.",   // Always matches name in Question
      "type": 99,                      // SPF - Standard DNS RR type
      "TTL": 21599,                    // Record's time-to-live in seconds
      "data": "\"v=spf1 -all\""        // Data for SPF - quoted string
    }
  ],
  "Comment": "Response from 216.239.38.110"
  // Uncached responses are attributed to the authoritative name server
}

{
  "Status": 0,  // NOERROR - Standard DNS response code (32 bit integer).
  "TC": false,  // Whether the response is truncated
  "RD": true,   // Always true for Google Public DNS
  "RA": true,   // Always true for Google Public DNS
  "AD": false,  // Whether all response data was validated with DNSSEC
  "CD": false,  // Whether the client asked to disable DNSSEC
  "Question": [
    {
      "name": "s1024._domainkey.yahoo.com.", // FQDN with trailing dot
      "type": 16                             // TXT - Standard DNS RR type
    }
  ],
  "Answer": [
    {
      "name": "s1024._domainkey.yahoo.com.", // Always matches Question name
      "type": 16,                            // TXT - Standard DNS RR type
      "data": "\"k=rsa;  p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfm\"\"JiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB; n=A 1024 bit key;\""
      // Data for TXT - multiple quoted strings
    }
  ],
}

DNS 문자열

모든 TXT 레코드는 더 긴 TXT 사용을 비롯한 단일 JSON 문자열로 인코딩됩니다. 레코드 형식, RFC 4408 (SPF) 또는 RFC 4871 (DKIM).

EDNS

일반적인 EDNS 확장 메커니즘은 지원되지 않습니다. EDNS 클라이언트 서브넷 옵션 (edns-client-subnet)은 GET 요청 및 JSON 응답의 최상위 필드입니다.