Что такое networksetup и когда она нужна
Утилита networksetup входит в состав macOS и повторяет то, что вы делаете в разделе сетевых настроек системы, только из командной строки. Она пригодна там, где нужно проверить настройки быстро, выполнить их на нескольких компьютерах или записать порядок действий в скрипт.
Основная особенность: утилита работает не с именами интерфейсов вроде en0, а с названиями сетевых служб, такими как Wi-Fi или Ethernet. Служба — это настроенный способ подключения, а интерфейс — аппаратное устройство под ним. Если названия в интерфейсе системы на вашем языке выглядят иначе, пользуйтесь теми, что выводит сама команда, и берите их в кавычки, когда в названии есть пробелы.
Чтение настроек обычно проходит без пароля, а изменение требует прав администратора. Перед любым изменением полезно записать текущие значения: вернуть их потом проще, чем вспоминать.
Основные команды: чтение
Начните с обзора. Ниже самые полезные команды чтения, у каждой есть широкая область применения.
| Команда | Результат |
|---|---|
| networksetup -listallnetworkservices | Названия всех сетевых служб |
| networksetup -listallhardwareports | Соответствие аппаратных портов устройствам en0, en1 и т. д. |
| networksetup -getinfo "Wi-Fi" | IP, маска, шлюз и MAC для службы |
| networksetup -getdnsservers "Wi-Fi" | Заданные вручную DNS-серверы |
| networksetup -getsearchdomains "Wi-Fi" | Поисковые домены |
| networksetup -getmtu en0 | Значение MTU интерфейса |
В выводе -listallnetworkservices первая строка — пояснение о том, что звёздочка у названия означает отключённую службу. Это не ошибка, а часть вывода. Отключённые службы вы увидите по знаку перед названием.
Если для службы DNS вручную не заданы, команда -getdnsservers сообщит, что для этой службы DNS-серверов нет. Это не значит, что DNS не работает: в таком случае используются адреса, выданные роутером по DHCP. Увидеть, какие адреса реально применяются, поможет команда scutil --dns.
Смена DNS и возврат к автоматическим настройкам
Задать свои DNS-серверы для службы можно одной командой: sudo networksetup -setdnsservers "Wi-Fi" 192.0.2.1 192.0.2.2. Вместо документационных адресов подставьте реальные адреса выбранного вами DNS-сервиса. Можно указать один адрес или несколько через пробел.
Чтобы вернуть автоматическое получение, используйте слово empty: sudo networksetup -setdnsservers "Wi-Fi" empty. После этого служба снова станет брать DNS у роутера. Обратите внимание, что просто убрать адреса пустой строкой нельзя, нужно именно слово empty.
Порядок действий для безопасного эксперимента:
- Сохраните текущее значение: networksetup -getdnsservers "Wi-Fi".
- Задайте новые адреса и проверьте открытие нескольких сайтов.
- Проверьте, какие серверы отвечают, запросом через dig или nslookup.
- Если что-то сломалось, выполните команду с empty.
Иногда после смены DNS старые ответы ещё живут в кэше. Как его сбросить, описано на странице про очистку DNS-кэша в macOS. Подробный разбор настройки DNS через графический интерфейс системы есть в отдельной инструкции.
Другие полезные операции
Утилита умеет не только DNS. Часть операций применяют редко, но знать о них полезно.
Для включения и выключения службы есть пара -setnetworkserviceenabled: имя службы и значение on или off. Это быстрый способ отключить Wi-Fi или кабель, если нужно проверить работу через другой канал. Питание Wi-Fi переключают командой -setairportpower с именем устройства и значением on или off.
Адрес можно задать вручную: ключ -setmanual принимает имя службы, адрес, маску и шлюз. Вернуть автоматическое получение можно ключом -setdhcp. Менять адреса вручную стоит только тогда, когда вы точно понимаете, какие значения нужны в вашей сети, иначе связь пропадёт.
Есть возможность задавать поисковые домены, имена компьютеров и другие параметры, а полный перечень ключей выводится при запуске networksetup без аргументов либо командой man networksetup. Часть ключей зависит от версии macOS, поэтому ориентируйтесь на справку своей системы, а не на чужие инструкции из интернета.
Типичные ошибки при работе с networksetup
Чаще всего проблемы возникают из-за названия службы. Если вы напишете название без кавычек там, где в нём есть пробел, команда решит, что слов несколько, и сообщит об ошибке параметров. Копируйте название из вывода -listallnetworkservices.
Вторая ошибка — путать службу и интерфейс. В -getinfo и -setdnsservers нужно название службы, а в -getmtu и -setairportpower используется имя устройства. Сопоставить их поможет -listallhardwareports.
Третья ситуация: команда выполнена, а в приложениях ничего не изменилось. Причины бывают разные: браузер использует собственный механизм DNS, кэш хранит прежний ответ, либо система применяет другую службу из-за порядка их приоритетов. Порядок служб задаётся в сетевых настройках системы и выводится командой networksetup -listnetworkserviceorder.
Если после правок связь пропала, откатитесь: верните DNS через empty, а адрес через -setdhcp, и перезапустите службу выключением и включением.
Перед изменениями: резервная запись настроек
Прежде чем менять сетевые параметры из терминала, зафиксируйте исходное состояние. Это занимает минуту и избавляет от долгих поисков при сбое.
- Сохраните вывод -listallnetworkservices и -getinfo для нужной службы в текстовый файл.
- Отдельно запишите результат -getdnsservers: пустой ответ тоже важен, он означает автоматические настройки.
- Убедитесь, что у вас есть второй способ выйти в сеть, например кабель или раздача с телефона, если меняете настройки основной службы.
- Меняйте один параметр за раз и проверяйте результат, прежде чем переходить к следующему.
Если вы работаете на рабочем компьютере, управляемом организацией, настройки могут контролироваться политикой. Тогда изменения вернутся к прежнему виду или не применятся, и это не ошибка команды. В таком случае обратитесь к администратору, не пытаясь менять заданные ограничения самостоятельно.
Хорошая практика — после любого изменения проверить результат двумя способами: прочитать значение той же командой с префиксом get и открыть в браузере несколько разных сайтов. Так вы быстро заметите, что имена перестали разрешаться, и успеете вернуть прежнее значение, пока не накопилось других правок.