Pide tu presupuesto ya!
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.
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
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.
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
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.
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
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
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
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.
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.
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.
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.
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.
Leave a comment