Добавить 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.

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

← Все статьи