Зачем нужно выборочное VPN на MikroTik
Когда весь интернет-трафик маршрутизируется через VPN, это может приводить к снижению скорости, задержкам и проблемам с доступом к локальным ресурсам. Выборочное туннелирование (policy-based routing) позволяет направлять в VPN только те сайты, которые требуют этого: например, для обхода гео-блокировок, доступа к корпоративным ресурсам или обеспечения безопасности при работе с чувствительными данными.
MikroTik RouterOS предоставляет гибкие инструменты для реализации такой схемы. Основная идея — использовать списки адресов (address-list), правила mangle для маркировки трафика и отдельную таблицу маршрутизации. Это позволяет точно контролировать, какой трафик идет через VPN, а какой — напрямую через основного провайдера.
Такой подход особенно полезен для офисов и домашних сетей, где нужно совмещать высокую скорость для обычного серфинга с безопасностью VPN для конкретных сервисов.
Обзор протоколов VPN, поддерживаемых MikroTik
MikroTik RouterOS поддерживает несколько протоколов VPN, каждый из которых имеет свои особенности:
- L2TP/IPsec — комбинация туннеля L2TP и шифрования IPsec. Широко поддерживается всеми операционными системами, прост в настройке, обеспечивает надежное шифрование. Рекомендуется для большинства сценариев.
- OpenVPN — гибкий протокол с открытым исходным кодом, работает через SSL/TLS. В MikroTik поддерживается только TCP, что снижает производительность по сравнению с UDP.
- WireGuard — современный протокол, доступен в RouterOS v7+. Отличается высокой производительностью и простотой конфигурации.
- PPTP — устаревший протокол, легко взламывается, не рекомендуется для защиты данных.
- SSTP — работает через TCP-порт 443, хорошо маскируется под HTTPS, но требователен к ресурсам CPU.
- GRE и EoIP — используются для site-to-site соединений, не обеспечивают шифрование по умолчанию.
Для выборочного туннелирования чаще всего используют WireGuard или L2TP/IPsec, так как они обеспечивают хороший баланс безопасности и производительности.
Подготовка MikroTik: базовые настройки и требования
Перед настройкой выборочного VPN убедитесь, что ваш MikroTik соответствует минимальным требованиям:
- Версия RouterOS: для WireGuard нужна v7+, для L2TP/IPsec достаточно v6.45+. Рекомендуется использовать последнюю стабильную версию.
- Лицензия: большинство функций VPN требуют Level 4 или выше. PPTP и L2TP доступны с Level 3.
- Аппаратное обеспечение: для интенсивного шифрования желательны модели с многоядерными процессорами (RB4011, CCR). Для нескольких VPN-соединений рекомендуется не менее 256 МБ ОЗУ.
- Сеть: наличие публичного IP-адреса (или DDNS) и правильно настроенных правил firewall.
Также важно выполнить базовую настройку безопасности: сменить пароль администратора, обновить прошивку, настроить DNS и NTP. Точное время критично для работы IPsec и других протоколов, использующих сертификаты.
Создание списка сайтов для VPN: address-list и динамическое обновление
Для выборочного туннелирования необходимо определить, какие сайты будут направляться через VPN. В MikroTik это делается с помощью address-list — списка IP-адресов или доменных имен.
Создать список можно вручную через WebFig или командой:
/ip firewall address-list add list=vpnlist address=example.comОднако IP-адреса сайтов могут меняться. MikroTik автоматически разрешает доменные имена в IP-адреса при добавлении в address-list, но для динамического обновления можно использовать скрипты или встроенный механизм: если указать домен, RouterOS будет периодически обновлять его IP.
Для более сложных сценариев можно использовать внешние списки (например, списки заблокированных сайтов) и импортировать их через скрипты. Также можно группировать сайты по категориям, создавая несколько списков с разными именами.
Настройка таблицы маршрутизации и маршрута для VPN
Для направления трафика в VPN используется отдельная таблица маршрутизации. В RouterOS v7 таблицы создаются в разделе Routing → Tables. В v6 можно использовать маршруты с метками (routing-mark).
Пример создания таблицы в v7:
/routing table add name=wg-my fibЗатем добавляется маршрут по умолчанию в эту таблицу, указывающий на VPN-интерфейс:
/ip route add dst-address=0.0.0.0/0 gateway=wireguard1 routing-table=wg-myВажно, чтобы маршрут в основной таблице оставался для обычного трафика. Если используется несколько VPN-интерфейсов, для каждого создается своя таблица.
Маркировка трафика через mangle: правила prerouting и forward
Ключевой элемент выборочного туннелирования — правила mangle, которые маркируют пакеты, направляемые в VPN. Обычно используется цепочка prerouting, чтобы пометить трафик до принятия решения о маршрутизации.
Пример правила:
/ip firewall mangle add chain=prerouting dst-address-list=vpnlist action=mark-routing new-routing-mark=wg-myВажно указать src-address, чтобы не маркировать трафик, исходящий от самого роутера (например, DNS-запросы). Обычно это локальная подсеть, например 192.168.88.0/24.
Также необходимо разрешить NAT для VPN-интерфейса, если используется маскарадинг:
/ip firewall nat add chain=srcnat out-interface=wireguard1 action=masqueradeЕсли трафик не проходит, проверьте, не блокирует ли его fasttrack. Fasttrack может игнорировать правила mangle, поэтому его нужно отключить для маркируемого трафика.
Пошаговая настройка WireGuard для выборочного VPN
WireGuard — один из самых простых и быстрых протоколов для выборочного туннелирования. Рассмотрим настройку на примере RouterOS v7.
- Создайте интерфейс WireGuard:
/interface wireguard add name=wireguard1 listen-port=13231 mtu=1420- Настройте peer (удаленный сервер):
/interface wireguard peers add interface=wireguard1 public-key="..." allowed-address=0.0.0.0/0 endpoint-address=11.22.33.44 endpoint-port=13231 persistent-keepalive=25s- Создайте таблицу маршрутизации:
/routing table add name=wg-my fib- Добавьте маршрут по умолчанию в таблицу wg-my:
/ip route add dst-address=0.0.0.0/0 gateway=wireguard1 routing-table=wg-my- Создайте address-list с нужными сайтами:
/ip firewall address-list add list=vpnlist address=example.com- Добавьте правило mangle:
/ip firewall mangle add chain=prerouting src-address=192.168.88.0/24 dst-address-list=vpnlist action=mark-routing new-routing-mark=wg-my- Настройте NAT:
/ip firewall nat add chain=srcnat out-interface=wireguard1 action=masqueradeПосле этого трафик к указанным сайтам пойдет через WireGuard, остальной — напрямую.
Настройка L2TP/IPsec для выборочного VPN
L2TP/IPsec — более традиционный вариант, который поддерживается всеми устройствами. Для выборочного туннелирования настройка аналогична, но с дополнительными шагами для IPsec.
- Настройте IPsec профиль и proposal:
/ip ipsec profile add name=L2TP-IPsec hash-algorithm=sha256 enc-algorithm=aes-256-cbc dh-group=modp2048
/ip ipsec proposal add name=L2TP-Proposal auth-algorithms=sha256 enc-algorithms=aes-256-cbc pfs-group=modp2048- Создайте IPsec peer:
/ip ipsec peer add name=L2TP-Peer address=0.0.0.0/0 profile=L2TP-IPsec exchange-mode=main nat-traversal=yes secret="ВашСильныйКлюч"- Настройте L2TP сервер:
/interface l2tp-server server set enabled=yes- Создайте пользователя:
/ppp secret add name=user password=pass service=l2tp- Создайте интерфейс L2TP client (если MikroTik выступает клиентом):
/interface l2tp-client add name=l2tp-out connect-to=11.22.33.44 user=user password=pass- Далее — таблица маршрутизации, mangle и NAT, как в случае с WireGuard, только gateway будет l2tp-out.
Не забудьте открыть порты 1701, 500, 4500 и разрешить протокол ipsec-esp в firewall.
Решение типичных проблем: трафик не идет, таймауты, fasttrack
При настройке выборочного VPN часто возникают проблемы. Рассмотрим самые распространенные.
Трафик не маркируется — проверьте, что правило mangle находится в цепочке prerouting и указан правильный src-address. Счетчики пакетов должны увеличиваться. Если счетчик на prerouting растет, а на forward — нет, возможно, трафик обрабатывается fasttrack.
Fasttrack — функция, которая ускоряет обработку пакетов, но игнорирует mangle. Отключите fasttrack для нужного трафика или полностью, если не критично.
Проблемы с rp-filter — если установлен strict, пакеты могут отбрасываться. Измените на loose:
/ip settings set rp-filter=looseСмена IP-адресов сайтов — если сайт перестал открываться, проверьте, что в address-list актуальный IP. MikroTik обновляет домены автоматически, но с задержкой.
Маршрут не используется — убедитесь, что маршрут с routing-mark добавлен и имеет корректный gateway. Также проверьте, что интерфейс VPN активен (WireGuard peer имеет handshake).
NAT — если сайт открывается, но не грузится контент, возможно, не настроен masquerade для VPN-интерфейса.
Продвинутые сценарии: несколько VPN, резервирование, динамические списки
Выборочное туннелирование можно расширять для более сложных задач.
Несколько VPN-серверов — можно создать несколько таблиц маршрутизации и разные address-list, чтобы разные группы сайтов шли через разные VPN. Например, один VPN для работы, другой — для личного использования.
Резервирование — если VPN-сервер недоступен, можно настроить failover: добавить резервный маршрут с большей дистанцией в той же таблице.
Динамические списки — можно автоматически обновлять address-list из внешних источников с помощью скриптов. Например, скачивать список заблокированных сайтов и добавлять их в VPN-список.
Исключения — иногда нужно, чтобы определенные сайты не шли через VPN, даже если они в списке. Для этого можно создать отдельный address-list с исключениями и добавить правило mangle с action=passthrough или использовать более специфичные правила.
Эти методы позволяют гибко управлять интернет-трафиком в сети.
Вопросы и ответы
Почему не работает выборочный VPN на MikroTik, если счетчик mangle на prerouting растет, а на forward — нет?
Это типичная ситуация, когда включен fasttrack. Fasttrack обрабатывает пакеты в обход цепочки forward, поэтому правила mangle не применяются. Решение: отключите fasttrack для маркируемого трафика или полностью. Также проверьте, что правило mangle находится в цепочке prerouting и указан правильный src-address (локальная подсеть). Если счетчик на prerouting растет, а на forward нет, пакеты, скорее всего, уходят через fasttrack.
Как добавить домен в address-list, чтобы MikroTik автоматически обновлял его IP?
Достаточно добавить домен в address-list командой:
/ip firewall address-list add list=vpnlist address=example.comMikroTik автоматически разрешит домен в IP-адрес и будет периодически обновлять его. Однако учтите, что обновление происходит не мгновенно, и если сайт сменит IP, может потребоваться время. Для более точного контроля можно использовать скрипты, которые периодически перечитывают список доменов.
Нужен ли статический IP-адрес для настройки VPN-сервера на MikroTik?
Статический IP желателен, но не обязателен. Если у вас динамический IP, можно использовать сервисы DDNS (например, no-ip.com). MikroTik поддерживает DDNS-клиент, который автоматически обновляет записи. Для VPN-клиента это не критично, так как он сам инициирует соединение. Для сервера важно, чтобы клиенты могли найти его по имени или IP.
Какой протокол VPN лучше всего подходит для выборочного туннелирования на MikroTik?
Для выборочного туннелирования лучше всего использовать WireGuard (RouterOS v7+) благодаря высокой производительности и простоте настройки. Если нужна максимальная совместимость с клиентскими устройствами, выбирайте L2TP/IPsec. OpenVPN в MikroTik работает только по TCP, что снижает скорость, но может быть полезен для обхода фильтров. PPTP использовать не рекомендуется из-за слабой безопасности.
Как настроить несколько VPN-серверов для разных групп сайтов?
Создайте несколько таблиц маршрутизации (например, wg-work и wg-personal). Для каждой таблицы добавьте свой маршрут по умолчанию через соответствующий VPN-интерфейс. Затем создайте отдельные address-list (например, work-sites и personal-sites) и добавьте правила mangle для каждой группы, указывая разные new-routing-mark. Так трафик к разным сайтам будет идти через разные VPN.
Что делать, если сайт из списка не открывается через VPN, хотя маршрут и mangle настроены?
Проверьте несколько моментов:
- Активен ли VPN-интерфейс (есть ли handshake у WireGuard).
- Настроен ли NAT (masquerade) для VPN-интерфейса.
- Не блокирует ли fasttrack трафик.
- Правильно ли указан src-address в правиле mangle.
- Не конфликтует ли IP-адрес сайта с локальной сетью.
- Попробуйте временно отключить rp-filter (установить loose).
Если ничего не помогает, проверьте логи и счетчики пакетов на всех правилах.