Cambiar DNS con script

Cambiar DNS con script

Necesito cambiar con frecuencia la dirección del servidor DNS y, por ahora, lo hago abriendo 'centro de redes y recursos compartidos' - 'conexión de área local' - propiedades - ipv4 - y luego escribo los números DNS.

¿Existe una forma más rápida de hacerlo? ¿Puedo hacerlo con un archivo por lotes o un script de PowerShell? ¿Existe un comando de consola integrado para cambiar DNS?

Respuesta1

Valor DNS primario:

netsh interface ipv4 set dns "Local Area Connection" static 192.168.0.2

Valor secundario:

netsh interface ipv4 add dns "Local Area Connection" 192.168.0.3 index=2

Lo cual funciona muy bien SI el nombre de la conexión es correcto. Si el nombre no es "Conexión de área local", entonces no funcionará. Si está ejecutando XP, debe cambiar "ipv4" a "ip". También se puede utilizar IPv6.

Configure la máscara de subred, la dirección IP y la puerta de enlace:

netsh interface ipv4 set address name="Local Area Connection" source=static addr=192.168.1.10 mask=255.255.255.0 gateway=192.168.0.1

Para encontrar la conexión de red, puede usar ipconfig desde la línea cmd. Pero también puedes usar lo siguiente para obtener un resultado de ipconfig abreviado:

ipconfig | find /I "Ethernet adapter"

Usando el cmd ipconfig anterior podemos recorrer la conexión (código fuente) y configurar los servidores DNS:

:: Set primary and alternate DNS for IPv4 on Windows Server 2000/2003/2008 & 
:: Windows XP/Vista/7
@ECHO OFF
SETLOCAL EnableDelayedExpansion

SET adapterName=

FOR /F "tokens=* delims=:" %%a IN ('IPCONFIG ^| FIND /I "ETHERNET ADAPTER"') DO (
SET adapterName=%%a

REM Removes "Ethernet adapter" from the front of the adapter name
SET adapterName=!adapterName:~17!

REM Removes the colon from the end of the adapter name
SET adapterName=!adapterName:~0,-1!

netsh interface ipv4 set dns name="!adapterName!" static 192.168.0.2 primary
netsh interface ipv4 add dns name="!adapterName!" 192.168.0.3 index=2
)

ipconfig /flushdns

:EOF

Respuesta2

También para utilizar direcciones DNS proporcionadas por el servidor DHCP:

netsh interface ipv4 set dns "Local Area Connection" dhcp

Respuesta3

Aquí está tu nuevo amigo:DNS rápido, de NirSoft, increíble como siempre.

captura de pantalla

También se puede utilizar en la línea de comandos :) con estas ventajas sobre netsh:

  • sintaxis más sencilla, en particular para configurar el servidor alternativo
  • solicita automáticamente elevación de privilegios


Sólo algunas advertencias:

  • solo admite la configuración de IPv4, no de IPv6
    • desde QuickSetDNS 1.30, también se admite la configuración de servidores DNS IPv6;)
  • en la línea de comando, se debe usar el UUID del adaptador, no el nombre descriptivo (por ejemplo, "Conexión de área local")
    • desde QuickSetDNS 1.21, los nombres de conexión también son compatibles;)

Respuesta4

El resto de estas respuestas usan netsh, que al menos en la máquina con Windows 2012R2 con la que estaba trabajando esta mañana informó:

In future versions of Windows, Microsoft might remove the Netsh functionality for TCP/IP.

Microsoft recommends that you transition to Windows PowerShell if you currently use netsh to configure and manage TCP/IP.

... ahora, estoy seguro de que ese no será el caso en el corto plazo, pero... aun así, me hizo ir a revisar Powershell.

Esta es la ruta de PowerShell que tomé y asume una única interfaz física. Si tienes más, tendrás que intentar elegir la interfaz correcta :)

$interface = (Get-NetAdapter).ifIndex
Set-DnsClient -InterfaceIndex $interface -ConnectionSpecificSuffix myproject.mydomain.tld
Set-DnsClientServerAddress -InterfaceIndex $interface -ServerAddresses ("8.8.8.8","8.8.4.4","2001:4860:4860::8888","2001:4860:4860::8844")

Los documentos relevantes (a partir del 15 de mayo de 2020) son:

información relacionada