Antes, las aplicaciones basadas en la Web requerían que las extensiones del navegador usaran extensiones funciones de DNS, como DANE, descubrimiento de servicios DNS-SD, o incluso para resolver y cualquier cosa, excepto direcciones IP, como registros MX. Para usar funciones que dependen de DNSSEC, como los registros SSHFP, cualquiera de esas extensiones tendrían que validar las DNSSEC, ya que es posible que el navegador o el SO no lo hagan.
Desde 2016, el DNS público de Google ha ofrecido una API compatible con la Web para DoH con DNSSEC de seguridad que no requiere extensiones ni configuración del SO o del navegador. Los parámetros de consulta GET y las respuestas JSON simples permiten que los clientes analicen resultados con APIs web comunes y evitar detalles complejos de formatos de mensajes DNS, como compresión de puntero para nombres de dominio.
Consulta la página de documentación general del DoH para obtener información sobre el DoH. generalmente, como encabezados HTTP, manejo de redireccionamientos, prácticas recomendadas de privacidad y Códigos de estado HTTP
La página Transporte seguro (Secure Transports) tiene
Ejemplos de la línea de comandos de curl
para el DoH y la información común al DoH y el DNS a través de
TLS (DoT), como compatibilidad con TLS y truncamiento de DNS.
Especificación de la API de JSON
Todas las llamadas a la API son solicitudes HTTP GET. En el caso de los parámetros duplicados, solo se usa el primer valor.
Parámetros admitidos
- nombre
string, obligatoria
Es el único parámetro obligatorio. Se aceptan los caracteres de escape de barra inversa RFC 4343.
- La longitud (después de reemplazar los caracteres de escape de barra inversa) debe estar entre 1 y 253 (ignorando un punto final opcional si está presente).
- Todas las etiquetas (partes del nombre entre puntos) deben tener entre 1 y 63 bytes.
- Nombres no válidos, como
.example.com
,example..com
o string vacía get Error 400: Solicitud incorrecta. - Los caracteres que no son ASCII deben estar punycoded (
xn--qxam
, noελ
).
- tipo
cadena, valor predeterminado:
1
El tipo de RR se puede representar como un número en [1, 65535] o una cadena canónica (no distingue mayúsculas de minúsculas, como
A
oaaaa
). Puedes usar255
para "CUALQUIERA" pero ten en cuenta que este no es un reemplazo para enviar consultas tanto para los registros A y AAAA o MX. Los servidores de nombres autorizados no necesitan mostrar todos los registros para esas consultas. algunos no responden y otros (como cloudflare.com) solo devuelven HINFO- cd
booleano, predeterminado:
false
La marca de CD (marca de verificación inhabilitada). Usa
cd=1
ocd=true
para inhabilitar la validación de DNSSEC. usacd=0
,cd=false
o no usa el parámetrocd
para habilitar la validación de DNSSEC.- cant.
cadena, valor predeterminado: vacío
Opción de tipo de contenido deseado. Usa
ct=application/dns-message
para recibir un mensaje DNS binario en el HTTP en lugar de texto JSON. Usact=application/x-javascript
para solicitar de forma explícita texto JSON. Se ignoran otros valores de tipo de contenido y se muestra el contenido JSON predeterminado.- hacer
booleano, predeterminado:
false
La marca SÍ (DNSSEC OK). Usa
do=1
odo=true
para incluir registros DNSSEC (RRSIG, NSEC, NSEC3). Usado=0
,do=false
o ningún parámetrodo
para omitir los registros DNSSEC.Las aplicaciones siempre deben administrar (e ignorar, si es necesario) las DNSSEC registros en las respuestas JSON, ya que otras implementaciones siempre pueden incluirlas, y es posible que cambiemos el comportamiento predeterminado de las respuestas JSON en el futuro. (Las respuestas de mensajes DNS binarios siempre respetan el valor de la marca DO).
- edns_client_subnet
cadena, valor predeterminado: vacío
La opción edns0-client-subnet. El formato es una dirección IP con una máscara de subred. Ejemplos:
1.2.3.4/24
,2001:700:300::/48
.Si estás usando DNS-over-HTTPS por cuestiones de privacidad y no quieres cualquier parte de su dirección IP que se envíe a los servidores de nombres autorizados para la precisión de la ubicación geográfica, usa
edns_client_subnet=0.0.0.0/0
. El DNS público de Google normalmente envía información de red aproximada (por lo general, se pone a cero la última parte de la dirección IPv4).- random_padding
string, ignorado
Se ignora el valor de este parámetro. Ejemplo:
XmkMw~o_mgP2pf.gpw-Oi5dK
.A los clientes de APIs preocupados por posibles ataques a la privacidad en el canal lateral usando las los tamaños de paquetes de solicitudes GET de HTTPS pueden usar esto para hacer que todas las solicitudes se realicen con exactitud del mismo tamaño rellenando las solicitudes con datos aleatorios. Para evitar que se malinterprete la URL, restringe los caracteres de padding a los caracteres de URL sin reservar: letras mayúsculas y minúsculas, dígitos, guiones, puntos, guiones bajos y virgulillas.
Respuesta DNS en JSON
Una respuesta correcta (los comentarios agregados aquí no están presentes en las respuestas reales):
{
"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
}
Consulta RFC 7871 (Subred de cliente de EDNS) para detalles sobre el “alcance de la longitud del prefijo” y cómo afecta el almacenamiento en caché.
Una respuesta de falla con información de diagnóstico:
{
"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/."
}
Registros SPF y TXT con comillas incorporadas y atribución del servidor de nombres:
{
"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
}
],
}
Cadenas DNS
Todos los registros TXT se codifican como una sola string JSON, incluidos los usos de TXT más largos. los formatos de registro, como RFC 4408 (SPF) o RFC 4871 (DKIM).
EDNS
No se admite el mecanismo de extensión de EDNS general. La opción Subred de cliente de EDNS (edns-client-subnet) es un parámetro del GET y un campo de nivel superior en la respuesta JSON.