Cambiar DNS con script

29

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.

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

Endy Tjahjono
fuente

Respuestas:

38

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 que 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". IPv6 también se puede usar.

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 buscar la conexión de red, puede usar ipconfig desde la línea cmd. Pero también puede usar lo siguiente para obtener un resultado abreviado de ipconfig:

ipconfig | find /I "Ethernet adapter"

usando el cmd de 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
Logman
fuente
3
Excelente respuesta Debe incluir fuentes para cosas como Cotizaciones y Código.
Ƭᴇcʜιᴇ007
8

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

netsh interface ipv4 set dns "Local Area Connection" dhcp
mmm
fuente
Además, en caso de que desee restablecer la dirección / máscara / puerta de enlace a las de DHCP: interfaz de netsh ipv4 establecer dirección nombre = "Conexión de área local" fuente = dhcp
hello_earth
6

Con un script de Powershell en Windows 8 o 2012, puede establecer los valores de esta manera:

Set-DnsClientServerAddress -InterfaceAlias Wi-Fi -ServerAddresses "1.1.1.1","2.2.2.2"

Donde wi-Fi es el nombre de la interfaz que le interesa. Puede enumerar las interfaces ejecutando:

Get-NetAdapter

Para restablecer las direcciones DNS y usar DHCP:

Set-DnsClientServerAddress -InterfaceAlias wi-fi -ResetServerAddresses

Vaya a esta página para ver una descripción completa.

Tenga en cuenta que los comandlets utilizados aquí no están disponibles en versiones anteriores, como Windows 7.

Juanal
fuente
conciso, funciona como un encanto. Gracias :) ¡Especialmente útil en AWS Opsworks!
Ganesh Hegde
3

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

captura de pantalla

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

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


Solo algunas advertencias:

  • solo admite la configuración de IPv4, no de 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;)
Gras Double
fuente
Aquí hay una muestra de código abierto que utiliza el mismo enfoque que el anterior: codeproject.com/Articles/20639/…
Top-Master
1

Agregar una solución a la versión de Logman para WinXP (sp3 hebreo), parece que necesita eliminar 2 caracteres al final, por lo que se agregó un tipo de solución "global" para cualquier otro caso extraño.

:: 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 WinXP Remove some weird trailing chars (don't know what they are)
FOR /l %%a IN (1,1,255) DO IF NOT "!adapterName:~-1!"==":" SET adapterName=!adapterName:~0,-1!

REM Removes the colon from the end of the adapter name
SET adapterName=!adapterName:~0,-1!
echo !adapterName!
GOTO:EOF
netsh interface ip set dns name="!adapterName!" static x.x.x.x primary
netsh interface ip add dns name="!adapterName!" x.x.x.x index=2
)

http://pastebin.com/9mbMR7sy

Sniffleh
fuente
0

Esta respuesta se copia de XP1 aquí . Si XP1 desea publicar esta respuesta, hágalo y eliminaré mi respuesta.

Aquí hay otra forma de cambiar DNS utilizando WMIC (línea de comando de instrumentación de administración de Windows).

Los comandos deben ejecutarse como administrador para aplicar.

Borrar servidores DNS:

wmic nicconfig where (IPEnabled=TRUE) call SetDNSServerSearchOrder ()

Establecer 1 servidor DNS:

wmic nicconfig where (IPEnabled=TRUE) call SetDNSServerSearchOrder ("8.8.8.8")

Establecer 2 servidores DNS:

wmic nicconfig where (IPEnabled=TRUE) call SetDNSServerSearchOrder ("8.8.8.8", "8.8.4.4")

Establezca 2 servidores DNS en un adaptador de red particular:

wmic nicconfig where "(IPEnabled=TRUE) and (Description = 'Local Area Connection')" call SetDNSServerSearchOrder ("8.8.8.8", "8.8.4.4")

Otro ejemplo para configurar la lista de búsqueda de dominio:

wmic nicconfig call SetDNSSuffixSearchOrder ("domain.tld")
Nathan
fuente