Здесь могла бы быть реклама
Она помогает блогу развиваться.
Кажется, сегодня она немного загрустила.

Главная страница » Сеть и сервисы » VPN только для выбранных сайтов и устройств в OpenWrt: раздельная маршрутизация трафика
VPN только для выбранных сайтов и устройств в OpenWrt: раздельная маршрутизация трафика
Сеть и сервисы

VPN только для выбранных сайтов и устройств в OpenWrt: раздельная маршрутизация трафика

09.09.2026 198
VPN только для выбранных сайтов и устройств в OpenWrt: раздельная маршрутизация трафика

Настройка раздельной маршрутизации в OpenWrt: как направить трафик только выбранных устройств или доменов через VPN, оставив остальной интернет напрямую. Три способа: ip rule, vpn-policy-routing и dnsmasq с ipset.

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

Включать VPN на всех устройствах сразу — плохая идея. Умный дом начнёт терять связь с облаком, локальные сервисы перестанут отвечать, а скорость упадёт. Да и зачем гнать трафик умной лампочки через зашифрованный туннель?

Решение — раздельная маршрутизация трафика на уровне роутера. OpenWrt позволяет настроить политики так, что только выбранные устройства или домены будут уходить в VPN, а остальной трафик пойдёт обычным путём. Сегодня разберём, как это сделать правильно.

Что такое раздельная маршрутизация и зачем она нужна

Раздельная маршрутизация (split tunneling) — это механизм, при котором часть трафика направляется через VPN-туннель, а остальная — напрямую через основного провайдера. На роутере с OpenWrt это реализуется через таблицы маршрутизации, правила policy routing и файрвол.

Основные сценарии использования:

  • Выборочный доступ по устройствам — например, только телевизор и приставка ходят через VPN для доступа к зарубежным стриминговым сервисам.
  • Выборочный доступ по доменам — определённые сайты или API уходят в туннель, остальное — напрямую.
  • Разделение по типам трафика — игровой трафик минимальной задержкой идёт напрямую, а загрузки — через VPN.

OpenWrt даёт гибкие инструменты для такой настройки. Мы рассмотрим два подхода: через стандартные средства (ip rule, ip route) и через пакет vpn-policy-routing, который сильно упрощает жизнь.

Подготовка: что понадобится

Для настройки нам нужны:

  • Роутер с установленным OpenWrt (подойдут любые поддерживаемые модели — от NanoPi R2S до Routerich AX3000). Если у тебя Routerich, можешь заодно посмотреть общую настройку роутера на OpenWrt.
  • Настроенный VPN-клиент. В OpenWrt чаще всего используют WireGuard или OpenVPN. В этой статье будем считать, что VPN уже поднят и работает — у нас есть интерфейс wg0 или tun0.
  • Доступ к роутеру по SSH или через LuCI.

Проверим, что VPN-интерфейс активен:

ip addr show wg0

Если интерфейс есть и у него назначен адрес — отлично, можно двигаться дальше.

Базовая схема: как OpenWrt принимает решения о маршрутизации

Прежде чем настраивать, важно понять, как OpenWrt обрабатывает трафик. По умолчанию весь трафик от LAN-устройств попадает в цепочку forwarding и уходит через default route — то есть через WAN. Если мы поднимем VPN и добавим маршрут по умолчанию через wg0, весь трафик уйдёт в туннель. Нам это не нужно.

Вместо этого мы создадим отдельную таблицу маршрутизации, в которую поместим маршрут через VPN, и будем направлять в неё трафик по правилам ip rule.

Схема такая:

  1. Создаём таблицу маршрутизации, например, номер 100.
  2. Добавляем в неё маршрут по умолчанию через VPN-интерфейс.
  3. Создаём правила ip rule, которые отправляют трафик от нужных устройств или к нужным сетям в эту таблицу.
  4. Настраиваем NAT для VPN-интерфейса, чтобы ответы возвращались корректно.

Способ 1: Ручная настройка через ip rule и ip route

Этот способ подходит тем, кто хочет понять механику процесса и не боится командной строки. Все настройки можно сделать через SSH.

Шаг 1. Создаём таблицу маршрутизации

Откроем файл /etc/iproute2/rt_tables и добавим строку:

echo "100 vpn_table" >> /etc/iproute2/rt_tables

Теперь мы можем обращаться к таблице по имени vpn_table.

Шаг 2. Добавляем маршрут через VPN

ip route add default dev wg0 table vpn_table

Если используешь OpenVPN, замени wg0 на tun0.

Шаг 3. Добавляем правило для устройств

Допустим, мы хотим отправлять через VPN трафик от устройства с IP-адресом 192.168.1.100:

ip rule add from 192.168.1.100 lookup vpn_table priority 1000

Проверить правило можно так:

ip rule show

Шаг 4. Настраиваем NAT

Чтобы устройства, ушедшие в VPN, могли получать ответы, нужно настроить маскарадинг на VPN-интерфейсе. Добавим правило в файрвол:

iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

Шаг 5. Сохраняем настройки

Проблема ручного способа в том, что после перезагрузки всё слетит. Чтобы этого избежать, нужно добавить команды в скрипты инициализации. В OpenWrt для этого есть /etc/firewall.user и /etc/rc.local.

Добавим в /etc/firewall.user:

iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE

А в /etc/rc.local перед exit 0:

ip route add default dev wg0 table vpn_table
ip rule add from 192.168.1.100 lookup vpn_table priority 1000

Проверка

Чтобы убедиться, что трафик от нужного устройства уходит в VPN, выполни на этом устройстве:

curl --interface eth0 ifconfig.me

Или просто зайди на сайт определения IP. Если IP совпадает с адресом VPN-сервера — всё работает.

Способ 2: Пакет vpn-policy-routing — удобная настройка через UCI

Ручной способ хорош для понимания, но когда устройств много, а доменов ещё больше, хочется автоматизации. Пакет vpn-policy-routing предоставляет удобный интерфейс через UCI и LuCI.

Установка

opkg update
opkg install vpn-policy-routing

После установки в LuCI появится раздел Network → VPN Policy Routing.

Настройка через UCI

Конфигурация хранится в /etc/config/vpn-policy-routing. Основные параметры:

uci set vpn-policy-routing.config.enabled='1'
uci set vpn-policy-routing.config.verbosity='1'
uci commit vpn-policy-routing

Теперь добавим политику для устройства:

uci add vpn-policy-routing policy
uci set vpn-policy-routing.@policy[-1].name='tv_vpn'
uci set vpn-policy-routing.@policy[-1].src_addr='192.168.1.100'
uci set vpn-policy-routing.@policy[-1].interface='wg0'
uci commit vpn-policy-routing

Перезапустим сервис:

/etc/init.d/vpn-policy-routing restart

Политики по доменам

vpn-policy-routing умеет работать с доменами через dnsmasq и ipset. Для этого нужно:

  1. Установить ipset:
opkg install ipset
  1. Создать список доменов в конфигурации:
uci add vpn-policy-routing policy
uci set vpn-policy-routing.@policy[-1].name='domains_vpn'
uci set vpn-policy-routing.@policy[-1].domain='example.com'
uci set vpn-policy-routing.@policy[-1].interface='wg0'
uci commit vpn-policy-routing

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

Типичные ошибки

  • Не работает после перезагрузки — проверь, что сервис vpn-policy-routing включён в автозагрузку: /etc/init.d/vpn-policy-routing enable.
  • Трафик не уходит в VPN — убедись, что в политике правильно указан интерфейс. Для WireGuard это wg0, для OpenVPN — tun0.
  • Конфликт с файрволом — иногда правила файрвола блокируют forwarded-трафик. Проверь, что в зоне LAN разрешён forwarding в зону VPN.

Способ 3: Маршрутизация по доменам через dnsmasq и ipset

Если нужно отправлять в VPN только трафик к определённым доменам, можно использовать связку dnsmasq + ipset. Этот подход удобен, когда список доменов большой и постоянно меняется.

Настройка dnsmasq

Добавим в /etc/config/dhcp:

uci add_list dhcp.@dnsmasq[0].ipset='/example.com/vpn_table'
uci commit dhcp

Перезапустим dnsmasq:

/etc/init.d/dnsmasq restart

Теперь при запросе к example.com dnsmasq добавит IP-адрес в ipset vpn_table.

Правило маршрутизации

Добавим правило, которое направляет трафик к адресам из ipset в VPN-таблицу:

ip rule add from all fwmark 0x100 lookup vpn_table

Но чтобы это работало, нужно пометить пакеты через iptables:

iptables -t mangle -A PREROUTING -m set --match-set vpn_table dst -j MARK --set-mark 0x100

Автоматизация

Чтобы не вводить команды вручную после каждой перезагрузки, добавь их в /etc/firewall.user:

iptables -t mangle -A PREROUTING -m set --match-set vpn_table dst -j MARK --set-mark 0x100

А правило ip rule — в /etc/rc.local.

Настройка NAT и файрвола для VPN-интерфейса

Чтобы устройства в локальной сети могли ходить через VPN, нужно создать зону в файрволе. В LuCI: Network → Firewall → Zone Settings.

Добавим зону vpn:

  • Interface: wg0 (или tun0)
  • Allow forward to destination zones: lan
  • Allow forward from source zones: lan
  • Masquerading: включено

В конфиге это выглядит так:

uci add firewall zone
uci set firewall.@zone[-1].name='vpn'
uci set firewall.@zone[-1].network='wg0'
uci set firewall.@zone[-1].input='ACCEPT'
uci set firewall.@zone[-1].output='ACCEPT'
uci set firewall.@zone[-1].forward='ACCEPT'
uci set firewall.@zone[-1].masq='1'
uci commit firewall

Перезапустим файрвол:

/etc/init.d/firewall restart

Проверка результата

После настройки важно убедиться, что всё работает корректно. Вот несколько проверок:

Проверка маршрутов

ip route show table vpn_table

Должен быть маршрут по умолчанию через VPN-интерфейс.

Проверка правил

ip rule show

Убедись, что правило для нужного устройства или метки присутствует.

Проверка с устройства

Зайди с устройства, которое должно ходить через VPN, на сайт определения IP. Если адрес совпадает с VPN-сервером — всё ок.

Проверка с обычного устройства

Убедись, что остальные устройства ходят в интернет напрямую, без VPN.

Просмотр логов

Если что-то не работает, смотри логи:

logread | grep vpn-policy-routing

Типичные проблемы и их решение

Весь трафик уходит в VPN, хотя нужно только часть

Проверь, нет ли в таблице main маршрута по умолчанию через VPN. Если есть — удали его:

ip route del default dev wg0

Устройства в LAN не могут выйти в интернет через VPN

Убедись, что в зоне vpn файрвола включён masquerading. Без него ответы от VPN-сервера не вернутся к устройствам.

DNS-запросы уходят напрямую, а не через VPN

Если нужно, чтобы DNS тоже шёл через VPN, настрой соответствующий upstream в dnsmasq или укажи DNS-серверы VPN в интерфейсе wg0.

Не работает ipset

Проверь, что пакет ipset установлен, а в dnsmasq включена поддержка ipset. В LuCI: Network → DHCP and DNS → Advanced Settings — опция "IPset support".

Когда раздельная маршрутизация не нужна

Иногда проще не городить сложные схемы, а использовать VPN на конкретном устройстве. Например, если тебе нужно ходить через VPN только с ноутбука — установи WireGuard или OpenVPN прямо на него. Роутерная маршрутизация имеет смысл, когда:

  • Устройств несколько, и они не поддерживают VPN-клиенты (телевизоры, приставки, IoT-гаджеты).
  • Нужно централизованно управлять политиками.
  • Хочется скрыть факт использования VPN от провайдера на уровне всей сети.

Кстати, если ты используешь Home Assistant и хочешь, чтобы часть его интеграций ходила через VPN, раздельная маршрутизация на роутере — самый надёжный способ. Интеграции вроде Xiaomi Miot Auto иногда требуют доступа к облаку, которое может быть недоступно напрямую.

Полезные советы

  • Делай бэкап конфигов перед изменениями. В OpenWrt это делается через System → Backup/Flash Firmware.
  • Используй LuCI, если не уверен в командной строке. Пакет vpn-policy-routing имеет удобный веб-интерфейс.
  • Тестируй на одном устройстве перед тем, как применять политики ко всей сети.
  • Следи за версией OpenWrt — в новых версиях синтаксис некоторых команд мог измениться.

Заключение

Раздельная маршрутизация в OpenWrt — мощный инструмент, который позволяет гибко управлять трафиком в домашней сети. Ты можешь отправлять в VPN только нужные устройства или домены, оставляя остальной трафик напрямую. Это экономит ресурсы роутера, снижает задержки и не ломает работу умного дома.

Мы рассмотрели три подхода: ручную настройку через ip rule, использование пакета vpn-policy-routing и маршрутизацию по доменам через dnsmasq и ipset. Каждый из них имеет свои плюсы и минусы, но для большинства сценариев оптимальным будет vpn-policy-routing — он проще в управлении и поддержке.

Если ты используешь роутер Routerich AX3000, обрати внимание на статью про ZeroBlock для OpenWrt — там описаны похожие механизмы в контексте этого железа. А если хочешь глубже разобраться в том, как работают VPN-туннели, почитай про VLESS как туннель между проектами.

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

Понравилась статья?

Поставьте лайк и сохраните полезный материал в закладки.

Комментарии (0)
Добавить комментарий
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Routerich AX3000: настройка роутера на OpenWrt, Mesh, TorrServer и сетевое хранилище
Сеть и сервисы
04.09.2026
Routerich AX3000: настройка роутера на OpenWrt, Mesh, TorrServer и сетевое хранилище
Routerich AX3000 с OpenWrt оказался гораздо дружелюбнее, чем можно ожидать от роутера с настолько гибкой прошивкой. Разбираемся с первоначальной настройкой, Mesh,
ZeroBlock для OpenWrt: настройка VPN и маршрутизации на Routerich
Сеть и сервисы
05.09.2026
ZeroBlock для OpenWrt: настройка VPN и маршрутизации на Routerich
Практическая инструкция по установке и настройке ZeroBlock на OpenWrt. Разберём подключение VPN, работу с sing-box, DNS, секциями маршрутизации, автозапуск и базовую
Nginx Proxy Manager: установка и первоначальная настройка reverse proxy с HTTPS в Docker
Сеть и сервисы
02.09.2026
Nginx Proxy Manager: установка и первоначальная настройка reverse proxy с HTTPS в Docker
Пошаговая установка Nginx Proxy Manager в Docker: настройка reverse proxy, получение SSL-сертификатов Let's Encrypt и проксирование сервисов с HTTPS. Практическое
Как выбрать LTE/5G-модем для Routerich AX3000: от простого E3372 до T77W968, T99W175 и FM350
Сеть и сервисы
08.09.2026
Как выбрать LTE/5G-модем для Routerich AX3000: от простого E3372 до T77W968, T99W175 и FM350
Как выбрать LTE/5G-модем для Routerich AX3000: разбираемся в LTE Cat, агрегации частот, совместимости, питании, охлаждении и популярных моделях от Huawei, Quectel,
Pi-hole + Unbound: Ваш приватный DNS-сервер с блокировкой рекламы
Сеть и сервисы
31.03.2026
Pi-hole + Unbound: Ваш приватный DNS-сервер с блокировкой рекламы
Настраиваем связку Pi-hole и Unbound для локального DNS, блокировки рекламы и более приватной работы домашней сети.
MQTT брокер Mosquitto: основа умного дома своими руками
Сеть и сервисы
31.03.2026
MQTT брокер Mosquitto: основа умного дома своими руками
Пошаговое руководство по установке и настройке MQTT-брокера Mosquitto на Raspberry Pi/Orange Pi для создания основы умного дома своими руками. Команды, конфиги,

Войдите в аккаунт, чтобы пользоваться закладками, сообщениями и другими возможностями сайта.