Перейти к содержимому

OPNsense: направляем выбранный трафик через VPN

Привет, Мир! Сегодня я расскажу Вам, как направить выбранный трафик через VPN в OPNsense. Не всегда хочется отправлять в туннель всю домашнюю сеть: иногда он нужен одному компьютеру или нескольким сервисам. Давайте настроим такой вариант, сохранив для остальных подключений обычный выход через провайдера.

Для этого нам понадобится policy-based routing — маршрутизация на основе правил: правило firewall выбирает трафик и назначает ему шлюз. В этой статье разберём IPv4 на примере уже работающего WireGuard с выходом в интернет. Предполагается, что туннель уже настроен и работает; здесь сосредоточимся на выборе трафика. Погнали!

Подготовка к работе

  • LAN: 192.168.10.0/24.
  • Тестовый компьютер: 192.168.10.50, адрес закреплён в DHCP.
  • Интерфейс VPN: WG_VPN, шлюз: GW_VPN.
  • Обычный выход в интернет: WAN.

Имена и адреса условные. Сохраните резервную копию конфигурации. Названия разделов могут отличаться между версиями OPNsense.

Проверьте WireGuard и шлюз

Для выборочной маршрутизации у peer разрешён 0.0.0.0/0, у instance включён Disable Routes, интерфейс назначен и включён. WAN должен оставаться обычным маршрутом по умолчанию. Подготовка туннеля описана в официальной инструкции WireGuard.

В System → Gateways → Configuration проверьте интерфейс и адрес GW_VPN. Не делайте его предпочтительным шлюзом по умолчанию. Far Gateway разрешает шлюз вне подсети интерфейса, если этого требует конфигурация.

Monitor IP должен отвечать через туннель. Недоступный для ping узел даст ложный статус offline. Отключение мониторинга означает «считать доступным», а не подтверждает работу VPN. Фактический маршрут по умолчанию проверяется в System → Routes → Status. Подробнее — документация шлюзов.

Создайте aliases

Начнём со списков адресов. Открываем Firewall → Aliases и добавляем следующие aliases:

  • VPN_CLIENTS, Hosts: 192.168.10.50.
  • LOCAL_NETS, Networks: Ваши локальные сети, для которых нужно сохранить обычную маршрутизацию.
  • VPN_TARGETS, Hosts или Networks: реальные адреса назначения, если VPN нужен только для них.

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

Hosts принимает доменные имена, но правило работает с полученными IP, а не с URL. OPNsense периодически обновляет DNS-ответы. Клиент может получить другие адреса CDN; один IP может обслуживать несколько сайтов. Поэтому alias с доменами не гарантирует точный выбор сервиса. Его содержимое проверяется в Firewall → Diagnostics → Aliases. См. описание aliases.

Настройте исходящий NAT

Для типичного VPN-провайдера нужен Source NAT. Откройте Firewall → NAT → Source NAT (Outbound) и выберите Hybrid: автоматические правила сохранятся, а дополнительные можно добавить вручную.

Добавляем правило со следующими параметрами:

Параметр Значение
Interface WG_VPN
Version / Protocol IPv4 / any
Source VPN_CLIENTS
Destination any
Translation Адрес интерфейса VPN

Теперь проверяем порядок: более раннее совпадающее правило не должно мешать этой трансляции.

В некоторых версиях раздел называется Outbound. Для соединения двух сетей с обратным маршрутом NAT может не требоваться; здесь рассматривается интернет через VPN-провайдера. Подробнее — документация NAT.

Выберите трафик

В Firewall → Rules выберите входной интерфейс клиента: LAN либо соответствующий VLAN. Сначала разместите необходимые разрешения к локальным ресурсам без VPN-шлюза. Сохраните существующие ограничения доступа между сетями.

Ниже добавляем правило для VPN. Чтобы было проще сверить настройки, соберу параметры в таблицу:

Параметр Значение
Action / Quick Pass / включён
Direction in
Version / Protocol IPv4 / any
Source VPN_CLIENTS
Gateway GW_VPN

А вот назначение выбираем в зависимости от Вашей задачи:

  • Весь внешний трафик выбранного клиента: назначение LOCAL_NETS с инверсией.
  • Только выбранные адреса: назначение VPN_TARGETS без инверсии.

Выберите один вариант. Поставьте правило выше общего разрешения LAN. У Quick срабатывает первое совпадение; Floating и правила групп обрабатываются раньше интерфейсных. Проверьте, не перехватывают ли они трафик.

Существующие соединения могут сохранить прежний маршрут. В Firewall → Diagnostics → States удалите только состояния тестового клиента и создайте новые подключения. Обоснование — порядок обработки правил и states.

Не допускайте обхода VPN при сбое

Важный момент: если выход выбранного трафика через WAN недопустим, одного VPN-правила недостаточно. По документации OPNsense при недоступном шлюзе правило может использовать маршрут по умолчанию.

Настройка Firewall → Settings → Advanced → Gateway Monitoring → Skip rules исключает правило с недоступным шлюзом. При её использовании непосредственно под VPN-правилом добавьте Block: те же источник, назначение, инверсия, протокол и семейство адресов, но без VPN-шлюза. Общее разрешение LAN оставьте ниже.

Это сочетание рассчитано на корректный мониторинг: после пропуска VPN-правила выбранный трафик попадёт под блокировку. Параметр глобальный — проверьте влияние на другие шлюзы. Основа схемы — описание Skip rules. Обязательно испытайте реальный обрыв туннеля.

Учтите DNS и IPv6

Если клиент использует DNS на OPNsense, дальнейшие запросы резолвера создаёт маршрутизатор. Клиентское правило LAN их не охватывает. Можно использовать DNS VPN-провайдера через туннель; для его частного адреса потребуется отдельное правило со шлюзом выше локальных исключений. См. раздел о DNS.

IPv4-политика не управляет IPv6. Настройте его отдельно, если VPN поддерживает IPv6. Для режима «только VPN» без поддержки IPv6 в туннеле запретите выбранным клиентам внешний IPv6 на firewall. При проверке учитывайте защищённый DNS браузера.

Проверяем результат

Настройки готовы. Теперь давайте убедимся, что они работают именно так, как мы задумали:

  1. Создайте новое соединение с тестового клиента. Проверьте внешний IPv4; при выборе по назначениям тестируйте адрес из VPN_TARGETS.
  2. Убедитесь, что остальные устройства продолжают использовать WAN.
  3. Проверьте локальные ресурсы, DNS и отдельно IPv6.
  4. Остановите VPN. При настроенной блокировке выбранный трафик должен прекратиться, остальной — продолжить работу.
  5. Восстановите туннель и повторите тест. При ошибке проверьте states, счётчики правил и захват пакетов на WAN и WG_VPN.

Подведём итоги

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

Начинайте с одного клиента и понятного адреса назначения. После проверки маршрута и поведения при сбое расширяйте список. Так легче отделить ошибки правил от проблем самого VPN.

Так же не забывайте о возможности задать вопросы в комментариях или Telegram канале. До связи!

Опубликовано вИнструкцииСетевые сервисы

Ваш комментарий будет первым

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *