Классический VPN устроен просто: поднимается виртуальный сетевой интерфейс, в системную таблицу маршрутов прописывается «весь трафик туда», и с этого момента через туннель идёт всё. Для одной задачи — сделать соединение приватным в чужой сети — это правильно. Для повседневной работы — неудобно: одному приложению туннель нужен, другому вреден, третьему важен пинг.
Разделять трафик можно тремя разными способами, и путаница между ними — главный источник «настроил, а не работает».
Три способа разделить трафик
По назначению — куда идёт соединение
Правило смотрит на домен или адрес получателя: этот сайт напрямую, остальное в туннель. Работает одинаково для всех программ, включая те, которые вы установите завтра, и не зависит от того, какой процесс открыл соединение.
Это основной механизм для разделения российских и зарубежных сервисов — подробно он разобран в статье почему банк не пускает при включённом VPN.
По программе — кто открыл соединение
Правило привязано к исполняемому файлу: игре — напрямую, рабочему клиенту — в туннель. Клиент определяет, какому процессу принадлежит соединение, и применяет назначенный маршрут независимо от того, куда программа обращается.
Это то, что обычно и имеют в виду под «VPN для одной программы».
По маршруту — вручную, для конкретных адресов
Способ без всякого клиента: прописать в системной таблице маршрутов, что такие-то диапазоны адресов идут мимо туннеля. Работает всегда и везде, но управлять этим тяжело: адреса сервисов меняются, диапазоны крупные, а по названию программы так разделить нельзя в принципе.
Как это работает внутри
Приложение открывает сокет. Пакет попадает в сетевой стек Windows, где на уровне платформы фильтрации трафика можно узнать, какому процессу принадлежит соединение — ещё до того, как оно установлено. Клиент сопоставляет процесс со своим списком правил и решает: отправить соединение в виртуальный интерфейс туннеля или выпустить через обычный интерфейс провайдера.
Ключевой момент, из которого следуют все ограничения: решение принимается один раз, для соединения, и привязано к процессу, который его открыл. Не к окну, не к ярлыку, не к папке.
Настройка в приложении SafeMoney
В приложении для Windows список программ виден целиком, и каждой назначается один из режимов:
- через VPN — весь трафик программы идёт в туннель;
- в обход — программа работает так, как будто VPN выключен;
- по умолчанию — применяется общее правило маршрутизации (российские сервисы напрямую,
остальное через туннель).
Типовая рабочая конфигурация выглядит так: банковское приложение и клиент маркетплейса — «в обход», игра — «в обход» или на игровую локацию, рабочие сервисы и браузер — «по умолчанию». Менять настройку на лету можно без переподключения: правило применяется к новым соединениям.
Почему правило иногда не срабатывает
Пять случаев, которые встречаются чаще всего.
Соединение открывает не та программа
Часть приложений не работает с сетью напрямую: они обращаются к системной службе, к встроенному браузерному движку или к собственному фоновому сервису обновлений. Соединение открывает другой процесс — правило, назначенное видимой программе, к нему не относится. Признак: программа продолжает вести себя так, будто настройки нет вовсе.
Программа состоит из нескольких процессов
Игровые лончеры запускают отдельный процесс самой игры, браузеры — процессы на каждую вкладку, мессенджеры — фоновый сервис. Правило нужно назначать тому файлу, который реально держит соединение с сервером, а не тому, который вы запускаете с ярлыка.
Соединение уже установлено
Если поменять правило, не закрыв программу, уже открытые соединения продолжат идти по старому маршруту — их никто не переключает на лету. Перезапустите программу.
Программу трогает антивирус или сторонний файрвол
Средства защиты, которые сами вклиниваются в сетевой стек, могут перехватывать трафик раньше клиента VPN. Тогда разделение либо не применяется, либо применяется через раз. Проверяется просто: временно отключить перехват трафика в антивирусе и повторить тест.
Задействован IPv6
Правила разделения обычно описывают четвёртую версию протокола. Если у провайдера есть IPv6 и сервис доступен по нему, соединение уйдёт мимо туннеля независимо от того, что назначено программе.
Как проверить, что программа действительно идёт мимо туннеля
Не полагайтесь на индикатор в интерфейсе — проверьте фактический маршрут.
- В программе, которой назначен обход, откройте любой сервис проверки адреса (для браузера
достаточно вкладки; для игрового клиента — встроенный браузер или страница поддержки).
- Одновременно откройте такой же сервис в программе, которая идёт через туннель.
- Адреса должны отличаться: у первой — ваш домашний, у второй — адрес выбранной локации.
Проверить, какой процесс держит соединение, можно и системными средствами: в мониторе ресурсов Windows на вкладке «Сеть» видно список процессов и адреса, с которыми они соединены. Если программы в списке нет, а трафик идёт — значит, за неё работает другой процесс, и правило надо назначать ему.
Если приложения нет: разделение на других платформах
Android. Клиенты вроде Happ позволяют выбрать список приложений, которые идут через туннель (или, наоборот, исключаются из него) — система такое разделение поддерживает штатно.
iOS. Выбора по приложениям система не даёт вообще. Разделять там можно только по адресам и доменам назначения — на практике этого хватает, потому что российские сервисы уходят напрямую по общему правилу.
Роутер. На роутере разделение делается по адресам назначения для всей домашней сети сразу: через туннель уходит только то, что попало в список. Это удобно для телевизора и приставок, где никакого клиента не поставить.
Коротко
- Разделять трафик можно по назначению, по программе и по маршруту — это три разных механизма
с разными границами применимости.
- Для браузера и сервисов надёжнее правила по домену, для игр и отдельных клиентов — по программе.
- Правило привязано к процессу, который открывает соединение: отсюда все случаи «настроил, а не
работает».
- После изменения правила программу нужно перезапустить — открытые соединения не переключаются.
Короткие ответы
Чем разделение по программам отличается от разделения по сайтам?
По программам маршрут назначается процессу целиком, независимо от того, куда он ходит. По сайтам решение принимается для каждого соединения по домену или адресу назначения. Первое удобнее для игр и клиентов, второе точнее для браузера, который ходит везде сразу.
Почему браузер не слушается правила?
Современные браузеры открывают соединения из нескольких процессов, а часть запросов уходит через системные службы. Назначайте правило основному исполняемому файлу, а лучше используйте разделение по доменам — для браузера оно надёжнее.
Можно ли так же сделать на телефоне?
На Android приложения-клиенты умеют выбирать список программ, которые идут через туннель. На iOS такого выбора система не даёт: там разделение возможно только по адресам и доменам назначения.
Влияет ли разделение на скорость?
Само по себе нет. Программы, оставленные напрямую, работают ровно как без VPN, а трафик в туннеле идёт по тому же маршруту, что и обычно. Проверка правила выполняется один раз при установлении соединения.