С оговорками: выбирать приложения списком, как на Android, на iOS нельзя
Система не даёт сторонним клиентам разделять трафик по приложениям. Это ограничение iOS, а не недоработка конкретного клиента.
Почему так
На Android клиент видит, какое приложение отправило пакет, и может решить, куда его направить. На iOS такой информации сторонним программам не дают: туннель работает на уровне всего устройства. Функция «защищённое соединение только для выбранных приложений» в iOS существует, но она доступна корпоративным профилям управления устройством, а не обычным клиентам из магазина.
Что можно вместо этого
| Способ | Что даёт | Ограничения |
|---|---|---|
| Правила по доменам и адресам | трафик к указанным сайтам идёт мимо туннеля | работает по адресам, а не по приложениям |
| Профили маршрутизации | готовые наборы правил, переключаются одним касанием | нужно понимать, что внутри |
| Ручное включение и выключение | полный контроль | придётся помнить |
| Режим «по требованию» | соединение поднимается по условиям сети | условия - про сеть, а не про приложения |
На практике задачу «пусть банк ходит напрямую» решают именно правилами по доменам - это и есть исключения для банковских приложений. Работает не идеально: приложение может обращаться к десятку адресов, и все их нужно учесть.
Как это выглядит в настройках
- Откройте настройки маршрутизации. Раздел с правилами или профилями - где он находится, показано в карте интерфейса.
- Добавьте правило «в обход» для нужных адресов. Указываются домены или диапазоны адресов. Для банковских приложений обычно это домен банка и его поддомены.
- Проверьте результат. Откройте приложение, для которого делали исключение. Если оно работает, а остальное продолжает идти через соединение - правило сработало. Проверить, куда именно идёт трафик, помогает проверка соединения.
На Mac возможностей больше
В настольной системе клиент может маршрутизировать трафик по процессам - то есть буквально «только эта программа». Как это устроено, разобрано на странице прокси для отдельных программ на macOS.
А если поставить два клиента и в каждом свои приложения?
Не поможет: одновременно активен только один профиль - почему.
Профиль MDM решит задачу?
Технически да, но это корпоративный инструмент: профиль ставит организация, которая управляет устройством. Для личного телефона это неподходящий путь.
Значит, весь трафик всегда идёт через сервер?
Весь, кроме того, что вы явно вывели правилами маршрутизации. Это и есть раздельное туннелирование в его iOS-варианте.
На Mac можно то, чего нельзя на iPhone: направить в туннель конкретные программы, а остальное оставить напрямую. Разбираем три способа и их ограничения.
На macOS маршрутизация по программам возможна, в отличие от iOS
Настольная система даёт клиенту больше сведений о том, кто отправил пакет, - поэтому правила по процессам здесь работают.
Три способа
| Способ | Что даёт | Сложность |
|---|---|---|
| Правила по процессам в клиенте | выбор программ списком, как на Android | низкая, если сборка это умеет |
| Системный прокси + настройки программы | через сервер идёт только то, что настроено на прокси | средняя |
| Переменные окружения для терминала | через сервер идут утилиты командной строки | для тех, кто работает в терминале |
Правила по процессам
- Откройте настройки маршрутизации. Ищите раздел с правилами: в разных сборках он называется «Маршрутизация», «Правила» или «Профили».
- Добавьте правило для программы. Указывается имя процесса или путь к приложению. Для браузера это, например, сам браузер, а не его вкладки.
- Выберите действие «Через сервер» или «Напрямую». Обычно есть и правило по умолчанию для всего остального.
- Перезапустите программу. Правила применяются к новым соединениям, а не к уже открытым.
Терминал и утилиты
Для командной строки прокси задаётся переменными окружения. Строка вида 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, а значит драйвера и прав.