Заворачиваем избранный трафик в VPN на Mikrotik
Задача: доступ к определенным ресурсам через VPN (L2TP+IPSEC / PPTP ). Можно сказать, что это ответвление от статьи "Установка Mikrotik CHR на VPS с CentOS 7 за 5 минут".
1. Подключаемся к нашему L2TP или PPTP-серверу с нашего Mikrotik
2. Подготовим Mangle-правило под себя:
- dst-address-list= RouteTrafficOutside — название address-list
- new-routing-mark= MarkToVPN — маркируем трафик меткой MarkToVPN
- src-address=10.10.17.0/24 — ваша локальная сеть из под которой вы собираетесь ходить на указанные в address-list ресурсы
3. Подготовим дополнительный маршрут по умолчанию:
- distance=2; тогда весь остальной трафик продолжить ходить по default-маршруту с distance 1, а избранные в address-list ресурсы — через l2tp-VPN
- gateway= l2tp-VPN — указываем наш l2tp-out или pptp-out до нашего VPN сервера
- routing-mark= MarkToVPN — указываем нашу метку
4. Наконец, подготовим список хостов, на которые мы хотим ходить через наш VPN, например такие:
5. А также, добавляем src-nat Masquarade для вашей сети через Интерфейс L2TP-out до вашего VPN
На этом инструкция подходит к концу. Вы можете расширить список хостов, которые по той или иной причине вы хотите посещать через VPN уже своими силами, копируя уже созданные записи и подставляя новые доменные имена или IP-адреса.
MikroTik NAT через VPN
Для того чтобы понять, какой кейс мы будем решать, необходима схема и её некоторое описание.
И так у нас есть два филиала, с внешними адресами, хотя достаточно и одного адреса публичного адреса с любой из сторон.
Если у вас только один “белый” IP адрес, то в этом случае вы ограниченны в выборе типа VPN соединения, вам потребуется выбирать из клиент-серверной реализации.
Опишем задачу, в сети R1 есть веб сервер с адресом 192.168.1.100 при попытках внешнего клиента установить соединение с сервером через маршрутизатор R1, он должен успешно установить соединение. Точно также если клиент попытается установить соединение с данным сервером через маршрутизатор R2, он должен сделать это также успешно.
В сети маршрутизатора R2 есть сервис SMTP 25 порт TCP с адресом 192.168.2.25, точно также, как и веб сервис, он должен быть доступен через оба маршрутизатора.
Давайте настроим первым делом маршрутизаторы, то, как вы это делаете обычно.
На R1
На R2
Мы не будем учитывать настройку фильтра firewall, это требует отдельной большой статьи, а то и курса, как минимум MTCNA. Я надеюсь, вы знаете, как надо настраивать firewall MikroTik.
Также нам необходимо настроить NAT. Настраиваем, как обычно, без каких либо излишеств.
На R1
На R2
src-nat не привел в примере, так как он может быть у вас разный, его отсутствие не будет сказываться на сетевую доступность сервисов. Вы должны самостоятельно сделать правило, как минимум masquerade.
Обратите внимание, что dst-nat у нас правила на обоих маршрутизаторах одинаковые, можно добавить ещё в фильтр dst-address, но тут всё зависит от конкретной реализации.
Конечно, нам необходимо настроить VPN, без какой-либо излишек без шифрования и прочего, вы сами должны определить для себя какой тип инкапсуляции и нужно ли вам шифрование. Возможно, что вы у провайдера берёте услугу L2VPN, то тогда у вас есть отдельный интерфейс, возможно в виде VLAN.
Создадим самый простой VPN на основе IP инкапсуляции.
На R1
На R2
Для удобства используем одинаковые имена интерфейсов.
Создали туннель и назначили на него IP адрес с сетью /30.
После всего прочего, нам необходимо настроить маршрутизацию, чтобы хосты разных сетей были доступны. Т.е. обеспечиваем IP связность.
На R1
На R2
На данный момент у вас должно заработать связность и хосты должны быть доступны по IP адресам.
И даже доступны сервисы находящиеся непосредственно в connected сетях маршрутизаторов, но только не сервисы, которые идут через dst-nat в другой филиал.
Прежде что-либо настроить нам надо разобраться почему не работать текущая схема.
Самая главная причина, в том, что когда от сервера приходит пакет в ответ на существующее соединение. Маршрутизатора R2 отправляет пакет через себя в интернет, а нам необходимо, чтобы он его доставил на R1. Также R2 отправляет его «в чём мать родила», без подмены адреса источника. Хотя подмена и не нужна, но в такой ситуации вы компрометируете свою внутреннюю сеть, как минимум перед провайдером.
Что делать?
Нам необходимо заставить маршрутизатор R2 отправить такие пакеты обратно в VPN на R1. А так как у нас зеркальная ситуация, то же самое будет происходить и на R1. Нам необходимо внести настройки на оба маршрутизатора.
Первым делом нам необходимо промаркировать все соединения, который поступают с VPN туннеля, но будет не все подряд, а только new, и только с адресов интернета. Так как скорее всего в этом VPN соединении проходит трафик между внутренними сетями, а нам необходимо строго определить тот трафик который приходить из интернета.
На R1
На R2
Я не буду в двадцатый раз, рассказать о том, что такое BOGON адреса, вы можете прочитать в нашем блоге много информации об этих адресах. Теперь, у нас все соединения который были противоположенным маршрутизатор перенаправлены через VPN c помощью dst-nat имеют имя R1-to-R2.
Далее нам необходимо всего лишь перенаправить весь трафик из локальной сети, в данном соединении обратно в VPN.
На R1
На R2
И последний манёвр нам необходимо создать именованную таблицу маршрутизации, которая бы отправляла трафик на противоположенный маршрутизатор.
На R1
На R2
И собственно всё, неважно какой у вас тип туннеля, хоть витая пара, хоть оптика или L2VPN от провайдера, главное чтобы на интерфейсе была адресация.
Настройка маршрутизации трафика через VPN в RouterOS
В качестве домашней точки доступа я использую маршрутизатор MikroTik hAP ac2. Я выбрал его из-за обилия настроек и возможности реализации таких сценариев которые недоступны его конкрурентам.
Один из таких сценариев — настройка автоматического соединение с некоторыми хостами через VPN.
Зачем это может быть нужно:
- Сайт недоступен из интернета. Например, он находится в корпоративной сети
- Вы не хотите чтобы провайдер знал что вы посещаете данный сайт
- У сайта есть ограничения на доступ из вашей локации. Spotify или Telegram
Итак, предположим что у вас уже есть настроенный роутер, вы приобрели доступ к VPN и настроили подключение к нему.
В моем случае используется сервер на Digital Ocean. Для поднятия собственного vpn сервера можно использовать установку в один клик
После настройки соединения с VPN, этот маршрут станет доступным на роутере, но трафик не будет направлен через данный интерфейс. Если мы хотим сделать чтобы весь трафик направлялся через VPN, для этого достаточно сделать интерфейс VPN маршрутом по умолчанию, предварительно удалив стандартный.
Второй вариант, как я уже писал выше, это направление через VPN трафика только до определенных заранее хостов.
Для этого нам необходимо:
- Создать в firewall лист адресов, трафик до которых будет маршрутизировать через VPN
- Добавить правило для маркировки нашего трафика определенной меткой
- Создать правило маршрутизации, чтобы пакеты помеченные меткой направлялись через интерфейс VPN
Добавляем лист адресов в firewall
Теперь у нас появился лист адресов, который мы назвали spotify
Создаём правило маркировки трафика
Мы создали правило, в котором определяем все обращения к хостам из списка 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 , это нужно для универсальности. В дальнейшем, когда появятся другие листы адресов, для них не придется создавать отдельные правила.
Настраиваем маршрутизацию маркированных пакетов
Мы создали правило, которое аналогичному тому что было в «первом сценарии», за исключением того что оно обрабатывает только пакеты которые помечены специальной меткой routing-mark=mark_vpn .
Разблокируем интернет с помощью Mikrotik и VPN: подробный туториал
В этом пошаговом руководстве я расскажу, как настроить Mikrotik, чтобы запрещённые сайты автоматом открывались через этот VPN и вы могли избежать танцев с бубнами: один раз настроил и все работает.
В качестве VPN я выбрал SoftEther: он настолько же прост в настройке как и RRAS и такой же быстрый. На стороне VPN сервера включил Secure NAT, других настроек не проводилось.
В качестве альтернативы рассматривал RRAS, но Mikrotik не умеет с ним работать. Соединение устанавливается, VPN работает, но поддерживать соединение без постоянных реконнектов и ошибок в логе Mikrotik не умеет.
Настройка производилась на примере RB3011UiAS-RM на прошивке версии 6.46.11.
Теперь по порядку, что и зачем.
1. Устанавливаем VPN соединение
В качестве VPN решения был выбран, конечно, SoftEther, L2TP с предварительным ключом. Такого уровня безопасности достаточно кому угодно, потому что ключ знает только роутер и его владелец.
Переходим в раздел interfaces. Сначала добавляем новый интерфейс, а потом вводим ip, логин, пароль и общий ключ в интерфейс. Жмем ок.
То же самое командой:
/interface l2tp-client
name=»LD8″ connect-to=45.134.254.112 user=»Administrator» password=»PASSWORD» profile=default-encryption use-ipsec=yes ipsec-secret=»vpn»
SoftEther заработает без изменения ipsec proposals и ipsec profiles, их настройку не рассматриваем, но скриншоты своих профилей, на всякий случай, автор оставил.
Для RRAS в IPsec Proposals достаточно изменить PFS Group на none.
Теперь нужно встать за NAT этого VPN сервера. Для этого нам нужно перейти в IP > Firewall > NAT.
Тут включаем masquerade для конкретного, или всех PPP интерфейсов. Роутер автора подключен сразу к трём VPN’ам, поэтому сделал так:
То же самое командой:
/ip firewall nat
chain=srcnat action=masquerade out-interface=all-ppp
2. Добавляем правила в Mangle
Первым делом хочется, конечно, защитить все самое ценное и беззащитное, а именно DNS и HTTP трафик. Начнем с HTTP.
Переходим в IP → Firewall → Mangle и создаем новое правило.
В правиле, Chain выбираем Prerouting.
Если перед роутером стоит Smart SFP или еще один роутер, и вы хотите к нему подключаться по веб интерфейсу, в поле Dst. Address нужно ввести его IP адрес или подсеть и поставить знак отрицания, чтобы не применять Mangle к адресу или к этой подсети. У автора стоит SFP GPON ONU в режиме бриджа, таким образом автор сохранил возможность подключения к его вебморде.
По умолчанию Mangle будет применять свое правило ко всем NAT State’ам, это сделает проброс порта по вашему белому IP невозможным, поэтому в Connection NAT State ставим галочку на dstnat и знак отрицания. Это позволит нам отправлять по сети исходящий трафик через VPN, но все еще прокидывать порты через свой белый IP.
Далее на вкладке Action выбираем mark routing, обзываем New Routing Mark так, чтобы было в дальнейшем нам понятно и едем дальше.
То же самое командой:
/ip firewall mangle
add chain=prerouting action=mark-routing new-routing-mark=HTTP passthrough=no connection-nat-state=!dstnat protocol=tcp dst-address=!192.168.1.1 dst-port=80
Теперь переходим к защите DNS. В данном случае нужно создать два правила. Одно для роутера, другое для устройств подключенных к роутеру.
Если вы пользуетесь встроенным в роутер DNS, что делает и автор, его нужно тоже защитить. Поэтому для первого правила, как и выше мы выбираем chain prerouting, для второго же нужно выбрать output.
Output это цепь которые использует сам роутер для запросов с помощью своего функционала. Тут все по аналогии с HTTP, протокол UDP, порт 53.
То же самое командами:
/ip firewall mangle
add chain=prerouting action=mark-routing new-routing-mark=DNS passthrough=no protocol=udp
add chain=output action=mark-routing new-routing-mark=DNS-Router passthrough=no protocol=udp dst-port=53
3. Строим маршрут через VPN
Переходим в IP → Routes и создаем новые маршруты.
Маршрут для маршрутизации HTTP по VPN. Указываем название наших VPN интерфейсов и выбираем Routing Mark.
На этом этапе вы уже почувствовали, как ваш оператор перестал встраивать рекламу в ваш HTTP трафик.
То же самое командой:
/ip route
add dst-address=0.0.0.0/0 gateway=LD8 routing-mark=HTTP distance=2 comment=HTTP
Ровно так же будут выглядеть правила для защиты DNS, просто выбираем нужную метку:
Тут вы ощутили, как ваши DNS запросы перестали прослушивать. То же самое командами:
/ip route
add dst-address=0.0.0.0/0 gateway=LD8 routing-mark=DNS distance=1 comment=DNS
add dst-address=0.0.0.0/0 gateway=LD8 routing-mark=DNS-Router distance=1 comment=DNS-Router
Ну под конец, разблокируем Rutracker. Вся подсеть принадлежит ему, поэтому указана подсеть.
Вот настолько было просто вернуть себе интернет. Команда:
/ip route
add dst-address=195.82.146.0/24 gateway=LD8 distance=1 comment=Rutracker.Org
Ровно этим же способом, что и с рутрекером вы можете прокладывать маршруты корпоративных ресурсов и других заблокированных сайтов.
Автор надеется, что вы оцените удобство захода на рутрекер и корпоративный портал в одно и тоже время не снимая свитер.