Зміна сервера DNS з терміналу (або сценарію) на Mac OS X


29

Як я можу змінити свій DNS-сервер з терміналу на Mac OS X? [Мені це потрібно, оскільки мій DNS не працює належним чином з моєю VPN. Іноді він використовує DNS для мого основного з'єднання, а іноді використовує DNS, вказаний для VPN (який він повинен бути).]

Відповіді:


15

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

> відкрити
> d.init
> 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висновку після зміни?
ssc

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 ))


Нічого собі, 84144 - це проблема, яку я маю. Все ще обробляю все це .... щиро дякую!
Дан Розенстарк

6
Одне зауваження для всіх, хто хоче видалити DNS, просто напишіть "порожнє" (без лапок) замість DNS:sudo networksetup -setdnsservers <networkservice> empty
jackJoe

14

У мене не вистачає балів, щоб відповісти на пост Челіона, але додати до нього я б почав із перерахування інтерфейсів

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

resolutionv.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 з командами, введеними в дію. (Судо вам потрібно для set)
sudo scutil < commands.txt

0

Ви можете це зробити, відредагувавши /etc/resolv.conf (пам’ятайте, що resv.conf скидається після перезавантаження), сподіваємось, що це допоможе - http://developer.apple.com/mac/library/documentation/Darwin/Reference/ ManPages / man5 / resolutionver.5.html


5
Як і для старих версій OS X (10.2 та попередніх), це шлях. Але не з новими випусками.
Джон Т
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.