Як я можу встановити / змінити DNS за допомогою командного рядка в Windows 8


77

Як я можу встановити свої налаштування DNS за допомогою командного рядка або файлу bat у Windows 8

Я спробував це:

netsh interface ip set dns name="Local Area Connection" source=static addr=none

але не працював.


2
Перш за все, запустіть cmd від імені адміністратора.
Реактивний

Відповіді:


86

По-перше, ім'я мережі, швидше за все, "Ethernet", а не "Підключення до локальної мережі". Щоб дізнатися ім’я, ви можете зробити це:

netsh interface show interface

Що відображатиме назву в стовпці "Ім’я інтерфейсу" (показано тут напівжирним шрифтом):

Ім'я інтерфейсу типу штату адміністратора
-------------------------------------------------- -----------------------
Увімкнено підключений виділений         Ethernet

Тепер ви можете змінити основний dns (індекс = 1), припускаючи, що ваш інтерфейс є статичним (не використовуючи dhcp):

netsh interface ipv4 add dnsserver "Ethernet" address=192.168.x.x index=1

Оновлення 2018 р. - Команда працюватиме з dnsserver(одниною) або dnsservers(множиною). Наступний приклад використовує останнє і також є дійсним:

інтерфейс netsh ipv4 додати dnsservers "Ethernet" адресу = 192.168.xx index = 1

Це спрацювало, дякую! Чи знаєте ви, як встановити для DNS "автоматичні налаштування"?
patricK

1
@Patrick: Дивіться мою відповідь . Поставте dhcpна місце staticдругої команди.
Адарш Раджпут,

2
@ chue-x На противагу вашому твердженню про те, що "ймовірно", для Windows надзвичайно часто присвоюється ім'я "Локальне підключення" мережевому з'єднанню.
Росс Прессер,

2
@ GµårÐïåñ Схоже, ви використовуєте "set" для налаштування основного. Вам потрібно буде використовувати "додати", як у моїх прикладах вище, щоб встановити вторинний. Просто використовуйте index = 2.
chue x

2
З вбудованої командної довідки канонічна назва - "dnsservers". Однак ви можете ввести лише "dns", "dnsse" ... або навіть просто "d". Подібним чином, "ip" - це скорочення для "ipv4".
Gras Double

28

Щоб змінити DNS на автоматичний за допомогою команди, ви можете виконати таку команду:

netsh interface ip set dns "Local Area Connection" dhcp

21

Ось ще один спосіб змінити DNS за допомогою WMIC (командний рядок Windows Management Instrumentation).

Команди повинні бути запущені як адміністратор для застосування.

Очистити DNS-сервери:

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

Встановіть 1 сервер DNS:

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

Встановіть 2 DNS-сервери:

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

Встановіть 2 DNS-сервери на певному мережевому адаптері:

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

Інший приклад встановлення списку пошуку домену:

wmic nicconfig call SetDNSSuffixSearchOrder ("domain.tld")

4
Це найкраща відповідь. Усі інші пропонують возитися з іменами інтерфейсу, такими як "Підключення до локальної мережі" , ніби вони потрібні.
uvsmtid

Я згоден з @uvsmtid, це найкраща відповідь. Я почав працювати над набагато складнішим пакетним сценарієм і вважав, що повинен бути кращий спосіб. Дякую!
jacktrader

1
Для PowerShell замінити where (IPEnabled=TRUE)на where "IPEnabled=TRUE".
ndemou,

19

Існує невелика різниця в командах додавання І зміни DNS-IP:

Додавати:

Syntax:
   netsh interface ipv4 add dnsserver "Network Interface Name" dns.server.ip index=1(for primary)2(for secondary)
Eg:
   netsh interface ipv4 add dnsserver "Ethernet" 8.8.8.8 index=1
  • Тут, щоб дізнатись "Назва мережевого інтерфейсу", введіть command netsh interface show interface
  • 8.8.8.8 - це рекурсивний DNS-сервер Google, використовуйте його, якщо ваш не працює

Встановити / змінити: (як це запитав OP)

Syntax:
   netsh interface ipv4 set dnsservers "Network Interface Name" static dns.server.ip primary
Eg:
   netsh interface ipv4 set dnsservers "Wi-Fi" static 8.8.4.4 primary
   netsh interface ipv4 set dnsservers "Wi-Fi" dhcp
  • Останнім параметром може бути none: вимкнути DNS,: bothвстановити як для первинного, так і для вторинного DNS, первинний: лише для первинного DNS. Тут ви можете помітити, що ми не використовуємо параметр index, як це було при додаванні DNS.

  • На місці staticви можете ввести, dhcpщоб зробити налаштування DNS автоматичним, але додаткові параметри не потрібні.


Примітка: Перевірено у Windows 8,8.1 & 10.


15

Я написав цей сценарій для перемикання DNS-серверів усіх ввімкнених на даний момент інтерфейсів на певну адресу:

@echo off

:: Google DNS
set DNS1=8.8.8.8
set DNS2=8.8.4.4

for /f "tokens=1,2,3*" %%i in ('netsh int show interface') do (
    if %%i equ Enabled (
        echo Changing "%%l" : %DNS1% + %DNS2%
        netsh int ipv4 set dns name="%%l" static %DNS1% primary validate=no
        netsh int ipv4 add dns name="%%l" %DNS2% index=2 validate=no
    )
)

ipconfig /flushdns

:EOF

Класно. Я покращив вашу відповідь, додавши параметр команди та відфільтрувавши: gist.github.com/n074v41l4bl34u/e237c0f199b2bb68bf1c Будь-які пропозиції, чому моя опція 'skip = 2' в команді FOR не працює?
TermoTux

13

Жодна з відповідей не працює для мене в Windows 10, тому ось що я використовую:

@echo off

set DNS1=8.8.8.8
set DNS2=8.8.4.4
set INTERFACE=Ethernet

netsh int ipv4 set dns name="%INTERFACE%" static %DNS1% primary validate=no
netsh int ipv4 add dns name="%INTERFACE%" %DNS2% index=2

ipconfig /flushdns

pause

Для цього використовується Google DNS. Ви можете отримати назву інтерфейсу за допомогою командиnetsh int show interface


3

Пакетний файл для налаштування нового сервера dns

@echo off
rem usage: setdns <dnsserver> <interface>
rem default dsnserver is dhcp
rem default interface is Wi-Fi
set dnsserver="%1"
if %dnsserver%=="" set dnsserver="dhcp"
set interface="%2"
if %interface%=="" set interface="Wi-Fi"
echo Showing current DNS setting for interface a%interface%
netsh interface ipv4 show dnsserver %interface%
echo Changing dnsserver on interface %interface% to %dnsserver%
if %dnsserver% == "dhcp" netsh interface ipv4 set dnsserver %interface% %dnsserver%
if NOT %dnsserver% == "dhcp" netsh interface ipv4 add dnsserver %interface% address=%dnsserver% index=1
echo Showing new DNS setting for interface %interface%
netsh interface ipv4 show dnsserver %interface%

1

Ось ваш новий друг: QuickSetDNS , від NirSoft, дивовижний, як завжди.

скріншот

Його також можна використовувати в командному рядку :) з цими перевагами перед netsh:

  • простіший синтаксис, зокрема для встановлення альтернативного сервера
  • автоматично запитує підвищення пільг


Лише кілька застережень:

  • підтримує лише налаштування IPv4, а не IPv6
  • у командному рядку слід використовувати UUID адаптера, а не дружню назву (наприклад, "Локальне підключення") оскільки QuickSetDNS 1.21 підтримує імена підключень;)

0

Тепер ви можете змінити основний dns (індекс = 1), припускаючи, що ваш інтерфейс статичний (не використовуючи dhcp)

Ви можете встановити свої DNS-сервери статично, навіть якщо ви використовуєте DHCP для отримання своєї IP-адреси.

Приклад під Windows 7 для додавання двох DN-серверів, така команда:

netsh interface ipv4 add dns "Local Area Connection" address=192.168.x.x index=1 netsh interface ipv4 add dns "Local Area Connection" address=192.168.x.x index=2

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.