Введение: что вы получите в результате

Если вы работаете с мобильными прокси на Mac, рано или поздно вы упираетесь в одну и ту же ситуацию. Вы вписали адрес и порт в настройки Wi-Fi, сайт показал новый IP, вы обрадовались. А потом выясняется, что Терминал качает пакеты напрямую, git ходит по старому адресу, а половина приложений вообще не заметила изменений. Этот гайд закрывает проблему целиком.

Прочитав и выполнив все шаги, вы получите настроенный прокси на macOS, который работает на трех уровнях сразу:

  • На уровне системы: Safari, Chrome, почта, мессенджеры и другие программы, которые уважают системные настройки.
  • На уровне Терминала: команды networksetup для включения, выключения и переключения прокси без единого клика мышью.
  • На уровне инструментов разработчика: curl, git, Homebrew, pip, npm и другие утилиты, которые читают переменные окружения, а не системные настройки.

Отдельно мы разберем список исключений. Это то самое поле, из-за которого часть трафика уходит мимо прокси, хотя вы ничего специально не настраивали. Вы поймете, как оно устроено, что туда добавлять, что оттуда убирать и как проверить, что ни один запрос не проскакивает напрямую там, где это не нужно.

Для кого этот гайд

Руководство написано для начинающих. Если вы никогда не открывали Терминал, ничего страшного: каждую команду мы разберем по буквам и объясним, что она делает. Гайд будет полезен:

  • маркетологам и SMM-специалистам, которые ведут несколько проектов с разных IP;
  • арбитражникам, которым нужно быстро переключать гео и проверять креативы;
  • разработчикам, которые тестируют приложения и API через мобильные прокси;
  • владельцам бизнеса, которые хотят один раз разобраться и не звать специалиста при каждой смене прокси.

Для опытных пользователей в конце есть блок с продвинутыми приемами: сетевые размещения, PAC-файлы, алиасы в оболочке и скрипты автоматической ротации.

Что нужно знать заранее

Ничего сложного. Достаточно уметь открывать Системные настройки и копировать текст. Все остальное объясняется по ходу. Мы не касаемся настроек конкретных браузеров и антидетект-браузеров: этому в блоге посвящены отдельные материалы. Здесь только macOS как система и ее встроенные инструменты.

Сколько времени потребуется

Базовая настройка через Системные настройки занимает 10 минут. Настройка Терминала и инструментов разработчика еще 15-20 минут. Полная проверка и разбор исключений около 10 минут. Итого 30-40 минут, если делать все спокойно и с проверками.

Предварительная подготовка

Прежде чем менять что-либо в системе, соберем все необходимое. Хорошая подготовка экономит больше времени, чем любые лайфхаки.

Что понадобится

  • Mac с macOS Ventura 13 или новее. Все примеры проверены на macOS Sonoma 14, Sequoia 15 и Tahoe 26. На старых версиях с приложением Системные настройки в виде сетки иконок путь к прокси немного отличается, мы отдельно укажем разницу.
  • Данные мобильного прокси. Это адрес сервера (домен или IP), порт, логин и пароль. У мобильных прокси обычно есть два порта: один для протокола HTTP, второй для SOCKS5. Держите под рукой оба.
  • Ссылка на смену IP, если ваш провайдер ее выдает. Она пригодится в разделе про автоматизацию.
  • Права администратора на Mac. Для смены системного прокси через Терминал macOS попросит пароль пользователя.
  • Текстовый редактор для заметок. Подойдет стандартный TextEdit или Заметки.

Что нужно проверить перед началом

  1. Убедитесь, что интернет работает без прокси. Откройте любой сайт в Safari. Если не открывается, сначала решите проблему с сетью, иначе потом будет непонятно, что именно сломалось.
  2. Узнайте, через какой интерфейс вы подключены: Wi-Fi или кабель Ethernet. Откройте Системные настройки, раздел Сеть. Активное подключение помечено зеленой точкой и словом Подключено. Запишите название: обычно это Wi-Fi или Ethernet.
  3. Проверьте свой текущий IP без прокси. Откройте в браузере любой сервис проверки IP и запишите адрес. С ним мы будем сравнивать результат.

Резервная копия текущих настроек

Настройки прокси в macOS откатываются легко, но лучше зафиксировать исходное состояние. Особенно если вы работаете на корпоративном Mac, где системный администратор мог что-то настроить заранее.

  1. Откройте Терминал. Нажмите Command и пробел, введите слово Терминал и нажмите Enter.
  2. Скопируйте и вставьте команду, затем нажмите Enter:
scutil --proxy > ~/Desktop/proxy_backup.txt

На Рабочем столе появится файл proxy_backup.txt с полным описанием текущих настроек прокси. Если вы что-то испортите, всегда сможете сверить значения с этим файлом.

Совет: Сразу создайте в Заметках карточку с данными прокси: хост, порт HTTP, порт SOCKS5, логин, пароль, ссылка на ротацию. Вы будете обращаться к ней десятки раз. Не храните пароль в открытом виде в общих документах.

Базовые понятия: что нужно понимать перед началом

Здесь несколько терминов, без которых дальнейшие шаги превратятся в магию. Читать обязательно, даже если кажется, что вы это знаете.

Прокси-сервер

Это посредник между вашим Mac и интернетом. Вместо того чтобы идти к сайту напрямую, ваш запрос сначала уходит на прокси-сервер, а уже оттуда к сайту. Сайт видит IP-адрес прокси, а не ваш. Мобильный прокси отличается тем, что его IP принадлежит оператору сотовой связи, и для сайтов вы выглядите как обычный пользователь смартфона.

HTTP-прокси и SOCKS5-прокси

Это два разных способа общения с прокси-сервером. HTTP-прокси понимает веб-трафик, работает с сайтами и большинством приложений. В macOS он разделен на два переключателя: Веб-прокси (HTTP) для обычных сайтов и Защищенный веб-прокси (HTTPS) для сайтов с шифрованием. На практике в оба поля вписывают один и тот же адрес и порт.

SOCKS5-прокси работает ниже, на уровне соединений, и пропускает любой трафик, не только веб. Он полезен для Терминала, мессенджеров, игр. Важный нюанс macOS: системные настройки позволяют указать логин и пароль для SOCKS, но многие приложения эту авторизацию через системный SOCKS не поддерживают. Поэтому в системных настройках мы будем использовать HTTP, а SOCKS5 оставим для Терминала и отдельных программ.

Системный прокси

Это настройки, которые хранятся в macOS для конкретного сетевого интерфейса. Safari, Chrome, Mail, App Store и большинство приложений на Swift и Objective-C читают их автоматически. Но не все. Программы, написанные на Python, Go, Node.js, а также классические Unix-утилиты вроде curl и git системные настройки игнорируют. Они смотрят в переменные окружения.

Переменные окружения

Это именованные значения, которые живут в вашей сессии Терминала. Например, переменная http_proxy говорит утилитам: весь HTTP-трафик отправляй вот сюда. Переменные существуют только в открытом окне Терминала, если не записать их в файл настроек оболочки. Об этом будет отдельный шаг.

Список исключений

В macOS он называется Не использовать прокси для этих хостов и доменов. Все адреса из этого списка система отправляет напрямую, минуя прокси. По умолчанию там уже есть записи *.local и 169.254/16, они отвечают за локальную сеть и не должны удаляться. Проблема начинается, когда в список попадают лишние маски или когда вы ждете, что исключения сработают в Терминале. Не сработают: у Терминала свой список, переменная no_proxy. Все это мы разберем.

Сетевая служба

Так macOS называет каждый интерфейс: Wi-Fi, Ethernet, Thunderbolt Bridge, iPhone USB. Прокси настраивается отдельно для каждой службы. Если вы настроили Wi-Fi, а потом подключили кабель, прокси перестанет работать. Это одна из самых частых причин вопроса, почему прокси на macOS то работает, то нет.

Шаг 1: Проверяем данные прокси до настройки системы

Цель этапа: убедиться, что прокси живой, а логин и пароль верные. Это избавит от получаса поиска ошибки в настройках, когда проблема была в опечатке в пароле.

Проверять будем через curl. Эта утилита уже есть в macOS, устанавливать ничего не нужно.

  1. Откройте Терминал, если он еще не открыт.
  2. Возьмите из вашей карточки данные прокси. Для примера будем использовать условные значения: хост proxy.example.net, порт HTTP 10000, порт SOCKS5 10001, логин user123, пароль pass456. Подставляйте свои реальные данные вместо этих.
  3. Введите команду для проверки HTTP-порта и нажмите Enter:
curl -x http://user123:pass456@proxy.example.net:10000 https://ifconfig.me

Разберем, что здесь написано. Ключ -x сообщает curl адрес прокси. Дальше идет протокол http, затем логин, двоеточие, пароль, символ собаки, хост, двоеточие, порт. В конце адрес сервиса, который в ответ возвращает IP, с которого пришел запрос.

  1. Через 1-3 секунды в Терминале появится IP-адрес. Это IP вашего мобильного прокси. Если он отличается от того, что вы записали при подготовке, все работает.
  2. Теперь проверьте SOCKS5-порт той же командой, заменив протокол и порт:
curl -x socks5h://user123:pass456@proxy.example.net:10001 https://ifconfig.me

Обратите внимание на букву h в слове socks5h. Она означает, что доменные имена будут разрешаться на стороне прокси, а не на вашем Mac. Для мобильных прокси это правильный вариант: так вы не оставляете запросы к DNS своего домашнего провайдера.

Внимание: Если в пароле есть символы собака, двоеточие, слеш, решетка, знак вопроса или процент, их нужно закодировать. Собаку заменяйте на %40, двоеточие на %3A, решетку на %23, знак вопроса на %3F, процент на %25. Иначе curl неправильно разобьет строку и решит, что пароль закончился раньше времени.

Возможные проблемы на этом шаге

  • Ответ Received HTTP code 407 from proxy after CONNECT. Прокси отвергает авторизацию. Проверьте логин и пароль, посмотрите на спецсимволы. Убедитесь, что в личном кабинете провайдера не включена авторизация по IP вместо логина и пароля.
  • Ответ Failed to connect или Connection timed out. Неверный хост или порт, либо прокси выключен. Сверьтесь с личным кабинетом. Попробуйте другой порт.
  • Команда зависла без вывода. Подождите 30 секунд. Мобильные сети иногда медленные. Если ничего не произошло, нажмите Control и C, чтобы прервать, и проверьте данные.

Проверка: Обе команды curl вернули IP-адрес, отличный от вашего домашнего. Можете переходить дальше. Если хотя бы одна не сработала, дальше идти бессмысленно: система будет использовать те же данные.

Шаг 2: Настраиваем прокси через Системные настройки macOS

Цель этапа: заставить Safari, Chrome и все приложения, уважающие системный прокси, ходить в интернет через ваш мобильный прокси.

Открываем нужный экран

  1. Нажмите на значок Apple в левом верхнем углу экрана и выберите Системные настройки.
  2. В левой колонке нажмите Wi-Fi, если вы подключены по беспроводной сети. Если по кабелю, нажмите Сеть, затем Ethernet.
  3. Найдите название вашей сети. Справа от нее есть кнопка Подробнее с тремя точками или надписью. Нажмите ее.
  4. Откроется окно с параметрами подключения. В левой колонке этого окна выберите пункт Прокси. Он находится в самом низу списка, после TCP/IP, DNS и WINS.

Вы увидите список переключателей: Автообнаружение прокси, Автонастройка прокси, Веб-прокси (HTTP), Защищенный веб-прокси (HTTPS), FTP-прокси, SOCKS-прокси, Потоковый прокси (RTSP), Gopher-прокси. Внизу поле Не использовать прокси для этих хостов и доменов.

Если у вас старая macOS, где Системные настройки выглядят как сетка иконок, путь такой: Системные настройки, Сеть, выберите интерфейс слева, кнопка Дополнительно, вкладка Прокси. Дальше все совпадает.

Включаем HTTP-прокси

  1. Нажмите на переключатель Веб-прокси (HTTP). Он станет синим, а ниже появятся поля для ввода.
  2. В поле Сервер введите хост вашего прокси, например proxy.example.net. Без http://, без слешей, только хост.
  3. В поле Порт справа введите HTTP-порт, например 10000.
  4. Включите переключатель Для прокси-сервера требуется пароль.
  5. В поле Имя пользователя введите логин. В поле Пароль введите пароль. Здесь кодировать спецсимволы не нужно, вводите как есть.

Включаем HTTPS-прокси

Большинство сайтов сегодня работают по HTTPS, поэтому этот пункт обязателен. Без него зашифрованный трафик пойдет напрямую, и вы будете удивляться, почему одни сайты видят прокси, а другие ваш реальный IP.

  1. Нажмите на переключатель Защищенный веб-прокси (HTTPS).
  2. Введите тот же самый хост и тот же порт, что и для HTTP. Мобильные прокси обрабатывают оба типа трафика на одном порту.
  3. Включите Для прокси-сервера требуется пароль, введите логин и пароль повторно.

Про SOCKS-прокси и остальные переключатели

Переключатель SOCKS-прокси в системных настройках оставьте выключенным, если у вас включены HTTP и HTTPS. Причина в том, что при включенном системном SOCKS некоторые приложения начинают предпочитать его, а авторизацию через системный SOCKS поддерживают не все. Результат: часть программ теряет доступ к сети. FTP, RTSP и Gopher трогать не нужно, это устаревшие протоколы. Автообнаружение и Автонастройку тоже оставьте выключенными, иначе они могут перебить ваши ручные значения.

Сохраняем

  1. Нажмите кнопку ОК в правом нижнем углу окна.
  2. Если система попросит пароль вашего пользователя Mac, введите его. Это нормально: изменение сетевых настроек требует прав администратора.
  3. Полностью закройте Safari или Chrome и откройте заново. Браузеры кэшируют настройки прокси при запуске.

Совет: При первом запросе через прокси macOS может показать системное окно с просьбой ввести логин и пароль для прокси, даже если вы их уже вписали. Введите данные и поставьте галочку Запомнить в связке ключей. После этого окно больше не появится.

Проверка: Откройте в Safari сервис проверки IP. Адрес должен совпадать с тем, что вернула команда curl на Шаге 1. Проверьте также страницу с определением оператора: должен отображаться сотовый оператор, а не ваш домашний провайдер.

Возможные проблемы

  • Сайты не открываются вообще. Проверьте, что вы включили именно HTTP и HTTPS, а не FTP или SOCKS. Проверьте порт. Временно выключите оба переключателя и убедитесь, что интернет вернулся: так вы поймете, что дело в настройках прокси, а не в сети.
  • Постоянно выскакивает окно ввода пароля. Пароль введен с ошибкой или содержит пробел в конце после копирования. Удалите содержимое поля, введите пароль заново вручную.
  • IP не изменился. Вероятно, вы настроили не тот интерфейс. Вернитесь в раздел Сеть и проверьте, какая служба помечена как Подключено.

Шаг 3: Настраиваем список исключений правильно

Цель этапа: понять, какой трафик система пускает мимо прокси, и настроить список так, чтобы локальные сервисы работали, а внешний трафик не утекал.

Поле Не использовать прокси для этих хостов и доменов находится внизу экрана Прокси. По умолчанию там записано: *.local, 169.254/16. Многие пользователи либо не смотрят на него вовсе, либо начинают вписывать туда все подряд.

Как читать список

  • *.local означает все адреса, оканчивающиеся на .local. Это устройства вашей домашней сети: принтер, сетевой диск, другие Mac. Их нельзя открыть через внешний прокси физически, поэтому запись нужна.
  • 169.254/16 означает диапазон служебных адресов, которые Mac назначает себе, когда не получил адрес от роутера. Тоже локальная история.
  • Записи разделяются запятыми. Пробелы после запятых допустимы.
  • Звездочка заменяет любую часть имени. Запись *.example.com исключит все поддомены example.com, но не сам example.com. Для него нужна отдельная запись.
  • Можно указывать IP-адреса и подсети в формате адрес/маска, например 192.168.0.0/16 для всей домашней сети.

Что стоит добавить

  1. Нажмите в поле исключений после последней записи.
  2. Добавьте через запятую localhost и 127.0.0.1. Без них локальные веб-серверы разработчиков и панели админок на вашем Mac будут пытаться идти через мобильный прокси и падать.
  3. Если вы пользуетесь домашними устройствами по IP, добавьте вашу локальную подсеть. Обычно это 192.168.0.0/16 или 10.0.0.0/8. Посмотреть свой локальный адрес можно на экране TCP/IP в том же окне.
  4. Нажмите ОК.

Итоговый список для большинства пользователей выглядит так: *.local, 169.254/16, localhost, 127.0.0.1, 192.168.0.0/16.

Чего добавлять не нужно

Здесь начинается то, что в заголовке названо обходом исключений. Речь о ситуациях, когда трафик уходит мимо прокси не потому, что вы так хотели, а потому что список составлен неаккуратно.

  • Не вписывайте одиночную звездочку или *.com. Такая маска отключит прокси практически для всего интернета, при этом переключатели останутся синими, и вы будете думать, что все работает.
  • Не вписывайте домены сервисов, с которыми работаете. Если вы добавите *.facebook.com, чтобы ускорить загрузку, сайт увидит ваш реальный IP. Для задач мультиаккаунтинга это критично.
  • Не вписывайте хост самого прокси. В этом нет смысла: соединение к прокси и так идет напрямую.
  • Не удаляйте *.local и 169.254/16. Сломается AirDrop, печать, доступ к роутеру.

Внимание: Список исключений в системных настройках действует только на приложения, которые используют системный прокси. Терминал, curl, git и скрипты на Python его не видят. У них свой список, переменная no_proxy, и настраивается она отдельно. Мы дойдем до нее на Шаге 5. Если вы ждете, что запись в системном списке повлияет на скрипт, вы будете разочарованы.

Совет: Периодически открывайте список исключений и проверяйте его глазами. Некоторые корпоративные утилиты и агенты управления устройствами дописывают туда свои домены при установке. Обнаружить лишнюю маску вида *.com за десять секунд проще, чем неделю искать причину утечки IP.

Проверка: Откройте в браузере адрес http://localhost или любую локальную страницу, которая у вас есть. Она должна открыться мгновенно без ошибки прокси. Затем откройте внешний сервис проверки IP: он по-прежнему должен показывать IP мобильного прокси.

Шаг 4: Управляем прокси из Терминала командой networksetup

Цель этапа: научиться включать, выключать и менять системный прокси одной командой, без мыши и без десяти кликов по настройкам. Это тот навык, который за месяц окупает время, потраченное на чтение этого раздела.

В macOS есть встроенная утилита networksetup. Она делает ровно то же, что и Системные настройки, но из командной строки. Все, что вы настроили на Шаге 2, можно повторить, изменить или отменить одной строкой.

Узнаем точное название сетевой службы

  1. В Терминале введите команду и нажмите Enter:
networksetup -listallnetworkservices

Вы увидите список вроде: Wi-Fi, Ethernet, Thunderbolt Bridge, iPhone USB. Найдите тот, через который вы подключены. Дальше в командах мы будем использовать Wi-Fi. Если ваша служба называется иначе, подставьте ее название. Если в названии есть пробел, например Thunderbolt Bridge, заключите его в двойные кавычки.

Смотрим текущие настройки

networksetup -getwebproxy Wi-Fi

В ответ вы увидите четыре строки: Enabled: Yes или No, Server, Port, Authenticated Proxy Enabled. Если вы выполнили Шаг 2, Enabled будет Yes, а сервер и порт совпадут с введенными. Аналогично для HTTPS:

networksetup -getsecurewebproxy Wi-Fi

Включаем HTTP и HTTPS прокси одной командой

Формат команды: networksetup, действие, служба, хост, порт, включить авторизацию, логин, пароль.

networksetup -setwebproxy Wi-Fi proxy.example.net 10000 on user123 pass456
networksetup -setsecurewebproxy Wi-Fi proxy.example.net 10000 on user123 pass456

Введите обе команды по очереди. После каждой система может запросить пароль пользователя Mac. Введите его, символы при вводе не отображаются, это нормально. Нажмите Enter.

Слово on после порта включает авторизацию. Если у вашего прокси авторизация по IP, а не по логину, напишите off и не указывайте логин и пароль.

Выключаем и включаем прокси без потери настроек

Самая полезная пара команд. Они не стирают хост и порт, а только двигают переключатель:

networksetup -setwebproxystate Wi-Fi off
networksetup -setsecurewebproxystate Wi-Fi off

Чтобы включить обратно, замените off на on. Так вы за две секунды переводите Mac в режим прямого подключения и обратно.

Управляем списком исключений из Терминала

Посмотреть текущий список:

networksetup -getproxybypassdomains Wi-Fi

Задать новый список целиком. Команда заменяет все записи, поэтому перечисляйте полный набор через пробел:

networksetup -setproxybypassdomains Wi-Fi "*.local" "169.254/16" localhost 127.0.0.1 "192.168.0.0/16"

Записи со звездочкой и слешем берем в кавычки, чтобы оболочка не пыталась их интерпретировать. Очистить список полностью можно словом Empty вместо доменов, но помните: тогда локальные адреса пойдут через прокси и перестанут работать.

Универсальная команда просмотра

Утилита scutil показывает все настройки прокси в одном месте, включая исключения:

scutil --proxy

Ищите строки HTTPEnable, HTTPProxy, HTTPPort, HTTPSEnable, ExceptionsList. Значение 1 означает включено, 0 выключено. Именно эту команду мы использовали для резервной копии.

Совет: Откройте Системные настройки на экране Прокси и выполните любую команду networksetup в Терминале рядом. Вы увидите, как переключатели меняются в реальном времени. Это лучший способ убедиться, что Терминал и графический интерфейс управляют одними и теми же данными.

Возможные проблемы

  • Ошибка: Wi-Fi is not a recognized network service. Служба называется иначе. Выполните networksetup -listallnetworkservices и скопируйте точное имя.
  • Команда прошла, но в настройках ничего не изменилось. Закройте и заново откройте окно Системных настроек, оно не всегда обновляется мгновенно.
  • Просит пароль и пишет Sorry, try again. Вводится пароль пользователя Mac, а не пароль прокси. Символы не отображаются, просто наберите и нажмите Enter.

Проверка: Выполните networksetup -setwebproxystate Wi-Fi off, обновите сервис проверки IP в браузере, увидите свой домашний IP. Выполните ту же команду с on, обновите страницу, увидите IP прокси. Если переключение работает в обе стороны, этап пройден.

Шаг 5: Настраиваем прокси для curl, git, Homebrew, pip и npm

Цель этапа: заставить инструменты командной строки работать через прокси. Именно здесь сливается больше всего трафика, потому что эти программы не смотрят в системные настройки.

Почему системный прокси здесь не работает

Утилиты вроде curl, wget, git, pip, npm, brew написаны для работы во всех Unix-системах. Они не знают про macOS и ее Системные настройки. Вместо этого они читают переменные окружения с именами http_proxy, https_proxy, all_proxy и no_proxy. Если переменных нет, трафик идет напрямую. Переключатели в настройках могут быть синими сколько угодно.

Временное включение в текущем окне Терминала

Введите три команды по очереди:

export http_proxy=http://user123:pass456@proxy.example.net:10000
export https_proxy=http://user123:pass456@proxy.example.net:10000
export no_proxy=localhost,127.0.0.1,*.local

Первая направляет HTTP-трафик на прокси. Вторая направляет HTTPS-трафик туда же. Обратите внимание: в значении https_proxy протокол все равно http, потому что это протокол общения с прокси, а не с сайтом. Третья задает исключения для Терминала. Это тот самый отдельный список, о котором мы говорили на Шаге 3.

Некоторые программы читают переменные только в верхнем регистре. Чтобы не гадать, задайте и их:

export HTTP_PROXY=$http_proxy HTTPS_PROXY=$https_proxy NO_PROXY=$no_proxy

Теперь проверьте без ключа -x:

curl https://ifconfig.me

Если вернулся IP прокси, переменные работают. Все программы, запущенные из этого окна Терминала, теперь пойдут через мобильный прокси. Закроете окно, переменные исчезнут.

Постоянное включение через файл настроек оболочки

В современной macOS оболочкой по умолчанию является zsh, а ее настройки хранятся в файле .zshrc в вашей домашней папке. Все, что там записано, выполняется при открытии каждого нового окна Терминала.

  1. Откройте файл в редакторе nano командой:
nano ~/.zshrc
  1. Стрелками спуститесь в конец файла.
  2. Вставьте строки export из предыдущего раздела.
  3. Нажмите Control и O, затем Enter, чтобы сохранить. Нажмите Control и X, чтобы выйти.
  4. Примените изменения без перезапуска:
source ~/.zshrc

Внимание: В .zshrc пароль хранится в открытом виде. Если Mac общий или вы храните файл в облачной синхронизации, подумайте дважды. Компромиссный вариант описан в блоке продвинутых настроек: алиасы, которые включают прокси по короткой команде, а не автоматически.

Git

Git умеет читать переменные окружения, но надежнее задать настройки в его конфигурации:

git config --global http.proxy http://user123:pass456@proxy.example.net:10000

Отключить:

git config --global --unset http.proxy

Эта настройка влияет на операции clone, pull, push по HTTPS. Для SSH-доступа к репозиториям нужен другой подход, он в продвинутом блоке.

Homebrew

Brew полностью полагается на переменные окружения. Если вы задали их в .zshrc, ничего дополнительно делать не нужно. Проверьте командой brew update: обновление должно пройти без ошибок соединения.

pip

Python-установщик тоже читает переменные окружения. Для одноразового запуска через прокси без переменных используйте ключ:

pip install --proxy http://user123:pass456@proxy.example.net:10000 requests

npm

Node.js менеджер пакетов хранит настройки отдельно:

npm config set proxy http://user123:pass456@proxy.example.net:10000
npm config set https-proxy http://user123:pass456@proxy.example.net:10000

Отключить: npm config delete proxy и npm config delete https-proxy.

SOCKS5 для Терминала

Если вы хотите гнать терминальный трафик через SOCKS5-порт, вместо http_proxy и https_proxy задайте одну переменную:

export all_proxy=socks5h://user123:pass456@proxy.example.net:10001

Curl и многие утилиты ее понимают. Но не все: git по HTTPS переменную all_proxy читает не всегда, а pip не понимает SOCKS без дополнительного пакета. Для универсальности начинающим рекомендуем HTTP-вариант.

Совет: Добавьте в .zshrc строку alias myip='curl -s https://ifconfig.me; echo' и после этого набирайте myip, чтобы за секунду видеть текущий IP Терминала. Это экономит десятки проверок в день.

Проверка: Откройте новое окно Терминала. Выполните curl https://ifconfig.me и git config --global --get http.proxy. Первая команда возвращает IP прокси, вторая показывает адрес прокси. Значит, инструменты настроены и настройки переживают перезапуск.

Шаг 6: Находим трафик, который идет мимо прокси, и исправляем

Цель этапа: убедиться, что ни одно приложение из вашего рабочего набора не ходит в интернет напрямую без вашего ведома. Здесь мы систематизируем все причины утечек и проверяем каждую.

Причина 1: приложение с собственными настройками прокси

Некоторые программы игнорируют системный прокси и переменные окружения, потому что у них есть свои настройки. Классические примеры: Telegram Desktop, Firefox, Discord, некоторые почтовые клиенты, торрент-клиенты, антидетект-браузеры. У каждого из них в настройках есть раздел Сеть или Прокси.

  1. Составьте список приложений, через которые вы работаете.
  2. Откройте каждое и найдите раздел настроек сети. Если там есть выбор Использовать системные настройки прокси, выберите его. Если есть только ручной ввод, впишите хост, порт, логин и пароль.
  3. Проверьте IP внутри приложения, если оно позволяет, или через сервис проверки, открытый в этом приложении.

Настройки конкретных браузеров и антидетектов в блоге разобраны отдельно, здесь мы их не повторяем. Важно понять принцип: у каждого приложения нужно проверить, откуда оно берет прокси.

Причина 2: приложение запущено не из Терминала

Переменные окружения из .zshrc действуют только на программы, запущенные из Терминала. Если вы запускаете скрипт двойным кликом, через редактор кода или планировщик, переменные не подхватятся. Решение: задавайте прокси внутри скрипта явно, либо запускайте скрипт из Терминала, либо укажите переменные в настройках вашего редактора кода.

Причина 3: неправильная сетевая служба

Вы настроили Wi-Fi, а Mac подключился по кабелю, потому что вы вставили док-станцию. Или наоборот. Проверка простая: networksetup -listallnetworkservices покажет все службы, а раздел Сеть в настройках подсветит активную. Настройте прокси для каждой службы, которой пользуетесь. Команды networksetup из Шага 4 нужно повторить, заменив Wi-Fi на Ethernet.

Причина 4: лишние маски в списке исключений

Мы говорили об этом на Шаге 3. Выполните networksetup -getproxybypassdomains Wi-Fi и убедитесь, что там нет одиночной звездочки, масок вида *.com, *.ru, *.net и доменов рабочих сервисов. То же самое проверьте в переменной no_proxy командой echo $no_proxy.

Причина 5: IPv6

Если ваш домашний провайдер выдает IPv6-адрес, а прокси работает по IPv4, некоторые приложения могут пытаться ходить по IPv6 напрямую. Для системных приложений это редкость, но для утилит бывает. Проверьте, что сервис проверки IP не показывает длинный адрес с двоеточиями. Если показывает, откройте настройки службы, вкладку TCP/IP и переключите Настроить IPv6 в положение Только локальная связь.

Причина 6: HTTPS включен, а HTTP нет, или наоборот

В системных настройках это два независимых переключателя. Забыли один, и половина трафика утекает. Выполните scutil --proxy и убедитесь, что HTTPEnable и HTTPSEnable оба равны 1.

Причина 7: кэш браузера и открытые соединения

Браузер, который был запущен до изменения настроек, может держать старые соединения еще несколько минут. Полностью закройте приложение через Command и Q, а не крестиком, и откройте заново.

Совет: Устройте себе контрольный обход. Откройте сервис проверки IP в Safari, в Chrome, через curl в Терминале и внутри каждого рабочего приложения. Запишите четыре результата рядом. Если все совпадают с IP мобильного прокси, утечек нет. Повторяйте этот обход после каждой смены прокси или обновления системы.

Проверка: Все точки контроля из списка выше показывают один и тот же IP мобильного прокси. Локальные адреса открываются напрямую. Ни один переключатель не остался случайно выключенным.

Проверка результата: финальный чек-лист

Пройдитесь по списку и отметьте каждый пункт. Если какой-то не выполняется, вернитесь к соответствующему шагу.

Системный уровень

  • В Системных настройках на экране Прокси включены Веб-прокси (HTTP) и Защищенный веб-прокси (HTTPS), оба с одним хостом и портом.
  • Авторизация включена, логин и пароль сохранены, окно ввода пароля больше не появляется.
  • Safari показывает IP мобильного прокси и сотового оператора.
  • Список исключений содержит *.local, 169.254/16, localhost, 127.0.0.1 и вашу локальную подсеть. Лишних масок нет.
  • Локальные адреса открываются без ошибок.

Терминал

  • Команда networksetup -getwebproxy Wi-Fi показывает Enabled: Yes и правильный сервер.
  • Команды включения и выключения через networksetup работают в обе стороны.
  • В новом окне Терминала echo $http_proxy выводит адрес прокси.
  • curl https://ifconfig.me без ключа -x возвращает IP прокси.
  • echo $no_proxy показывает список локальных исключений.

Инструменты

  • git config --global --get http.proxy возвращает адрес прокси.
  • brew update завершается без ошибок соединения.
  • npm config get proxy возвращает адрес прокси, если вы работаете с Node.js.
  • Все рабочие приложения с собственными настройками сети переведены на системный прокси или настроены вручную.

Как протестировать целиком

  1. Выключите системный прокси командой networksetup -setwebproxystate Wi-Fi off и networksetup -setsecurewebproxystate Wi-Fi off.
  2. Обновите сервис проверки IP в браузере. Должен появиться домашний IP.
  3. Выполните curl https://ifconfig.me в Терминале. Должен остаться IP прокси, потому что Терминал использует переменные, а не системные настройки. Это подтверждает, что уровни независимы.
  4. Включите системный прокси обратно. Обновите браузер. Должен вернуться IP прокси.
  5. Откройте новое окно Терминала, выполните unset http_proxy https_proxy и снова curl. Теперь Терминал покажет домашний IP. Закройте окно: в следующем переменные снова подхватятся из .zshrc.

Если каждый переход дал ожидаемый результат, вы полностью контролируете прокси на macOS на всех уровнях. Это и было целью.

Типичные ошибки и решения

Прокси включен, но IP не меняется

Причина: настроен не тот сетевой интерфейс, либо включен только один из переключателей HTTP и HTTPS, либо браузер не перезапущен.

Решение: проверьте активную службу в разделе Сеть, выполните scutil --proxy и убедитесь, что оба Enable равны 1, полностью закройте браузер через Command и Q.

Постоянно появляется окно с запросом пароля прокси

Причина: ошибка в логине или пароле, лишний пробел после вставки, либо в связке ключей сохранены старые данные от предыдущего прокси.

Решение: удалите содержимое полей и введите заново вручную. Откройте приложение Связка ключей, найдите запись с хостом прокси и удалите ее, затем введите данные снова и поставьте галочку Запомнить.

Часть сайтов открывается через прокси, часть напрямую

Причина: включен только HTTP или только HTTPS, либо в списке исключений появилась широкая маска.

Решение: включите оба переключателя. Проверьте список исключений командой networksetup -getproxybypassdomains и удалите все, что не относится к локальной сети.

Терминал игнорирует прокси, хотя система настроена

Причина: утилиты командной строки не читают системные настройки. Переменные окружения не заданы или заданы в другом окне.

Решение: пропишите export-строки в .zshrc и выполните source ~/.zshrc. Проверьте echo $http_proxy.

Ошибка 407 Proxy Authentication Required

Причина: прокси не принимает логин и пароль. Часто дело в спецсимволах пароля внутри URL-строки.

Решение: закодируйте спецсимволы: собака как %40, двоеточие как %3A, решетка как %23. Убедитесь, что в личном кабинете провайдера не включена авторизация по IP.

Локальные сервисы, принтер или роутер перестали работать

Причина: из списка исключений удалены *.local и 169.254/16, либо не добавлены localhost и локальная подсеть.

Решение: восстановите список командой networksetup -setproxybypassdomains с полным набором записей из Шага 3.

После перезагрузки Mac прокси в Терминале пропал

Причина: переменные были заданы только через export в открытом окне, а не в .zshrc.

Решение: откройте nano ~/.zshrc, добавьте строки и сохраните. Если у вас другая оболочка, например bash, файл называется .bash_profile.

Все работало, а после обновления macOS сломалось

Причина: крупные обновления системы иногда сбрасывают настройки сетевых служб или переименовывают их.

Решение: откройте файл proxy_backup.txt с Рабочего стола, сверьте значения и повторите Шаг 4 командами networksetup. Проверьте список служб: возможно, появилась новая.

Медленная загрузка страниц

Причина: это нормальное поведение мобильных прокси, сотовая сеть медленнее домашнего провайдера. Но иногда причина в том, что включены и HTTP-прокси, и SOCKS одновременно, и приложения дважды пытаются установить соединение.

Решение: выключите системный SOCKS, оставьте только HTTP и HTTPS. Если скорость все равно низкая, попробуйте сменить IP через ссылку ротации.

Дополнительные возможности для продвинутых пользователей

Базовая настройка сделана. Дальше несколько приемов, которые превращают ручную работу в удобную систему.

Сетевые размещения: два профиля, одно переключение

macOS позволяет создать несколько наборов сетевых настроек и переключаться между ними целиком. Это удобнее, чем каждый раз двигать переключатели.

  1. Откройте Системные настройки, раздел Сеть.
  2. Нажмите на кнопку с тремя точками в нижней части списка служб и выберите Размещения, затем Редактировать размещения.
  3. Нажмите плюс, назовите новое размещение Прокси. Нажмите Готово.
  4. Выберите созданное размещение в списке. Настройте прокси для Wi-Fi и Ethernet, как на Шаге 2.
  5. Исходное размещение Автоматически оставьте без прокси.

Теперь переключаться можно через меню Apple, пункт Размещение, или командой в Терминале:

networksetup -switchtolocation Прокси

И обратно: networksetup -switchtolocation Автоматически. Все службы переключаются одновременно, ошибок с неправильным интерфейсом не будет.

Алиасы для быстрого включения и выключения в Терминале

Если не хочется хранить прокси включенным постоянно, добавьте в .zshrc две функции вместо прямых export:

proxyon() { export http_proxy=http://user123:pass456@proxy.example.net:10000; export https_proxy=$http_proxy; export no_proxy=localhost,127.0.0.1,*.local; echo Proxy ON; }
proxyoff() { unset http_proxy https_proxy all_proxy no_proxy HTTP_PROXY HTTPS_PROXY; echo Proxy OFF; }

После source ~/.zshrc команда proxyon включает прокси в текущем окне, proxyoff выключает. Пароль по-прежнему в файле, но прокси не активируется без вашего решения.

Единая команда для системы и Терминала

Расширьте функцию proxyon, добавив внутрь строки networksetup -setwebproxystate Wi-Fi on и networksetup -setsecurewebproxystate Wi-Fi on. Тогда одна команда включит прокси и для браузеров, и для Терминала. В proxyoff добавьте те же команды с off. Система попросит пароль администратора один раз за сессию.

Смена IP мобильного прокси из Терминала

Большинство провайдеров мобильных прокси выдают ссылку для смены IP. Ее можно дергать через curl без открытия браузера:

curl -s "https://адрес-ротации-из-личного-кабинета"

Оберните в функцию newip и добавьте в .zshrc. Комбинация newip, затем myip покажет новый адрес за две секунды. Для арбитражников, которые прогоняют десятки проверок в день, это ощутимая экономия времени.

SSH через SOCKS5-прокси

Если вы подключаетесь к серверам по SSH и хотите, чтобы соединение шло через мобильный прокси, добавьте в файл ~/.ssh/config блок:

Host myserver
 HostName 203.0.113.10
 ProxyCommand nc -X 5 -x proxy.example.net:10001 %h %p

Утилита nc встроена в macOS. Ключ -X 5 означает SOCKS5, ключ -x задает адрес прокси. Авторизацию по логину и паролю nc не поддерживает, поэтому этот способ подходит для прокси с авторизацией по IP.

PAC-файл для гибких правил

Переключатель Автонастройка прокси принимает адрес PAC-файла: скрипта на JavaScript, который решает для каждого адреса, идти через прокси или напрямую. Это способ реализовать сложные исключения, которые не выражаются масками. Файл можно хранить локально и указать его как file:/

Об авторе

Роман Мельников

Роман Мельников

Технический писатель и системный администратор

Опыт работы: Технический писатель и DevOps-инженер с 9-летним опытом. Создал более 50 подробных гайдов по настройке и администрированию систем. Его инструкции помогли тысячам специалистов успешно решить технические задачи. Популярный автор на Habr и YouTube.
Образование: Московский государственный технический университет имени Н.Э. Баумана. Информационные системы и технологии
Экспертиза:
Техническая документация DevOps Системное администрирование Linux Docker и Kubernetes CI/CD Автоматизация инфраструктуры Облачные технологии Мониторинг систем Bash и Python скриптинг

Поделитесь статьёй: