DNS-over-HTTPS (DoH)

El DNS público de Google proporciona dos APIs de DoH distintas en estos extremos:

  • https://dns.google/dns-query: RFC 8484 (GET y POST)
  • https://dns.google/resolve? – API de JSON (GET)

La página Descripción general del transporte seguro tiene ejemplos de la línea de comandos de curl para usar ambas API, así como detalles de TLS y otras funciones comunes de DNS por TLS (DoT) y DoH.

DoH también es compatible con el servicio DNS64 público de Google solo IPv6.

El DNS público de Google no admite URLs http: no seguras para las llamadas a la API.

Métodos HTTP

GET
El uso del método GET puede reducir la latencia, ya que se almacena en caché de manera más eficaz. Las solicitudes GET de RFC 8484 deben tener un parámetro de consulta ?dns= con un mensaje DNS codificado en Base64Url. El método GET es el único método compatible con la API de JSON.
POST
El método POST solo es compatible con la API de RFC 8484 y usa un mensaje DNS binario con Application-Type/dns-message en el cuerpo de la solicitud y en la respuesta HTTP de DoH.
HEAD
En este momento, no se admite el encabezado HEAD y muestra un error 400 de Solicitud incorrecta.

Otros métodos muestran errores 501 Not Implemented.

Códigos de estado HTTP

El DoH del DNS público de Google muestra los siguientes códigos de estado HTTP:

Completado correctamente

200 OK
El análisis de HTTP y la comunicación con el agente de resolución de DNS se realizaron correctamente. El contenido del cuerpo de la respuesta es una respuesta DNS con codificación binaria o JSON, según el extremo de la consulta, el encabezado Aceptar y los parámetros GET.

Redirecciones

Movido permanentemente 301
Los clientes deben volver a intentarlo en la URL proporcionada en el encabezado Location:. Si la consulta original era una solicitud POST, los clientes solo deberían volver a intentarlo con GET si la URL nueva especifica un argumento de parámetro GET de dns; de lo contrario, los clientes deben volver a intentarlo con POST.

Es posible que se usen otros códigos, como 302 Encontrado, 307 Redireccionamiento temporal o 308 Redireccionamiento permanente, en el futuro, y los clientes de DoH deben manejar los cuatro códigos.

Las respuestas con los códigos 301 y 308 permanentes se deben almacenar en caché de forma indefinida y, si es posible, se les puede solicitar a los usuarios que actualicen su configuración original con la URL nueva.

Las solicitudes POST que obtienen respuestas 307 o 308 siempre se deben reintentar con POST.

Errores

Las respuestas de error incluirán una explicación del estado HTTP en el cuerpo, ya sea mediante HTML o texto sin formato.

400 Bad Request
Problemas para analizar los parámetros GET o un mensaje de solicitud de DNS no válido. Para parámetros GET incorrectos, el cuerpo HTTP debe explicar el error. La mayoría de los mensajes DNS no válidos obtienen un valor de 200 OK con un FORMERR. El error de HTTP se muestra para los mensajes ilegibles sin sección Question, una marca QR que indica una respuesta u otras combinaciones de marcas sin sentido con errores de análisis de DNS binarios.
Carga útil 413 demasiado grande
El cuerpo de una solicitud POST de RFC 8484 supera el tamaño máximo de mensaje de 512 bytes.
URI 414 demasiado largo
El encabezado de la consulta GET era demasiado grande o el parámetro dns tenía un mensaje DNS codificado en Base64Url que excedía el tamaño máximo del mensaje de 512 bytes.
415 Unsupported Media Type
El cuerpo de la POST no tenía un encabezado de tipo de contenido application/dns-message.
429 Too Many Requests
El cliente envió demasiadas solicitudes en un período determinado. Los clientes deben dejar de enviar solicitudes hasta el momento especificado en el encabezado "reintentar-después" (un tiempo relativo en segundos).
500 Internal Server Error
Errores de DoH internos del DNS público de Google.
No implementado [501 Not Implemented]
Solo se implementan los métodos GET y POST. Los demás obtienen este error.
502 Bad Gateway
El servicio de DoH no pudo comunicarse con los agentes de resolución de DNS público de Google.

En el caso de una respuesta 502, aunque reintentar en una dirección de DNS público de Google alternativa podría ser útil, una respuesta de resguardo más eficaz sería probar otro servicio de DoH o cambiar a DNS UDP o TCP tradicional en 8.8.8.8.

Beneficios del DoH

El uso de HTTPS, no solo la encriptación TLS, tiene algunos beneficios prácticos:

  • Las API de HTTPS con amplia disponibilidad y compatibilidad simplifican la implementación tanto para el DNS público de Google como para los clientes potenciales.
  • Un servicio HTTPS proporciona a las apps web acceso a todos los tipos de registro DNS, lo que evita las limitaciones del navegador existente y las APIs de DNS del SO, que, por lo general, solo admiten las búsquedas de host a dirección.
  • Los clientes que implementan la compatibilidad con HTTPS basado en UDP en QUIC pueden evitar problemas como el bloqueo de cabeza de línea que puede ocurrir cuando se usa el transporte TCP.

Prácticas recomendadas de privacidad para el DoH

Los desarrolladores de aplicaciones de DoH deben tener en cuenta las prácticas recomendadas de privacidad que se describen en RFC 8484 y que se expanden a continuación:

  • Limita el uso de encabezados HTTP

    Los encabezados HTTP revelan información sobre la implementación de DoH del cliente y se pueden usar para anular el anonimato de los clientes. Los encabezados como Cookie, User-Agent y Accept-Language son los elementos más infractores, pero incluso el conjunto de encabezados enviados puede ser revelador. Para minimizar este riesgo, envía solo los encabezados HTTP requeridos para el DoH: Host, Tipo de contenido (para POST) y, si es necesario, Aceptar. El usuario-agente debe incluirse en todas las versiones de desarrollo o de prueba.

  • Usa opciones de relleno de EDNS

    Sigue las instrucciones de RFC 8467 sobre el uso de opciones de relleno de EDNS para rellenar consultas de DoH con algunas longitudes comunes a fin de brindar protección contra el análisis de tráfico. También es posible usar padding HTTP/2, pero, a diferencia de padding de EDNS, no se generará padding en las respuestas de los servidores DoH.

  • Usa RFC 8484 POST solo para aplicaciones o modos de navegador sensibles a la privacidad.

    El uso de POST para las consultas de DoH reduce la capacidad de almacenamiento en caché de las respuestas y puede aumentar la latencia de DNS, por lo que, generalmente, no se recomienda. Sin embargo, reducir el almacenamiento en caché es probablemente recomendable para aplicaciones sensibles a la privacidad, y podría proteger contra ataques de sincronización de apps web que intentan determinar qué dominios visitó el usuario últimamente.

Issues

Para informar un error o solicitar una función nueva, informa el problema relacionado con el DoH.