справочник помощи по Happ RUПоиск/
Сеть и маршрутизация

Прокси для отдельных приложений на iOS

Где искать причину

Правила прохождения трафика

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

К разбору и действиям ↓
В этой статье

С оговорками: выбирать приложения списком, как на Android, на iOS нельзя

Система не даёт сторонним клиентам разделять трафик по приложениям. Это ограничение iOS, а не недоработка конкретного клиента.

Почему так

На Android клиент видит, какое приложение отправило пакет, и может решить, куда его направить. На iOS такой информации сторонним программам не дают: туннель работает на уровне всего устройства. Функция «защищённое соединение только для выбранных приложений» в iOS существует, но она доступна корпоративным профилям управления устройством, а не обычным клиентам из магазина.

Что можно вместо этого

Способ Что даёт Ограничения
Правила по доменам и адресам трафик к указанным сайтам идёт мимо туннеля работает по адресам, а не по приложениям
Профили маршрутизации готовые наборы правил, переключаются одним касанием нужно понимать, что внутри
Ручное включение и выключение полный контроль придётся помнить
Режим «по требованию» соединение поднимается по условиям сети условия - про сеть, а не про приложения

На практике задачу «пусть банк ходит напрямую» решают именно правилами по доменам - это и есть исключения для банковских приложений. Работает не идеально: приложение может обращаться к десятку адресов, и все их нужно учесть.

Как это выглядит в настройках

  1. Откройте настройки маршрутизации. Раздел с правилами или профилями - где он находится, показано в карте интерфейса.
  2. Добавьте правило «в обход» для нужных адресов. Указываются домены или диапазоны адресов. Для банковских приложений обычно это домен банка и его поддомены.
  3. Проверьте результат. Откройте приложение, для которого делали исключение. Если оно работает, а остальное продолжает идти через соединение - правило сработало. Проверить, куда именно идёт трафик, помогает проверка соединения.

На Mac возможностей больше

В настольной системе клиент может маршрутизировать трафик по процессам - то есть буквально «только эта программа». Как это устроено, разобрано на странице прокси для отдельных программ на macOS.

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

Не поможет: одновременно активен только один профиль - почему.

Профиль MDM решит задачу?

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

Значит, весь трафик всегда идёт через сервер?

Весь, кроме того, что вы явно вывели правилами маршрутизации. Это и есть раздельное туннелирование в его iOS-варианте.

На Mac можно то, чего нельзя на iPhone: направить в туннель конкретные программы, а остальное оставить напрямую. Разбираем три способа и их ограничения.

На macOS маршрутизация по программам возможна, в отличие от iOS

Настольная система даёт клиенту больше сведений о том, кто отправил пакет, - поэтому правила по процессам здесь работают.

Три способа

Способ Что даёт Сложность
Правила по процессам в клиенте выбор программ списком, как на Android низкая, если сборка это умеет
Системный прокси + настройки программы через сервер идёт только то, что настроено на прокси средняя
Переменные окружения для терминала через сервер идут утилиты командной строки для тех, кто работает в терминале

Правила по процессам

  1. Откройте настройки маршрутизации. Ищите раздел с правилами: в разных сборках он называется «Маршрутизация», «Правила» или «Профили».
  2. Добавьте правило для программы. Указывается имя процесса или путь к приложению. Для браузера это, например, сам браузер, а не его вкладки.
  3. Выберите действие «Через сервер» или «Напрямую». Обычно есть и правило по умолчанию для всего остального.
  4. Перезапустите программу. Правила применяются к новым соединениям, а не к уже открытым.

Терминал и утилиты

Для командной строки прокси задаётся переменными окружения. Строка вида export ALL_PROXY=socks5://127.0.0.1:1080 направит через локальный прокси команды, которые эти переменные учитывают, - например, загрузку файлов. Программы, игнорирующие переменные, продолжат ходить напрямую.

export ALL_PROXY=socks5://127.0.0.1:1080
export HTTP_PROXY=http://127.0.0.1:1081
export HTTPS_PROXY=http://127.0.0.1:1081

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

На iPhone так нельзя

iOS не даёт сторонним приложениям разделять трафик по программам - там остаются только правила по адресам. Подробнее - прокси для отдельных приложений на iOS.

Можно ли пустить через сервер только один браузер?

Да: либо правилом по процессу, либо через прокси в настройках самого браузера, если он это поддерживает.

Правила по процессам надёжны?

В целом да, но программы с фоновыми службами могут обходить их - служба работает от другого процесса.

Это влияет на скорость?

Нет заметно: разбор правил дешёвый по сравнению с самой передачей данных.

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

Способ 1: настройки самой программы

Самый простой и самый надёжный: если программа умеет SOCKS5, укажите ей адрес 127.0.0.1 и порт приложения. Тогда через туннель пойдёт только она, а системе не потребуется ни драйвер, ни права. Как узнать порт - локальный SOCKS и HTTP.

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

Способ 2: правила маршрутизации в TUN

Когда туннель уже поднят, приложение может решать, что в него отправлять, а что нет. Правила задаются по программам (по имени исполняемого файла) и по адресам. Это единственный способ пустить через туннель игру и одновременно оставить банк напрямую.

  • По программе: правило указывает имя.exe - весь её трафик идёт нужным путём.
  • По домену: example.com и его поддомены.
  • По адресу и подсети: полезно для локальной сети и корпоративных диапазонов.
  • Порядок правил важен: обычно применяется первое подходящее.

Подробный разбор - раздельное туннелирование и правила по доменам и IP.

Способ 3: переменные окружения

Для консольных инструментов работает старый приём: запустить программу с переменными HTTP_PROXY и HTTPS_PROXY, указывающими на локальный прокси. В окне терминала это выглядит как две команды перед запуском - и действует только в этом окне, не трогая систему.

set HTTP_PROXY=http://127.0.0.1:<порт>
set HTTPS_PROXY=http://127.0.0.1:<порт>

Подставьте свой порт из настроек приложения. Способ хорош тем, что ничего не меняет ни в системе, ни в самой программе.

Что выбрать под задачу

Задача Способ Почему
Только браузер SOCKS в самом браузере Система не трогается вовсе
Игра через туннель, остальное напрямую TUN + правила по программам Игра не умеет прокси
Банк мимо туннеля TUN + исключения Иначе отказы входа
Консольные утилиты Переменные окружения Локально и обратимо
Рабочий компьютер SOCKS в одной программе Минимум вмешательства

Проверяйте результат, а не намерение

Настроив выборочную маршрутизацию, обязательно проверьте её: откройте в «туннельной» программе сайт определения адреса, а в «прямой» - тот же сайт. Адреса должны отличаться. Как проверять - проверка маршрутов.

Можно ли пустить через туннель только один сайт?

Да, правилом по домену в режиме TUN. Или проще: открывать этот сайт в браузере, настроенном на SOCKS.

Программа не видит прокси, хотя настроен

Проверьте, что порт действительно слушается, и что вы указали SOCKS5, а не HTTP. Разбор - порт занят.

Работает ли выборочность без прав администратора?

Первый и третий способы - да. Второй требует TUN, а значит драйвера и прав.

Нашли ответ? Сохраните ссылку на эту инструкцию