Изменить DNS-сервер с терминала (или сценария) в Mac OS X

29

Как я могу изменить свой DNS-сервер с Терминала в Mac OS X? [Мне это нужно, потому что мой DNS не работает правильно с моим VPN. Иногда он использует DNS для моего основного соединения, а иногда использует DNS, указанный для VPN (что и должно быть).]

Дэн Розенстарк
источник

Ответы:

15

Вы можете использовать scutilинтерактивно с терминала. Запустите sudo scutilи выполните эти команды, поменяв местами DNS-серверы:

> открыть
> д.инит
> d.add ServerAddresses * 8.8.8.8 9.9.9.9
> установить состояние: / сеть / служба / PRIMARY_SERVICE_ID / DNS
> выйти

Вместо того, чтобы использовать 8.8.8.8и 9.9.9.9использовать ваши DNS-серверы.

Единственная проблема заключается в том, что это не является постоянным при перезагрузках . Если вы хотите постоянные изменения, вы захотите ncutil . Причина редактирования /etc/resolv.confне является достаточной в более новых версиях OS X, потому что configd теперь использует базу данных для хранения информации о текущих настройках, которую читают другие приложения. Некоторые приложения будут по-прежнему читать /etc/resolv.conf (например, хост), хотя это относится не ко всем приложениям.

Джон Т
источник
2
8.8.8.8 является действительным, хотя. Общедоступный DNS Google. 8.8.4.4 является вторичным. :-)
Забытая точка с запятой
Я знаю, я использую это :)
Джон Т
1
Должно. Вы можете использовать scutil --dnsдля подтверждения.
Джон Т
2
Похоже, что это не работает на моем Mac OSX 10.7.5 MBP, по крайней мере, когда это делается буквально. Должен ли я заменить что-либо в set State:/Network/Service/PRIMARY_SERVICE_ID/DNSстроке или я могу использовать это как есть? Должны ли новые DNS-серверы появляться в scutil --dnsвыходных данных после изменения?
13
2
@ssc Выполнить, scutilа затем > listнайти ключ для замены PRIMARY_SERVICE_ID.
J.Money
46

Вы можете использовать networksetup:

sudo networksetup -setdnsservers <networkservice> DNS1, DNS2, DNS3

например (при подключении к аэропорту использовать DNS-серверы Google)

sudo networksetup -setdnsservers AirPort 8.8.8.8 8.8.4.4

Вы можете узнать имя сетевой службы, запустив networksetup -listallnetworkservices. Это будет «Wi-Fi», вероятно.

Это то же самое, что если бы вы редактировали записи в панели «Предпочтения сети» в «Системных настройках», поэтому они сохраняются при перезагрузках.

Возможно, вы столкнулись с проблемой DNS на Snow Leopard, которая возникает при изменении порядка DNS-серверов (см. Вопрос 84144 ))

Chealion
источник
Вау, у меня проблема 84144. Все еще обрабатываю все это .... большое спасибо!
Дэн Розенстарк
6
Одно примечание для всех, кто хочет удалить DNS, просто напишите «DNS» вместо кавычек:sudo networksetup -setdnsservers <networkservice> empty
jackJoe
14

У меня недостаточно очков, чтобы ответить на сообщение Chealion, но чтобы добавить к нему, я бы начал с перечисления интерфейсов

networksetup -listallnetworkservices

Если у вас есть интерфейс, который вы хотите изменить, вы можете сделать следующее (я использую Wi-Fi, но вы можете сделать любой другой интерфейс)

sudo networksetup -setdnsservers Wi-Fi empty
sudo networksetup -setdnsservers Wi-Fi 8.8.8.8 8.8.4.4
sudo killall -HUP mDNSResponder

В первой строке приведенного выше настройки DNS будут очищены, а затем - DNS-серверы, которые мы хотим использовать, и точная очистка кэша DNS.

Чтобы проверить изменение DNS, вы можете сделать это до и после или просто после

scutil --dns | grep 'nameserver\[[0-9]*\]'
Дэвид Киттелл
источник
Любой, кто наткнулся на эту страницу. Теперь у меня есть Gist на GitHub, который должен помочь. gist.github.com/dkittell/34fe7b7422323fba546948b7448933a5
Дэвид Киттелл
1

resolv.conf больше не работает на OSX. В верхней части этого файла есть уведомление:

#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
#   scutil --dns
#
# SEE ALSO
#   dns-sd(1), scutil(8)
#
# This file is automatically generated.
#

Кроме того, networksetup -listallnetworkservicesне перечислены все интерфейсы VPN.

Вот один из способов использования scutil для выбора нужного интерфейса: 1. Создайте файл commands.txtс вашими командами для интерактивного инструмента scutil. например, содержимое для защищенного интерфейса Pulse в моем случае:

get State:/Network/Service/net.pulsesecure.pulse.nc.main/DNS
d.add ServerAddresses * 8.8.8.8 9.9.9.9
set State:/Network/Service/net.pulsesecure.pulse.nc.main/DNS
  1. Запустите scutil с помощью команд. (Для этого вам нужно sudo set)
sudo scutil < commands.txt
Kikas
источник
0

Вы должны быть в состоянии сделать это, отредактировав /etc/resolv.conf (помните, что resolv.conf сбрасывается после перезагрузки), надеюсь, это поможет - http://developer.apple.com/mac/library/documentation/Darwin/Reference/ страницы Справочника / man5 / resolver.5.html

zpon
источник
5
Начиная с более старых версий OS X (10.2 и более ранних), это путь. Не с более новыми выпусками все же.
Джон Т