Pide tu presupuesto ya!

Solucionar problemas de DNS con PowerShell

Los problemas de DNS son molestos porque rara vez se anuncian como problemas de DNS. Una aplicación dice que el servidor no funciona. Un navegador dice que no se puede acceder al sitio. Se agota el tiempo de espera de un archivo compartido. Luego, después de veinte minutos de hurgar en firewalls y servicios, descubre que el cliente estuvo preguntando al solucionador equivocado todo el tiempo.

PowerShell le ofrece un camino más rápido. En lugar de adivinar, puede probar la resolución de nombres, inspeccionar la configuración del cliente DNS, verificar la accesibilidad del puerto, borrar entradas de caché obsoletas y comparar respuestas de diferentes servidores DNS desde una consola.

En este tutorial, utilizará PowerShell para solucionar los problemas de DNS con los que más se enfrentan los administradores de Windows: mala configuración del cliente, caché obsoleta, registros faltantes, reenvío interrumpido y resolución de nombres que funciona en una máquina pero no en otra.

Requisitos previos

Para seguirlo, necesitarás:

  • Una computadora con Windows 10, Windows 11 o Windows Server con PowerShell 5.1 o posterior.

  • Permiso para ejecutar PowerShell localmente. Ejecute como administrador para cambios de caché y adaptadores.

  • El nombre de al menos un host interno o un nombre DNS público que puedes probar.

  • Acceso opcional a un servidor DNS si desea inspeccionar zonas y registros del lado del servidor.

Relacionado: Introducción a PowerShell

Comience con el síntoma

Antes de ejecutar comandos, anote lo que realmente está fallando. La solución de problemas de DNS se desvía cuando prueba algo incorrecto.

Primero haga una pregunta: ¿el nombre del problema es resolución, conectividad o aplicación?

Síntoma Área probable Primer comando de PowerShell
El nombre no se resuelve búsqueda de DNS Resolve-DnsName
El nombre se resuelve en la IP incorrecta Registro o caché Resolve-DnsName, Get-DnsClientCache
El nombre se resuelve pero la aplicación falla Red o servicio Test-NetConnection
Una computadora funciona y otra falla Configuración del cliente Get-DnsClientServerAddress
Los nombres internos fallan pero los nombres de Internet funcionan Sufijo DNS, zona o reenvío Resolve-DnsName, Get-DnsClient

El resto del flujo de trabajo sigue ese orden. Confirme el nombre, confirme el servidor DNS, confirme el caché y luego confirme la conectividad.

Resolución de nombre de prueba con Resolve-DnsName

El Resolve-DnsName cmdlet es el primer comando a utilizar porque le hace una pregunta directa a DNS y muestra la respuesta. Es el reemplazo de PowerShell para la mayoría de los nslookup cheques.

Primero ejecute una búsqueda simple.

Resolve-DnsName -Name diseño-web-barato.com

Si DNS funciona, verá uno o más registros devueltos. Para un sitio web, los campos útiles suelen ser Name, Type, IPAddressy NameHost.

Ahora pruebe el tipo de registro exacto que espera.

Resolve-DnsName -Name diseño-web-barato.com -Type A
Resolve-DnsName -Name diseño-web-barato.com -Type AAAA
Resolve-DnsName -Name diseño-web-barato.com -Type MX

Es importante especificar el tipo de registro. Un dominio puede tener registros de correo en funcionamiento y registros web rotos, o registros de IPv4 en funcionamiento y ningún registro de IPv6. Si solo ejecuta una búsqueda genérica, es posible que no detecte el error real.

Relacionado: Documentación de Microsoft Resolve-DnsName

Consultar un servidor DNS específico

Es posible que el solucionador predeterminado de un cliente no sea el servidor que usted cree que es. Para eliminar esa incertidumbre, consulte un servidor DNS específico.

Resolve-DnsName -Name fileserver01.contoso.com -Server 10.10.1.10

Luego compare la respuesta con un solucionador público.

Resolve-DnsName -Name diseño-web-barato.com -Server 1.1.1.1
Resolve-DnsName -Name diseño-web-barato.com -Server 8.8.8.8

Si un servidor DNS devuelve una respuesta y otro no, el problema no es la aplicación cliente. El problema es específico del solucionador. Eso generalmente apunta a uno de estos problemas:

  • Al servidor DNS interno le falta el registro.

  • Un reenviador condicional está roto.

  • Un solucionador público no puede ver una zona solo interna.

  • La replicación entre servidores DNS no se ha completado.

  • Existe un registro obsoleto en un solucionador pero no en otro.

Esta comparación es especialmente útil durante las migraciones. Si un controlador de dominio tiene el nuevo registro y otro no, los clientes parecerán fallar aleatoriamente dependiendo del solucionador que utilicen.

Compruebe qué servidores DNS utiliza el cliente

Una vez que sepa que una búsqueda falla desde una computadora, verifique qué servidores DNS está usando esa computadora.

Get-DnsClientServerAddress -AddressFamily IPv4

Verá cada interfaz de red y sus direcciones de servidor DNS configuradas. Busque el adaptador activo. Las VPN, Wi-Fi, Ethernet y los adaptadores virtuales pueden tener su propia lista de resolución.

Para una vista más limpia, filtre a los adaptadores que están activos.

Get-NetAdapter |
  Where-Object Status -eq 'Up' |
  Get-DnsClientServerAddress -AddressFamily IPv4

Si el cliente apunta a un servidor DNS antiguo, un enrutador doméstico o un solucionador público cuando debería usar DNS interno, la resolución de nombres fallará para los hosts internos. Corrija el adaptador, el alcance de DHCP, el perfil de VPN o la política de red que proporcionó el solucionador incorrecto.

Relacionado: Documentación de Microsoft Get-DnsClientServerAddress

Inspeccionar y borrar la caché del cliente DNS

Windows almacena en caché las respuestas DNS localmente. Ese caché es útil hasta que conserva una mala respuesta.

Inspeccione el caché.

Get-DnsClientCache | Where-Object Entry -like '*fileserver*'

Si encuentra una dirección antigua, borre el caché.

Clear-DnsClientCache

Luego ejecute la búsqueda nuevamente.

Resolve-DnsName -Name fileserver01.contoso.com

Borrar el caché no es una solución en sí mismo. Es una forma de comprobar si el cliente tenía información obsoleta. Si la respuesta incorrecta aparece inmediatamente después de borrar el caché, los datos incorrectos provienen de un servidor DNS, no del cliente local.

Relacionado: Documentación de Microsoft Clear-DnsClientCache

Pruebe la conectividad después de que se resuelva el DNS

Una búsqueda de DNS exitosa solo demuestra que un nombre se asigna a una dirección. No prueba que el servicio sea accesible.

Usar Test-NetConnection después de que se resuelva el DNS.

Test-NetConnection -ComputerName fileserver01.contoso.com -Port 445

Para un servidor web, pruebe HTTPS.

Test-NetConnection -ComputerName diseño-web-barato.com -Port 443

Mira a TcpTestSucceeded. Si DNS se resuelve pero la prueba de TCP falla, pase la solución de problemas al enrutamiento, las reglas de firewall, los enlaces de servicios o la aplicación. DNS ya hizo su trabajo.

Esta secuencia evita un error común: culpar al DNS porque había un nombre involucrado. Si la resolución del nombre tiene éxito y el puerto está bloqueado, cambiar los registros DNS no ayudará.

Relacionado: Documentación de Microsoft Test-NetConnection

Comprobar el comportamiento de búsqueda del sufijo DNS

Los nombres cortos son convenientes hasta que ocultan la consulta real. Cuando un usuario escribe fileserver01Windows puede agregar sufijos DNS como corp.contoso.com o contoso.local.

Verifique la configuración del cliente DNS.

Get-DnsClient | Select-Object InterfaceAlias, ConnectionSpecificSuffix, RegisterThisConnectionsAddress

Luego pruebe el nombre de dominio completo.

Resolve-DnsName -Name fileserver01.corp.contoso.com

Si el nombre completo funciona pero el nombre corto falla, el registro DNS puede estar bien. La lista de búsqueda de sufijos o el sufijo específico de la conexión pueden ser el problema.

Esto es común en clientes VPN. Una máquina en la red de la oficina puede agregar el sufijo correcto, mientras que la misma computadora portátil en una VPN no puede hacerlo. El resultado parece aleatorio hasta que se comparan los nombres exactos que se consultan.

Compare clientes que trabajan y quebrados

Cuando una computadora funciona y otra no, compárelas una al lado de la otra. PowerShell hace que esto sea rápido.

En ambas máquinas, ejecute:

$target="fileserver01.contoso.com"

[pscustomobject]@{
    ComputerName = $env:COMPUTERNAME
    DnsServers   = (Get-DnsClientServerAddress -AddressFamily IPv4 |
                    Where-Object ServerAddresses |
                    Select-Object -ExpandProperty ServerAddresses) -join ', '
    Lookup       = (Resolve-DnsName -Name $target -ErrorAction SilentlyContinue |
                    Where-Object IPAddress |
                    Select-Object -First 1 -ExpandProperty IPAddress)
}

Buscas diferencias, no perfección. Si el cliente que trabaja usa 10.10.1.10 y el cliente roto usa 192.168.1.1tienes tu ventaja. Si ambos clientes usan el mismo solucionador pero obtienen respuestas diferentes, verifique el caché, el equilibrio de carga del servidor DNS o la replicación de registros.

Solucionar problemas comunes de DNS

Utilice la siguiente tabla como guía para tomar decisiones rápidas.

Problema lo que verás que hacer
Servidor DNS incorrecto Get-DnsClientServerAddress muestra un solucionador inesperado Reparar la configuración de DHCP, VPN o adaptador
Caché de cliente obsoleto Get-DnsClientCache muestra un registro antiguo Correr Clear-DnsClientCacheluego vuelva a probar
Registro faltante Resolve-DnsName no devuelve respuesta del servidor interno autorizado Crear o reparar el registro DNS
Registro equivocado La búsqueda devuelve una dirección IP antigua Actualizar el registro y verificar el comportamiento TTL
Fallo de conectividad DNS se resuelve pero Test-NetConnection falla Verifique el firewall, el enrutamiento, el estado del servicio o el balanceador de carga
Error de nombre corto FQDN funciona pero el nombre corto falla Corregir el comportamiento de búsqueda de sufijos DNS
Respuestas inconsistentes Diferentes servidores DNS devuelven resultados diferentes Verifique la replicación de zona, el reenvío y los datos obsoletos

El hábito importante es probar cada capa antes de continuar. La solución de problemas de DNS se vuelve más sencilla cuando se deja de tratar cada falla como un gran problema.

Cree un script de prueba de DNS repetible

Una vez que conozca los comandos, envuélvalos en una pequeña función que pueda reutilizar.

function Test-DnsPath {
    param(
        [Parameter(Mandatory)]
        [string]$Name,

        [int]$Port = 443,

        [string[]]$DnsServer
    )

    foreach ($server in $DnsServer) {
        Resolve-DnsName -Name $Name -Server $server -ErrorAction SilentlyContinue |
            Select-Object @{Name="Server";Expression={$server}}, Name, Type, IPAddress, NameHost
    }

    Resolve-DnsName -Name $Name -ErrorAction SilentlyContinue |
        Select-Object @{Name="Server";Expression={'ClientDefault'}}, Name, Type, IPAddress, NameHost

    Test-NetConnection -ComputerName $Name -Port $Port |
        Select-Object ComputerName, RemoteAddress, RemotePort, TcpTestSucceeded
}

Ejecútelo así:

Test-DnsPath -Name diseño-web-barato.com -Port 443 -DnsServer 1.1.1.1,8.8.8.8

Esta función hace tres cosas en una sola pasada: compara solucionadores, prueba el solucionador predeterminado del cliente y verifica el puerto de destino. Esto es suficiente para separar la mayoría de las fallas de DNS de las fallas de red sin necesidad de abrir tres herramientas diferentes.

Sigue siendo aburrida la resolución de problemas de DNS

La resolución de problemas de DNS debería ser aburrida. Haga las mismas preguntas en el mismo orden cada vez.

Primero, ¿puede el cliente resolver el nombre? En segundo lugar, ¿qué servidor DNS respondió? En tercer lugar, ¿el cliente utiliza los servidores DNS correctos? Cuarto, ¿el caché está obsoleto? Quinto, ¿la dirección resuelta realmente acepta tráfico en el puerto esperado?

PowerShell le brinda respuestas directas a cada pregunta. Usar Resolve-DnsName para la búsqueda, Get-DnsClientServerAddress para la configuración del resolutor, Get-DnsClientCache y Clear-DnsClientCache para problemas de caché local, y Test-NetConnection cuando el DNS está terminado y la ruta de la red es el próximo sospechoso.

Siga esa secuencia y DNS dejará de parecer misterioso. Se convierte en una capa más que puedes probar, demostrar y superar.

Written by

Leave a comment