Добавить Happ в исключения в Linux: раздельный туннель

На Linux задача "добавить что-то в исключения VPN" решается иначе, чем на Windows. Нет удобного GUI, где можно поставить галочку рядом с приложением. Зато есть полный контроль: через маршрутизацию, политики iptables или нативные функции клиента. Для ПК-пользователей, которые работают с Linux ежедневно, это нормальный инструментарий — но только если знать, что именно нужно сделать. Разберём конкретные сценарии: когда нужны исключения, как их настроить и как проверить результат.

Передавайте только свежий ключ.
Передавайте только свежий ключ.

Когда нужны исключения для Happ на Linux

Самый частый случай: корпоративная сеть или домашняя инфраструктура перестаёт работать при включённом VPN. NAS, сетевой принтер, медиасервер — всё это обычно адресуется по локальным IP или NetBIOS-именам, и если VPN перехватывает весь трафик, локальные ресурсы становятся недоступны.

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

Третий случай — производительность. Если у вас медленный VPN-сервер, а торрент-клиент или другое приложение не требует защиты — можно пустить его напрямую, сохранив VPN только для нужных программ. На Linux это делается через политики маршрутизации или через утилиты типа cgroup.

Способ 1: Исключения через маршрутизацию

Самый прямой способ — добавить статические маршруты, которые отправляют определённый трафик в обход VPN-интерфейса. Когда Happ создаёт tun0 (или wireguard0) интерфейс и становится шлюзом по умолчанию, любой трафик, для которого явно указан физический интерфейс, пойдёт мимо туннеля.

Пример для локальной сети: если ваша домашняя сеть — 192.168.1.0/24, а физический интерфейс — eth0 с шлюзом 192.168.1.1, добавьте маршрут: `sudo ip route add 192.168.1.0/24 via 192.168.1.1 dev eth0`. После этого трафик к локальным устройствам будет идти напрямую, а весь остальной — через VPN Happ.

Для конкретного IP внешнего сервера (например, если нужно пустить определённый сайт без VPN): `sudo ip route add [IP-адрес]/32 via [шлюз] dev [интерфейс]`. Маршрут добавляется временно и сбрасывается при перезагрузке. Для постоянного эффекта добавьте команду в скрипт, который запускается при установке VPN-соединения.

  • ip route add — добавить статический маршрут в обход VPN
  • ip rule add fwmark — маркировать трафик для политик маршрутизации
  • iptables MARK — маркировать трафик на уровне фаервола
  • cgroup + routing — отправить процесс по другому маршруту

Способ 2: Маркировка трафика через iptables

Более гибкий подход — маркировать трафик через iptables и использовать политики маршрутизации на основе маркеров. Это позволяет создавать правила для конкретных портов, протоколов или даже UID процессов.

Пример: хотите, чтобы весь трафик с порта 8080 шёл мимо VPN. Создаёте маркер: `iptables -t mangle -A OUTPUT -p tcp --dport 8080 -j MARK --set-mark 100`. Потом добавляете таблицу маршрутизации для этого маркера: `ip rule add fwmark 100 table 200` и маршрут в таблицу 200: `ip route add default via [физический шлюз] table 200`. Теперь трафик с портом 8080 идёт напрямую.

Для исключения по UID (конкретное приложение): iptables поддерживает матч по uid-owner в таблице mangle. Пример: `iptables -t mangle -A OUTPUT -m owner --uid-owner 1001 -j MARK --set-mark 100`. Если приложение запускается под конкретным пользователем — весь его трафик получит маркер и будет маршрутизирован в обход VPN.

Способ 3: Cgroup для изоляции процессов

Самый элегантный способ для Linux — использовать cgroup (контрольные группы) для изоляции конкретных процессов и назначения им отдельной политики маршрутизации. Это современный подход, который работает на уровне ядра и не зависит от iptables.

Создайте cgroup: `mkdir /sys/fs/cgroup/net_cls/bypass_vpn` и `echo 100 > /sys/fs/cgroup/net_cls/bypass_vpn/net_cls.classid`. Затем добавьте правило iptables для этого classid: `iptables -t mangle -A OUTPUT -m cgroup --cgroup 100 -j MARK --set-mark 200`. И маршрут: `ip rule add fwmark 200 table bypass`, `ip route add default via [шлюз] table bypass`.

Теперь любой процесс, запущенный в этой cgroup, будет идти мимо VPN. Запуск приложения в cgroup: `cgexec -g net_cls:bypass_vpn [команда]`. Это удобно, потому что не нужно знать порты или UID заранее — достаточно запустить нужный процесс через cgexec.

Базовые шаги для Впн для пк 2026 мы держим на vertexvpn.digital, чтобы не дублировать их в каждом материале.

Как проверить, что исключения работают

После настройки исключений проверьте результат с двух сторон. Первая: убедитесь, что VPN-трафик всё ещё идёт через туннель. Откройте ipleak.net в браузере — там должен быть IP VPN-сервера, а не ваш реальный IP. Если там реальный IP — что-то сломало маршрутизацию туннеля.

Вторая проверка: убедитесь, что исключённый трафик действительно идёт напрямую. Для конкретного IP: `traceroute [IP]` должен показать маршрут через ваш физический шлюз, а не через VPN-сервер. Для приложения: запустите его, и через `ss -tnp` или `netstat` посмотрите, через какой интерфейс идут соединения.

Команда `ip route get [IP-адрес]` показывает, через какой интерфейс пойдёт пакет к конкретному IP. Это быстрый способ проверить маршрутизацию без реального подключения.

После перезагрузки убедитесь, что правила сохранились. Маршруты, добавленные через `ip route add`, временные. Правила iptables, если не сохранены через iptables-save/restore, тоже. Для постоянных правил используйте соответствующие механизмы вашего дистрибутива: netplan, NetworkManager, или скрипты в /etc/network/if-up.d/.

Исключения через настройки профиля Happ

Помимо системных настроек, некоторые версии Happ предоставляют встроенный механизм split tunneling прямо в интерфейсе клиента. Если ваша версия это поддерживает — это самый простой путь: зайдите в настройки, найдите раздел "Исключения" или "Split tunneling", добавьте нужные приложения или подсети.

Проверьте настройки профиля в конфигурационном файле. Для WireGuard-профилей это секция `[Peer]` с полем `AllowedIPs`. Если там стоит `0.0.0.0/0`, весь трафик идёт через VPN. Чтобы добавить исключение — уберите нужную подсеть из AllowedIPs. Например, если 192.168.1.0/24 нужно оставить локальным, перечислите AllowedIPs без этой подсети.

Для VLESS/VMess-конфигураций в Happ исключения обычно настраиваются в секции routing. В конфигурационном файле это выглядит как правила с типом `direct` для определённых доменов или IP. Это более сложная конфигурация, которая требует понимания структуры конфига Happ.

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

← Все статьи