Архив

Настройка маршрутизации трафика через VPN в RouterOS

В качестве домашней точки доступа я использую маршрутизатор MikroTik hAP ac2. Я выбрал его из-за обилия настроек и возможности реализации таких сценариев которые недоступны его конкрурентам.

mikrotik hap ac2

Один из таких сценариев - настройка автоматического соединение с некоторыми хостами через VPN.

Зачем это может быть нужно:

  • Сайт недоступен из интернета. Например, он находится в корпоративной сети
  • Вы не хотите чтобы провайдер знал что вы посещаете данный сайт
  • У сайта есть ограничения на доступ из вашей локации. Spotify или Telegram

Итак, предположим что у вас уже есть настроенный роутер, вы приобрели доступ к VPN и настроили подключение к нему.

В моем случае используется сервер на Digital Ocean. Для поднятия собственного vpn сервера можно использовать установку в один клик

worked vpn on mikrotik

После настройки соединения с VPN, этот маршрут станет доступным на роутере, но трафик не будет направлен через данный интерфейс. Если мы хотим сделать чтобы весь трафик направлялся через VPN, для этого достаточно сделать интерфейс VPN маршрутом по умолчанию, предварительно удалив стандартный.

/ip firewall nat
add action=masquerade chain=srcnat out-interface=vpn-digitalocean

Второй вариант, как я уже писал выше, это направление через VPN трафика только до определенных заранее хостов.

Для этого нам необходимо:

  • Создать в firewall лист адресов, трафик до которых будет маршрутизировать через VPN
  • Добавить правило для маркировки нашего трафика определенной меткой
  • Создать правило маршрутизации, чтобы пакеты помеченные меткой направлялись через интерфейс VPN

Добавляем лист адресов в firewall

/ip firewall address-list
add address=104.154.127.47 list=spotify
add address=78.31.8.0/21 list=spotify

Теперь у нас появился лист адресов, который мы назвали spotify

spotify list

Создаём правило маркировки трафика

/ip firewall mangle
add action=mark-routing \
chain=prerouting \
comment="Mark Spotify" \
dst-address-list=spotify \
new-routing-mark=mark_vpn \
passthrough=no \
src-address=10.0.0.0/24

Мы создали правило, в котором определяем все обращения к хостам из списка spotify (dst-address-list=spotify) и довляем к ним метку mark_vpn (new-routing-mark=mark_vpn). src-address=10.0.0.0/24 указан для маршрутизации обращений из нашей локальной сети, возможно у вас другие диапазоны, например 192.168.0.0/24, тогда нужно исправить.

Параметр passthrough=no нужен для уменьшения потребляемых ресурсов при обработке трафика, подробнее в документации.

Для названия метки я выбрал mark_vpn, это нужно для универсальности. В дальнейшем, когда появятся другие листы адресов, для них не придется создавать отдельные правила.

Настраиваем маршрутизацию маркированных пакетов

/ip firewall nat
add action=masquerade chain=srcnat out-interface=vpn-digitalocean routing-mark=mark_vpn

Мы создали правило, которое аналогичному тому что было в "первом сценарии", за исключением того что оно обрабатывает только пакеты которые помечены специальной меткой routing-mark=mark_vpn.

Дополнительная информация