Tiempos de espera de resolución de reenviadores y reenviadores condicionales
En este artículo se describe el comportamiento de reserva y tiempo de espera que existen cuando una o varias direcciones IP de servidores DNS están configuradas como reenviadores o reenviadores condicionales en un servidor DNS.
Número de KB original: 2834250
Resumen
De forma similar a los clientes DNS, la configuración de servidores DNS con más de un reenviador o reenviador condicional agrega tolerancia a errores adicional a la infraestructura DNS. Agregar varios servidores DNS como reenviadores o reenviadores condicionales permite que los nombres DNS sigan resolviendo en caso de errores del único servidor configurado, del vínculo de red subyacente o de la infraestructura de red auxiliar.
Sin embargo, agregar tolerancia a errores en servidores es aún más crítico porque hay potencialmente una operación transitiva que algunos servidores están haciendo en nombre de una pluralidad de clientes que ahora están colgando. A continuación, los recursos se consumen durante tiempos incrementalmente más largos.
Asegúrese de ajustar correctamente los parámetros si desea usar tres o más reenviadores o reenviadores condicionales porque es posible que la configuración predeterminada no esté optimizada para esta gran cantidad de servidores.
¿Cuál es el comportamiento predeterminado de un servidor DNS cuando se configuran más de dos servidores DNS como reenviadores?
Para comprender cómo funciona esto, las variables clave son:
RecurssionTimeout : cuánto tiempo espera el sistema de nombres de dominio (DNS) a que los servidores remotos respondan a una consulta de cliente recursiva antes de finalizar la búsqueda.
Se guarda en el registro
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeout
en y se puede configurar a travésdnscmd /config /RecursionTimeout <value>
de . Esto se puede comprobar mediante el cmdletGet-DnsServerRecursion
de PowerShell .El valor predeterminado es de 8 segundos en Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 y Windows Server 2022.
RecursionTimeout se define en el nivel de servidor DNS y es independiente de la zona específica consultada.
ForwardingTimeout : cuánto tiempo espera el sistema de nombres de dominio (DNS) para que cada servidor de la lista de reenviadores responda a una consulta.
Se guarda en el registro en
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\ForwardingTimeout
y se puede configurar a travésdnscmd /config /ForwardingTimeout <value>
de . Esto también se puede comprobar mediante el cmdletGet-DnsServerForwarder
de PowerShell .El valor predeterminado es 3 segundos en Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 y Windows Server 2022.
ForwardingTimeout se define en el nivel de servidor DNS y es independiente de la zona específica consultada.
Cuando el servidor DNS recibe una consulta de un registro en una zona para la que no es autoritativo y necesita usar reenviadores, el comportamiento predeterminado es el siguiente:
Tiempo (segundos desde el inicio) | Action |
---|---|
0 | El cliente consulta el servidor DNS. El servidor DNS reenvía inmediatamente la consulta a su primer reenviador. |
<forwarding_timeout> | Después <de forwarding_timeout> segundos, si el primer reenviador no respondió, el servidor DNS consulta el segundo reenviador. |
2 * <forwarding_timeout> +1 | Después <de forwarding_timeout> +1 segundos más, si el segundo reenviador no respondió, el servidor DNS consulta el tercer reenviador. |
... | ... |
N * <forwarding_timeout> +(N-1) | Después <de forwarding_timeout> + 1 segundos más, si el reenviador Nth no respondió, el servidor DNS consulta el reenviador (N+1). |
Nota:
Además del retraso configurado, puede haber un retraso adicional de medio segundo debido a la sobrecarga del sistema.
El algoritmo se detiene cuando el tiempo transcurrido ha superado el valor RecursionTimeout.
Si expira RecursionTimeout , el servidor DNS responderá de nuevo al cliente con un error de servidor.
Nota:
No se envía el error del servidor inmediatamente después de la expiración de RecursionTimeout , pero solo cuando es el momento de probar el siguiente reenviador.
Si el servidor administra ponerse en contacto con todos los reenviadores antes de que RecursionTimeout expire sin obtener respuestas, intentará usar las sugerencias raíz para la resolución de nombres (configuración predeterminada, a menos que se deshabilite la recursividad en el nivel de servidor).
Esto significa que, con la configuración predeterminada, un servidor DNS de Windows podrá consultar como máximo tres reenviadores. No habrá tiempo suficiente para llegar para usar el cuarto reenviador. De hecho, con la configuración predeterminada, el servidor DNS de Windows hará lo siguiente:
- Consulta del primer reenviador después de 0 segundos
- Consulta del segundo reenviador después de 3,5 segundos
- Consultar el tercer reenviador después de 3,5 + 4 = 7,5 segundos
En el octavo segundo, RecursionTimeout expira, por lo que no llegaremos al punto donde se consulta el cuarto reenviador (que habría ocurrido después de 3,5 + 4 + 4 = 11,5 segundos).
Enviaremos la respuesta error del servidor después de 11,5 segundos.
Ejemplo:
El servidor DNS con la dirección IP 192.168.0.1 está configurado con cinco reenviadores (10.0.0.1-10.0.0.5).
El cliente tiene la dirección IP 10.0.0.31 y está consultando para Microsoft.com
.
En una captura de red, veríamos la siguiente salida del Monitor de red (nota 10.0.0.4 y 10.0.0.5 nunca consultado):
Time Time Offset TimeDelta Source Destination Details
6:33:51.7507293 0.2731738 0.0000000 10.0.0.31 192.168.0.1 DNS:QueryId = 0xF03, QUERY (consulta estándar), Consulta demicrosoft.com
tipo Complemento de host en la clase Internet
6:33:51.7510021 0.2734466 0.0002728 192.168.0.1 1 10.0.0.1 DNS:QueryId = 0xBD57, QUERY (consulta estándar), Consulta demicrosoft.com
tipo Host Addr en la clase Internet
6:33:55.2997074 3.8221519 3.5487053 192.168.0.1 10.0.0.2 DNS:QueryId = 0xBD57, QUERY (consulta estándar), Consulta demicrosoft.com
tipo Complemento de host en la clase Internet
6:33:59.2931644 7.8156089 3.9934570 192.168.0.1 10.0.0.3 DNS:QueryId = 0xBD57, QUERY (consulta estándar), Consulta paramicrosoft.com
tipo Complemento de host en la clase Internet
6:34:03.3112753 11.8337198 4.0181109 192.168.0.1 10.0.0.31 DNS:QueryId = 0xF03, QUERY (consulta estándar), Respuesta: error del servidor
¿Cuál es el comportamiento predeterminado de un servidor DNS cuando se configuran más de dos servidores DNS como reenviadores condicionales?
De forma similar a los reenviadores, hay dos variables clave para reenviadores condicionales. Todavía tenemos RecursionTimeout (que funciona en el nivel de servidor), pero en este escenario se usa ForwarderTimeout en lugar de ForwardingTimeout. Tenga en cuenta específicamente que ForwarderTimeout funciona en una zona y tiene valores predeterminados diferentes:
RecurssionTimeout : cuánto tiempo espera el sistema de nombres de dominio (DNS) a que los servidores remotos respondan a una consulta de cliente recursiva antes de finalizar la búsqueda.
Se guarda en el registro en
HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\RecursionTimeout
.Se puede configurar a través
dnscmd /config /RecursionTimeout <value>
de .El valor predeterminado es de 8 segundos en Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 y Windows Server 2022.
RecursionTimeout se define en el nivel de servidor DNS y es independiente de la zona específica consultada.
ForwarderTimeout : cuánto tiempo espera el sistema de nombres de dominio (DNS) para que cada servidor de la lista de reenviadores condicionales responda a una consulta.
Dado que los reenviadores condicionales están configurados para zonas específicas, ForwarderTimeout también depende de la zona.
Se guarda en el registro en
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DNS Server\Zones\ <zone_name>\ForwarderTimeout
.El valor predeterminado es 5 segundos en Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019 y Windows Server 2022.
Esta es también la configuración que puede ver en la GUI de reenviadores condicionales.
Cuando el servidor DNS recibe una consulta de un registro en una zona para la que no es autoritativo y está configurado para usar reenviadores condicionales para él, el comportamiento predeterminado es el siguiente:
Tiempo (segundos desde el inicio) | Action |
---|---|
0 | El cliente consulta el servidor DNS. El servidor DNS reenvía inmediatamente la consulta a su primer reenviador condicional. |
<forwarder_timeout> | Después <de forwarder_timeout> segundos, si el primer reenviador condicional no respondió, el servidor DNS consulta el segundo reenviador condicional. |
2 * <forwarder_timeout> +1 | Después <de forwarder_timeout> +1 segundos más, si el segundo reenviador condicional no respondió, el servidor DNS consulta el tercer reenviador condicional. |
... | ... |
N * <forwarder_timeout> +(N-1) | Después <de forwarder_timeout> +1 segundos más, si el reenviador condicional Nth no respondió, el servidor DNS consulta el reenviador condicional (N+1). |
Nota:
Además del retraso configurado, puede haber un retraso adicional de medio segundo debido a la sobrecarga del sistema.
El algoritmo se detiene cuando el tiempo transcurrido ha superado el valor recursionTimeout.
Si expira RecursionTimeout , el servidor DNS responderá de nuevo al cliente con un error de servidor.
Nota:
No se envía el error del servidor inmediatamente después de la expiración de RecursionTimeout , pero solo cuando es el momento de probar el siguiente reenviador condicional.
Esto significa que, con la configuración predeterminada, un servidor DNS de Windows podrá consultar como máximo dos reenviadores condicionales. No habrá tiempo suficiente para llegar para usar el tercer reenviador condicional. De hecho, con la configuración predeterminada, el servidor DNS de Windows hará lo siguiente:
- Consulta del primer reenviador después de 0 segundos
- Consulta del segundo reenviador después de 5,5 segundos
En el octavo segundo, RecursionTimeout expira, por lo que no llegaremos al punto donde se consulta el tercer reenviador condicional (que habría ocurrido después de 5,5 + 6 = 11,5 segundos).
Enviaremos la respuesta error del servidor después de 11,5 segundos.
Ejemplo:
El servidor DNS con la dirección IP 192.168.0.1 está configurado con cinco reenviadores condicionales (10.0.0.1-10.0.0.5) para la zona Microsoft.com
.
El cliente tiene la dirección IP 10.0.0.31 y está consultando para Microsoft.com
.
En una captura de red, veríamos la siguiente salida del Monitor de red (nota 10.0.0.3, 10.0.0.4 y 10.0.0.5 nunca consultado):
Time Time Offset TimeDelta Source Destination Details
6:50:32.5481816 0.4306857 0.0000000 10.0.0.33 192.168.0.1 DNS:QueryId = 0x245A, QUERY (consulta estándar), Query formicrosoft.com
of type Host Addr on class Internet
6:50:32.5484341 0.4309382 0.0002525 192.168.0.1 1 10.0.0.1 DNS:QueryId = 0x252B, QUERY (consulta estándar), Consulta paramicrosoft.com
tipo Complemento de host en la clase Internet
6:50:38.1695163 6.0520204 5.6210822 192.168.0.1 10.0.0.2 DNS:QueryId = 0x252B, QUERY (consulta estándar), Consulta demicrosoft.com
tipo Host Addr en la clase Internet
6:50:44.1856567 12.0681608 6.0161404 192.168.0.1 10.0.0.33 DNS:QueryId = 0x245A, QUERY (consulta estándar), Respuesta: error del servidor