Добавить в корзинуПозвонить
Найти в Дзене
knowledge base

VPN сервер (Client-to-Site) на базе RouterOS от mikrotik (протоколы L2TP, SSTP, OpenVPN).

Client-to-Site VPN - это сервис для подключения по VPN конечных пользователей, например в случае, если требуется обеспечить сотрудникам защищённый доступ к ресурсам компании, через небезопасные сети. В этом материале затронем следующие вопросы: Как настроить клиента open vpn на android/ios расскажу в отдельном материале (к сожалению в новых версиях мобильных операционных систем выпилили поддержку l2tp). Легенда такая: Что будем делать: Схема стенда: Для каждой роли выделим отдельную подсеть, и суммарный список подсетей будет выглядеть так: Все нижеописанные настройки справедливы для RouterOS версий 6 и 7, с той лишь разницей, что в версии 7 для open VPN можно использовать UDP, что значительно ускорит VPN соединение, я в этом материале буду настраивать роутер с версией ROS 7.18.2 Домашний роутер по сути м.б. любым, главное на нем должна работать трансляция адресов srcNAT для внутренних подсетей, а для своего удобства в качестве домашнего роутера возьму mikrotik chr. Настройка домашнего
Оглавление

Введение

Client-to-Site VPN - это сервис для подключения по VPN конечных пользователей, например в случае, если требуется обеспечить сотрудникам защищённый доступ к ресурсам компании, через небезопасные сети.

В этом материале затронем следующие вопросы:

  • настройка роутера mikrotik в качестве VPN сервера (протоколы L2TP, SSTP, Open VPN), при режиме фильтра роутера в качестве "нормально закрытого";
  • настройка уровней доступа, при подключении к сетям через VPN, по ролям (админы видят одно, пользователи другое);
  • настройка VPN клиентов на windows 10/11

Как настроить клиента open vpn на android/ios расскажу в отдельном материале (к сожалению в новых версиях мобильных операционных систем выпилили поддержку l2tp).

Легенда такая:

  • в офисе две подсети, серверная и пользовательская;
  • из серверной подсети настроен полный доступ в пользовательскую и наоборот;
  • в серверной сети стоит сервер, на котором подняты следующие службы - AD, DNS, IIS, shared folders (имя сервера S1, имя домена LABS.LOCAL);
  • к серверу можно подключиться по RDP;
  • в пользовательской сети стоит пользовательская виртуальная машина (имя машины VM1, и она в домене LABS.LOCAL), на которую подключаться по RDP.

Что будем делать:

  • создадим три роли пользователей VPN с различными правами доступа к сети;
  • первая роль (назовём её min-services) позволит после подключения к VPN, заходить по RDP на компьютеры в пользовательской подсети, все остальные службы и подсети будут закрыты;
  • вторая роль (назовём её all-services) позволит после подключения к VPN, использовать контроллер домена S1.LABS.LOCAL в качестве DNS сервера, подключаться в WEB серверу по порту tcp 80, проходить аутентификацию на контроллере домена, и иметь доступ к общим папкам;
  • третья роль (назовём её admins) позволит после подключения к VPN, заходить по RDP на контроллер домена, подключаться к пользовательским ПК по RDP, и заходить через winbox или ssh на роутер по внутреннему адресу;

Схема стенда:

Для каждой роли выделим отдельную подсеть, и суммарный список подсетей будет выглядеть так:

-2

Все нижеописанные настройки справедливы для RouterOS версий 6 и 7, с той лишь разницей, что в версии 7 для open VPN можно использовать UDP, что значительно ускорит VPN соединение, я в этом материале буду настраивать роутер с версией ROS 7.18.2

Домашний роутер по сути м.б. любым, главное на нем должна работать трансляция адресов srcNAT для внутренних подсетей, а для своего удобства в качестве домашнего роутера возьму mikrotik chr. Настройка домашнего роутера максимально примитивна, нам нужно только задать адреса на интерфейсах и включить трансляцию.

Вот конфиг домашнего роутера:

/interface ethernet

set [ find default-name=ether3 ] comment="to ISP" disable-running-check=no name=ether1

set [ find default-name=ether1 ] comment="to local NET" disable-running-check=no name=ether2

set [ find default-name=ether2 ] comment=MNDP disable-running-check=no name=ether3

/ip address

add address=1.1.1.2/24 interface=ether1 network=1.1.1.0

add address=192.168.5.1/24 interface=ether2 network=192.168.5.0

/ip dhcp-client

add interface=ether1

/ip firewall nat

add action=masquerade chain=srcnat out-interface=ether1 src-address=192.168.5.0/24

/system identity

set name=HOME-ROUTER

/system note

set show-at-login=no

Сделаем базовые настройки роутера и фильтра на маршрутизаторе LABS-CHR-GW1, настройки делаем как в этих статьях - "Базовые настройки оборудования Mikrotik" и "Базовая настройка Firewall в Mikrotik".

Допущение тут такое - серверная подсеть пусть будет админской.

SrcNAT

Настроим srcNAT для всех внутренних подсетей на LABS-CHR-GW1.

Для этого все внутренние подсети соберём в группу srcNAT, заходим в меню IP=>Firewall, и на вкладке "Address Lists" нажимаем кнопку "+"

в появившемся окне, в поле "List" пишем название нашего списка адресов, в поле "Address" укажем подсеть, нажимаем "OK" или "Apply"

-3

Аналогично добавим вторую внутреннюю подсеть нашего роутера в список srcNAT, созданные списки отобразятся на вкладке "Address Lists"

-4

Включим NAT трансляцию, в меню "Firewall" переходим на вкладку "NAT", нажимаем кнопку "+".

В появившемся окне, на вкладке "General":

  • в поле "Chain" выберем цепочку "srcnat"
  • в поле "Src. Address List" выбираем созданный нами список адресов "srcNAT"
  • в поле "Out. Interface" выбираем из списка интерфейс, который смотрит на провайдера (в нашем случае это ether1)
-5

На вкладке "Action":

- в поле "Action" выбираем действие "src-nat"

- в поле "To Addresses" указываем адрес на нашем внешнем интерфейсе, через который пойдет NAT трансляция

и нажимаем "OK"

-6

Теперь нужно разрешить прохождение "натированного" трафика через фильтр (т.к. у нас "нормально закрытый" фильтр, то весть трафик, который не разрешён - блокируется).

Я делаю это так: создаю правило фильтра в цепочке forward, и разрешаю для группы адресов srcNAT прохождение трафика через интерфейс, который смотрит на провайдера.

Заходим в меню "IP=>Firewall", на вкладке "Filter Rules" нажимаем кнопку "+"

Вкладка "General"

  • цепочка - "forward"
  • "Src. Address List" - srcNAT
  • "Out. Interface" - ether1
-7

Вкладка "Action"

  • "Action" - accept

Комментарий - "srcNAT"

Созданное правило добавится как самое нижнее в списке, и т.к. после базовой настройки firewall наш межсетевой экран работает в режиме "нормально закрытого" фильтра (проще говоря блокирует всё, что явно не разрешено) и нижние правила блокируют весь трафик, то нам надо созданное правило поднять выше правил блокировки, просто зажимаем правой кнопкой мыши наше правило, перемещаем его на 2 позиции вверх и отпускаем ПКМ.

На этом настройка srcNAT для локальных подсетей закончена.

Настройка VPN профилей.

Когда VPN клиент подключается к VPN серверу, то на стороне сервера и клиента создаются виртуальные VPN интерфейсы для конкретно этого подключения, на эти интерфейсы назначаются IP адреса, в соответствии с заданными настройками, тип этих интерфейсов (l2tp, sstp, ovpn), а так же механизмы шифрования трафика между созданными виртуальными интерфейсами определяются на уровне настроек сервера.

Профиль min-services.

Для этого профиля по IP плану у нас выбрана подсеть 192.168.101.0/24, по нашему ТЗ, пользователи, к которым применён этот профиль, могут подключиться к любым хостам в пользовательской сети 172.16.1.0/24 по протоколу RDP (порт tcp 3389).

Создадим правило в фильтре (заходим в меню "IP=>Firewall", на вкладке "Filter Rules" нажимаем кнопку "+"):

Вкладка "General"

  • цепочка - "forward" (т.к. трафик разрешаем между сетями)
  • "Src. Address" - 192.168.101.0/24 (подключение будет из VPN сети)
  • "Dst. Address" - 172.16.1.0/24 (подключаемся в пользовательскую подсеть)
  • "Protocol" - 6 (tcp)
  • "Dst. Port" - 3389
-8

Вкладка "Action"

  • "Action" - accept

Комментарий "VPN Min-Services (192.168.101.0/24=>172.16.1.0/24)"

Выставляем правило выше правил Drop All

Создадим IP пул из которого наш микрот будет раздавать ip адреса клиентам, заходим в меню "IP=>Pool" и в появившемся окне нажимаем кнопку "+", откроется меню создания IP пула:

  • в поле Name задаём имя пула (я стараюсь давать краткие, но информативные имена)
  • в поле Addresses задаём диапазон адресов в пуле, задаётся он через тире (я обычно делаю диапазон с 51 по 240 адреса)
-9

Теперь, когда предварительные работы проделаны, создадим сам РРР профиль, переходим в меню "РРР", на вкладку "Profiles", и нажимаем кнопку "+", появится меню создания профиля:

Вкладка "General"

  • Поле "Name" - задаём имя профиля
  • Поле "Local Addresses" - задаём адрес виртуального интерфейса на сервере, тут достаточно спорная настройка, требующая пояснения - можно сделать отдельный пул для адресов серверных интерфейсов, и тогда, при подключении клиентов, у серверных виртуальных интерфейсов будут разные IP адреса, т.к. они будут выдаваться из пула, но нет ошибки в том, чтобы задать здесь единый IP адрес, тогда при множестве подключенных клиентов, будет создано множество виртуальных интерфейсов VPN, которые будут иметь один адрес, все VPN соединения изолированы, и имеют тип point-to-point, соответственно адреса интерфейсов на линии VPN будут с маской /32, конфликтов между соединениями не будет. Я обычно ставлю единый адрес для серверных интерфейсов, в нашем примере это будет 192.168.101.1
  • поле "Remote Addresses" - тут выбираем наш пул, созданный для данного профиля

Остальные параметры оставляем по умолчанию, но тут есть интересный с практической точки зрения параметр - в поле DNS Server, можно указать адреса DNS серверов, которые будут назначены на клиентском виртуальном VPN интерфейсе, и например если передать адрес контроллера домена, и разрешить DNS трафик, то это позволит на подключившихся ПК разрешать внутренние доменные имена (мы задействуем этот параметр при создании других профилей).

-10

Вкладка "Protocols"

тут можно всякое включить\выключить, правила такие:

  • "no" - параметр выключен и не используется
  • "yes" - параметр можно использовать, но если клиент не поддерживает параметр, то можно подключиться и без него
  • "required" - параметр д.б. обязательно задействован, если клиент параметр не поддерживает, он не сможет подключиться

Соответственно отключаем IPv6, MPLS, сжатие, и включаем обязательное шифрование

-11

Вкладка "Limits"

На этой вкладке есть любопытный параметр Only One (по умолчанию он выключен), включив его мы ограничим пользователей только одной vpn сессией, т.е. нельзя будет подключиться по ВПН с нескольких устройств под одним пользователем, но часто бывает, что сессии пользователей зависают, т.е. если кто то круглосуточно сидит подключённым к впн, на провайдерской линии так или иначе случаются разрывы в течении дня, и клиент периодически отваливается от ВПН, и автоматом переподключается, из-за этого впн сессии бывают зависают, т.е. на роутере будет видно,что пользователь как бы подключён к ВПН, а по факту подключения нет, и если такой пользователь, с зависшей сессией попробует переподключиться к ВПН, то создастся другая сессия, в рамках которой будет выдан новый IP. Старую сессию не всегда можно удалить, она может восстанавливаться, т.к. в connection трекере будет висеть соответствующее соединение, в таких случаях помогает перезагрузка роутера, я рекомендую хотя бы раз в месяц перезагружать роутер, чтобы сбрасывать зависшие сессии. Так вот, если мы включим настройку Only One, и у какого то пользователя зависнет сессия, то переподключиться он не сможет, т.к. создание второй сессии будет под запретом.

На этой вкладке есть ещё параметры, управляющие временем сессий и временем простоя, но я их не задействовал (в лабораторных условиях посмотрю их действие и позже дополню статью).

-12

На вкладке "Queue" можно привязать пользовательские сессии к какй либо очереди.

На вкладке "Scripts" можно добавить скрипты, которые будут отрабатывать в момент подключения пользователей - поле "On Up", и в момент отключения пользователей - поле On Down, это полезная возможность можно сделать скрипты, которые будут уведомлять администратора или безопасника по почте, о том, что пользователь подключился по ВПН или отключился. Чтобы не перегружать эту статью, настройку mikrotik для взаимодействия с почтовыми серверами, и создание скриптов для уведомлений о подключении по ВПН вынесу в отдельный материал.

Нажимаем ОК, и первый профиль готов.

Профиль all-services

Для этого профиля по IP плану у нас выбрана подсеть 192.168.102.0/24, по нашему ТЗ, пользователи, к которым применён этот профиль, могут использовать контроллер домена S1.LABS.LOCAL в качестве DNS сервера, подключаться в WEB серверу по порту tcp 80, проходить аутентификацию на контроллере домена, и иметь доступ к общим папкам (сервер для всех ролей у нас один, это - S1.LABS.LOCAL);

Мы будем настраивать доступ из подсети VPN 192.168.102.0/24 в серверную подсеть 10.254.1.0/24, но не полностью, а только для определённых портов, связанных с соответствующим сервисом, к которому даём доступ.

Определимся с портами, которые надо открыть :

  • 53 udp - DNS
  • 80 tcp - Web (HTTP)
  • 88 tcp и udp - для Kerberos авторизации
  • 123 udp - служба NTP
  • 137 udp - для файлового сервера
  • 139 tcp - для File Replication Service между контроллерами домена, а так же для файлового сервера.
  • 138 udp - для File Replication Service между контроллерами домена, а так же для файлового сервера.
  • 389 tcp и udp - для LDAP запросов от клиента к серверу
  • 636 tcp - для LDAPS запросов от клиента к серверу
  • 445 tcp и udp - для File Replication Service
  • 464 tcp и udp - для смены пароля Kerberos, а так же для файлового сервера.
  • 3268 tcp - для доступа к Global Catalog от клиента к контроллеру
  • 3269 tcp - для доступа к Global Catalog от клиента к контроллеру (SSL)

Открываем выше перечисленные порты для VPN подсети all-services в фильтре, я сделаю 2 правила, одно для tcp портов, второе для udp портов (заходим в меню "IP=>Firewall", на вкладке "Filter Rules" нажимаем кнопку "+"):

Для TCP портов

Вкладка "General"

  • цепочка - "forward"
  • "Src. Address" - 192.168.102.0/24
  • "Dst. Address" - 10.254.1.0/24 (подключаемся к серверной подсети)
  • "Protocol" - 6 (tcp)
  • "Dst. Port" - 80,88,139,389,636,445,464,3268,3269 (можно перечислять через запятую)
-13

Вкладка Action

  • Action - accept

Комментарий - "VPN All-Services (192.168.102.0/24=>10.254.1.0/24) TCP"

Для UDP портов

Вкладка "General"

  • цепочка - "forward"
  • "Src. Address" - 192.168.102.0/24
  • "Dst. Address" - 10.254.0/24
  • "Protocol" - udp
  • "Dst. Port" - 53,88,123,138,138,389,445,464
-14

Вкладка "Action"

  • Action - accept

Комментарий - "VPN All-Services (192.168.102.0/24=>10.254.1.0/24) UDP"

Выставляем оба эти правила выше правил "Drop All"

Создадим IP пул для профиля

-15

Создадим РРР профиль (меню "РРР", вкладка "Profiles", кнопка "+"):

На вкладке "General" первые три поля заполняем аналогично, как и для профиля min-services, но с учётом новой подсети, в поле DNS Server укажем адрес нашего контроллера домена, чтобы клиенты подключившись, могли разрешать имена хостов в доменной зоне нашего домена AD

-16

На вкладке "Protocols" выставляем параметры аналогичные профилю min-services, и нажимаем "OK".

Профиль admins

По ТЗ админы после подключения к ВПН могут заходить по RDP на контроллер домена, и на пользовательские ПК, а так же заходить через winbox или ssh на роутер по внутреннему адресу;

Соответственно для админской сети ВПН надо открыть порт 3389 в подсети пользователей и серверов, открыть порты 22 (ssh) и 8291 (winbox) на сам роутер.

Второе условие решается просто, при базовой настройке, мы сделали админскую группу "admins" (условились, что админская подсеть - серверная сетка), и дали этой группе доступ на роутер по портам 22 и 8291.

Соответственно для доступа к роутеру из под админской ВПН сети, нам достаточно включить её в группу admins, переходим на вкладку Address Lists, нажимаем кнопку "+":

  • в поле "List" из выпадающего списка выбираем группу "admins"
  • в поле "Address" вписываем нашу админскую ВПН подсеть (192.168.100.0/24)
-17

Доступ по RDP в две сети сделаем одним правилом, для этого создадим ещё одну группу адресов, назовём её "Connected-Networks", и включим в неё серверную и пользовательскую подсети.

На вкладке "Address Lists", нажимаем кнопку "+":

  • в поле "List" впишем название "Connected-Networks"
  • в поле "Address" вписываем подсеть для серверов
-18

Аналогичным образом добавим в эту же группу пользовательскую подсеть.

Итого у нас получились следующие группы адресов

-19

Затем на вкладке "Filter Rules" создадим новое правило

Вкладка "General"

  • цепочка - "forward"
  • "Src. Address" - 192.168.100.0/24
  • "Dst. Address List" - "Connected-Networks" (выбираем из выпадающего списка)
  • "Protocol" - 6 (tcp)
  • "Dst. Port" - 22,8291
-20

Вкладка "Action"

  • Action - accept

Комментарий - "VPN Admins (192.168.100.0/24=>Connected-Networks)"

Перемещаем правило выше "Drop All"

По общему условию ТЗ, д.б. доступ из серверной подсети в пользовательскую и наоборот, создадим такое правило

Вкладка "General"

  • цепочка - "forward"
  • "Src. Address List" - "Connected-Networks" (выбираем из выпадающего списка)
  • "Dst. Address List" - "Connected-Networks" (выбираем из выпадающего списка)
-21

Вкладка "Action"

  • "Action" - accept

Комментарий - "Connected-Networks<=>Connected-Networks"

Перемещаем правило выше "Drop All"

Создаём IP пул для админов

Переходим в "IP=>Pool" и нажимаем "+"

-22

Создаём PPP профиль (в "PPP=>Profiles")

На вкладке "General" первые три поля заполняем аналогично, как и для профиля min-services, но с учётом новой подсети

-23

На вкладке "Protocols" выставляем параметры аналогичные профилю min-services, и нажимаем "OK"

Создание пользователей VPN

В меню "PPP" переходим на вкладку "Secrets", и нажимаем "+"

  • в поле "Name" укажем имя пользователя
  • в поле "Password" укажем пароль для пользователя
  • в поле "Profile" выберем профиль для пользователя
  • в поле "Service" оставим значение "any" (тут можно выбрать конкретный VPN протокол для пользователя, и если этот пользователь попытается подключиться используя другой протокол, то система его не пустит, причём в логах будет сообщение, что пароль не верный, параметр "any" разрешает подключение пользователю по всем доступным протоколам).

Из интересного на уровне пользователя можно перенастроить параметры "Local Address" и "Remote Address", параметры пользователя более приоритетны, чем параметры профиля, это бывает требуется, для настройки каких либо исключений (например какому то пользователю надо поставить постоянный адрес).

Создадим трёх пользователей, по одному, на каждый профиль, назовем их соответственно их функционалу

user-min-services

-24

user-all-services

-25

user-admins

-26

Настроим L2TP сервер на нашем роутере

В меню "PPP", на вкладке "Interface", нажимаем кнопку "L2TP Server"

-27

В появившемся меню, на вкладке "General":

  • ставим галку в чекбоксе "Enabled" (тем самым включаем сам сервис)
  • в поле протокол оставляем "all" (это поле единственное отличие от настройки L2TP на шестой версии RouterOS)
  • в пункте "Authentications" оставляем галку только в чекбоксе "mschap2"
  • в поле "Use IPSec" в выпадающем списке выбираем "required", после чего становится доступным поле "IPSec Secret" (тут описание стандартное: "no" - не используем IPSec; "yes" - клиент может использовать, а может и не использовать; "required" - всегда используем IPSec)
  • в поле "IPSec Secret" указываем ключ IPSec

Все остальные параметры оставляем по умолчанию, и нажимаем кнопку ОК.

-28

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

  • 1701 udp - порт самой службы L2TP
  • 500 и 4500 udp - порты протокола IKEv1, который используется для IPSec

Заходим в меню "IP=>Firewall", на вкладке "Filter Rules" нажимаем кнопку "+":

Вкладка "General"

  • цепочка - "input" (т.к. трафик от клиентов будет адресован самому роутеру)
  • "Protocol" - udp
  • "Dst. Port" - 500,1701,4500
-29

Вкладка "Action"

  • "Action" - accept

Комментарий - "L2TP Server"

Перемещаем правило выше "Drop All"

Настройка L2TP сервера завершена.

Настроим SSTP сервер

SSTP протокол разработан Microsoft, суть его в том, трафик VPN канала инкапсулируется в HTTPS, простыми словами - канал VPN будет для всех выглядеть как запросы к Web серверу по https (типа обычный web сёрфинг).

На сколько мне известно, протокол работает только на операционных системах от Microsoft и на RouterOS (микроты м.б. и клиентами и серверами sstp).

Для настройки sstp на микротах, нам потребуется центр сертификатов, вполне подойдёт реализация от mikrotik, в статье "Центр сертификации на базе RouterOS (Mikrotik)" я подробно рассказываю, как создать такой центр сертификации, и какие сертификаты создавать для службы SSTP.

Кратко повторю.

Создание сертификатов для SSTP

Для начала создадим самоподписанный сертификат для нашего центра сертификации, заходим в "System=>Certificates", и на вкладке "Certificates" нажимаем кнопку "+"

В появившемся меню, на вкладке General, заполняем следующие данные:

  • в поле "Name" - задаём имя корневого сертификата
  • в полях "Country", "State", "Locality", "Organization" - по желанию, указываем текстовую информацию, которая будет отображаться в сертификате (это не обязательно делать, но я обычно указываю)
  • в поле "Common Name" укажем ещё одно имя сертификата (я для удобства ставлю такое же, как в поле "Name")
  • в поле "Key Size" укажем размер ключа (чем больше, тем строже шифрование)
  • в "Days Valid" задаём срок действия сертификата в днях, для центра сертификации можно поставить 10 лет
-30

на вкладке "Key Usage", выбираем тип сертификата (для чего он будет использован):

  • "key cert sign" (он будет подписывать другие сертификаты)
  • "crl sign" (он будет подписывать списки отзыва сертификатов)

И нажимаем кнопку "ОК"

-31

Наш сертификат отобразится в окне "Certificates", но он ещё не подписан, чтобы его подписать, надо на нём нажать правой кнопкой мыши и в появившемся меню нажать кнопку "Sign"

-32

В появившемся окне, укажем адрес, где хранится список отзыва, в нашем случае, это внешний адрес роутера, и нажимаем кнопку "Start" (указывать сертификат CA не надо, т.к. у нас его пока нет).

-33

После этого, сертификат центра сертификации получит цифровой отпечаток, и у него будет отображаться статус KLAT, это означает что у данного сертификата есть приватный ключ, он является доверенным, в нём есть указание на CRL, и он главный.

-34

Теперь нужно создать сертификат для службы SSTP и подписать его сертификатом нашего центра сертификации

на вкладке General, заполняем следующие данные:

  • в поле "Name" - задаём имя сертификата
  • в полях "Country", "State", "Locality", "Organization" - по желанию, указываем текстовую информацию, которая будет отображаться в сертификате
  • в поле "Common Name" укажем ещё одно имя сертификата (я для удобства ставлю такое же, как в поле "Name")
  • активируем поле "Subject Alt. Name" и в выпадающем списке выберем пункт IP, справа от выпадающего списка укажем IP адрес нашего роутера, к которому будут подключаться клиенты (тут можно выбрать DNS, и указать доменное имя роутера, если в какой либо внешней доменной зоне есть соответствующая запись типа А).
  • в поле "Key Size" укажем размер ключа (чем больше, тем строже шифрование)
  • в "Days Valid" задаём срок действия сертификата в днях
-35

на вкладке "Key Usage", выбираем тип сертификата (для чего он будет использован):

  • "digital signature"
  • "key enciphement"
  • "tls server"

И нажимаем кнопку "ОК"

-36

Подпишем созданный сертификат сертификатом центра сертификации, кликаем на сертификате ПКМ, выбираем пункт "Sign", в появившемся окне в поле "CA" выбираем сертификат центра сертификации, указываем адрес внешнего интерфейса в поле "CA CRL Host", и нажимаем "Start"

-37

Включаем службу SSTP на роутере

переходим в меню "PPP" и на вкладке "Interface" нажимаем кнопку "SSTP Server"

-38

В появившемся окне задаём следующие параметры

  • ставим чекбокс напротив "Enabled"
  • в поле "Default Profile" выбираем "default-encryption"
  • в пункте "Authentication" оставляем только "mschap2"
  • в поле "Certificate" выбираем сертификат, который мы создали для SSTP службы
  • в поле "TLS-Version" ставим "only-1.2"

Остальное оставляем по умолчанию и нажимаем "ОК"

-39

Это меню в RouterOS 7 практически полностью совпадает с аналогичным в RouteOS 6, в шестой версии только есть параметр Force AES, который я обычно включаю

Разрешим в фильтре подключение к 443 порту tcp (порт по умолчанию для SSTP)

Заходим в меню "IP=>Firewall", на вкладке "Filter Rules" нажимаем кнопку "+":

Вкладка "General"

  • цепочка - "input" (т.к. трафик от клиентов будет адресован самому роутеру)
  • "Protocol" - 6 (tcp)
  • "Dst. Port" - 443
-40

Вкладка "Action"

  • "Action" - accept

Комментарий - "SSTP Server"

Перемещаем правило выше "Drop All"

Настройка SSTP сервера завершена.

Настроим Open VPN сервер

Создадим сертификат для сервера ovpn:

  • в поле "Name" - задаём имя сертификата
  • в полях "Country, State, Locality, Organization" - по желанию, указываем текстовую информацию, которая будет отображаться в сертификате
  • в поле "Common Name" укажем ещё одно имя сертификата (я для удобства ставлю такое же, как в поле "Name")
  • в поле "Key Size" укажем размер ключа (чем больше, тем строже шифрование)
  • в "Days Valid" задаём срок действия сертификата в днях
-41

на вкладке "Key Usage", выбираем тип сертификата (для чего он будет использован):

  • "digital signature"
  • "key encipherment"
  • "tls server"

И нажимаем кнопку "ОК"

-42

Подписываем его сертификатом CA

-43

Создадим сертификат для пользователя open VPN, по этому протолу я подключу пользователя user-admins, сертификаты пользователей я обычно называю по имени пользователей (выдаю их на год или два):

  • в поле "Name" - задаём имя сертификата
  • в полях "Country, State, Locality, Organization" - по желанию, указываем текстовую информацию, которая будет отображаться в сертификате
  • в поле "Common Name" укажем ещё одно имя сертификата (я для удобства ставлю такое же, как в поле "Name")
  • в поле "Key Size" укажем размер ключа (чем больше, тем строже шифрование)
  • в "Days Valid" задаём срок действия сертификата в днях
-44

на вкладке "Key Usage", выбираем тип сертификата:

  • "tls client"

И нажимаем кнопку "ОК"

-45

Не забываем его подписать

Активация и настройка службы open VPN в версиях RouterOS 6 и 7 отличаются, я покажу настройку для обоих версий

Включение ovpn в RouterOS 6

Переходим в меню "PPP" и на вкладке "Interface" нажимаем кнопку "OVPN Server"

-46

В появившемся окне задаём следующие параметры

  • ставим чекбокс напротив "Enabled"
  • в поле "Default Profile" выбираем "default-encryption"
  • в поле "Certificate" выбираем сертификат, который мы создали для OVPN службы
  • ставим галку в чекбоксе "Require Client Certificate"
  • в пункте "Auth" оставляем только sha1
  • в пункте "Cipher" оставляем aes128 и aes256
  • в поле "TLS-Version" ставим only-1.2

Остальное оставляем по умолчанию и нажимаем "ОК"

-47

Включение ovpn в RouterOS 7

Переходим в меню "PPP" на вкладку "OVPN Servers" и нажимаем кнопку "+"

-48

В появившемся окне задаём следующие параметры:

  • задаём имя сервису (можно дефолтное)
  • в поле "Protocol" - выбираем протокол udp, будет быстрее (в 6 версии ovpn работал только с tcp)
  • в поле "Default Profile" выбираем "default-encription"
  • в поле "Certificate" выбираем сертификат, который мы создали для OVPN службы
  • ставим галку в чекбоксе "Require Client Certificate"
  • в пункте "Authentication" выбираем "sha1, sha256, sha512"
  • в пункте "Cipher" оставляем "aes 128 cbc" и "aes 256 cbc"
  • в поле "User Authentication Metod" выбираем "mschap2"

Остальное оставляем по умолчанию и нажимаем "ОК"

-49

Разрешим в фильтре подключение к 1194 порту udp (порт по умолчанию для OVPN):

Заходим в меню "IP=>Firewall", на вкладке "Filter Rules" нажимаем кнопку "+":

Вкладка "General":

  • цепочка - "input" (т.к. трафик от клиентов будет адресован самому роутеру)
  • "Protocol" - udp
  • "Dst. Port" - 1194
-50

Вкладка "Action":

  • "Action" - accept

Комментарий - "OVPN Server"

Перемещаем правило выше "Drop All"

Настройка Open VPN сервера завершена.

Итоговый набор правил фильтра

-51

Настройка клиентских подключений

(все настройки будут произведены на машине pc.labs.local)

Настройка клиента L2TP на windows 10

Через L2TP запустим пользователя user-min-services, мы должны будем получить доступ по rdp к машине vm1.labs.local

В поиске вбиваем запрос VPN, и открываем появившееся меню "Изменение виртуальных частных сетей (VPN)"

-52

Нажимаем кнопку "Добавление VPN-подключения"

-53

В появившемся меню заполняем следующие пункты:

  • "поставщик услуг VPN" - "Windows (встроенные)"
  • "Имя подключения" - любое удобное
  • "Имя или адрес сервера" - адрес нашего роутера
  • "Тип VPN" - "Протокол L2TP/IPSec"
  • "Тип данных для входа" - "Имя пользователя и пароль"
  • Имя пользователя
  • Пароль

и нажимаем кнопку "Сохранить"

-54

В том же меню, нажимаем ссылку "Настройка параметров адаптера"

-55

попадаем в меню, со списком сетевых карт компьютера, где отображаются в том числе и логические сетевухи, заходим в свойства сетевой карты нашего VPN подключения (карта будет называться так же, как вы назвали подключение VPN в предыдущем пункте), нажимаем на этой карте ПКМ и выбираем пункт "Свойства"

-56

Переходим на вкладку "Безопасность"

  • в пункте "Шифрование данных" выберем - "Обязательное"
  • в меню "Проверка подлинности" выберем "Разрешить следующие протоколы", и оставим галку в чекбоксе "Протокол Microsoft CHAP версии 2 (MS-CHAP v2)"
-57

В том же меню нажмём кнопку "Дополнительные параметры", в появившемся окне выберем "Для проверки подлинности использовать общий ключ", в поле "Ключ" - впишем его

-58

Нажимаем "OK "в меню доп свойств и в меню свойств интерфейса

Пробуем подключиться, в том же меню VPN, в созданном подключении нажмем кнопку "Подключиться"

-59

Если все было сделано правильно, то мы увидим в статусе "Подключено"

-60

На стороне микрота, подключение видно в меню "PPP" на вкладке "Active Connections"

-61

Процесс подключения можно посмотреть в логах микрота, лог там достаточно информативный, переходим в меню "Log"

-62

Тут видно, что я сначала на клиенте ввел неверный ключ IPSec, поэтому система меня отфутболила, потом исправил его, и подключился

Проверим подключение по RDP к хосту vm1.labs.local

Как видно на скриншоте, хост ответил предложением ввести реквизиты, а значит все в порядке

-63

Мы можем посмотреть в фильтре, какие из наших правил отрабатывают, при подключении этого пользователя по L2TP, смотрим столбцы bytes и Packets

-64

Видно, что отрабатывает правило для профиля min-services, и правило для L2TP

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

Добавим подсети min-services и all-services в группу srcNAT

-65

Это поведение можно переопределить на уровне VPN интерфейса клиента, заходим в свойства нашего VPN адаптера, и на вкладке "Сеть" дважды кликаем пункт "IP версии 4 (TCP/IPv4)"

-66

В появившемся окне нажмём кнопку "Дополнительно"

-67

И в новом меню, на вкладке "Параметры IP" снимаем галку с чекбокса "Использовать основной шлюз в удалённой сети"

-68

После этой настройки, доступ к любым сетям на локальном ПК будет производится через локальный маршрутизатор, и маршруты до подсетей доступных через VPN нужно будет прописывать руками через утилиту командной строки "route add"

Вот пример маршрута до пользовательской сети из под профиля min_services:

route add 172.16.1.0/24 mask 255.255.255.0 192.168.101.1 -p

,где

172.16.1.0/24 - сеть назначения

192.168.101.1 - адрес роутера, через который доступна сеть назначения

-p - ключ, при использовании которого, маршрут сохраняется после перезагрузки ПК

В каких то версиях windows 10 меню IP версии 4 (TCP/IPv4) на вкладке Сеть VPN адаптера может не открываться (сам так попадал), в этом случае можно обновиться до последней версии windows 10 и проблема исчезнет, либо отключить функцию "Использовать основной шлюз в удалённой сети" через Powershell

Set-VpnConnection -Name l2tp-min-services -SplitTunneling 1

Настройка клиента SSTP на windows 10

Для настройки клиентского подключения SSTP VPN, нам потребуется в клиентский ПК, на котором будем настраивать VPN, импортировать сертификат центра сертификации, и сертификат самого SSTP сервера, для этого на роутере перейдём в меню "System=>Certificates" на вкладке "Certificates" кликнем на сертификате нашего CA правой кнопкой мыши и в появившемся меню выберем пункт "export"

-69

В появившемся окне:

  • в поле "Type" оставляем формат "PEM"
  • поле "Export Passphrase" оставляем пустым
  • в поле "File Name" вводим имя файла для сертификата

Аналогичным образом выгружаем сертификат для SSPT сервера

-70

Файлы сертификатов появятся в меню "Files"

-71

Данные файлы можно через drag&drop скачать в файловую систему компьютера (по простому, выделить файлы, и мышкой перетащить их в нужную папку). Переместим данные файлы сертификатов в компьютер pc.labs.local.

Откроем файл сертификата СА, и нажмём кнопку "Установить сертификат"

-72

В следующем меню выберем пункт "Локальный компьютер"

-73

Затем выберем пункт "Поместить все сертификаты в следующее хранилище", нажимаем кнопку обзор, и в выпадающем подменю выбираем "Доверенные корневые центры сертификации"

-74

Нажимаем кнопку далее и кнопку "Готово".

Абсолютно аналогичным способом импортируем сертификат сервера SSTP (хранилище выбираем так же "Доверенные корневые центры сертификации")

Проверим наши сертификаты в оснастке "Сертификаты", для этого в поиске пишем "mmc", и запустим это приложение от имени администратора

-75

В меню "Файл" выберем пункт "Добавить или удалить оснастку"

-76

В списке оснасток выберем "Сертификаты", и нажмём кнопку "Добавить"

-77

В появившемся окне выберем пункт "Учётной записи компьютера" и нажмём далее

-78

В следующем окне оставляем все по умолчанию, и нажимаем "Готово"

-79

Нажимаем "ОК" и попадаем в оснастку "Сертификаты", в пункт "Довереные корневые центры сертификации=>Сертификаты", и увидим импортированные сертификаты

-80

Зайдём в сертификат сервера, и на вкладке "Путь сертификации" будет статус "Этот сертификат действителен", значит всё в порядке

-81

После подготовительных работ настроим клиента SSTP

Через SSTP мы запустим пользователя user-all-services, мы должны будем получить доступ серверной сети (общие папки, служба ДНС и клиент сможет аутентифицироваться через контроллер домена и получить групповые политики с него).

В поиске вбиваем запрос "VPN", и открываем появившееся меню "Изменение виртуальных частных сетей (VPN)"

Нажимаем кнопку "Добавление VPN-подключения"

В появившемся меню заполняем следующие пункты

  • "поставщик услуг VPN - Windows (встроенные)"
  • "Имя подключения" - любое удобное
  • "Имя или адрес сервера" - адрес нашего роутера
  • "Тип VPN" - "Протокол SSTP"
  • "Тип данных для входа" - "Имя пользователя и пароль"
  • Имя пользователя
  • Пароль

и нажимаем кнопку "Сохранить"

-82

Заходим в свойства созданного VPN интерфейса, и на вкладке "Безопасность"

  • в пункте "Шифрование данных" выберем "Обязательное"
  • разрешим только протокол "MSCHAPv2"
-83

Пробуем подключиться.

При успешном подключении, на роутере в меню "РРР" на вкладке "active connections" увидим наше активное подключение

-84

Если пинганём контроллер домена по имени, то увидим, что он его не пингует, т.к. это запрещено, но разрешает имя сервера, т.е. доступ к доменному ДНС есть

-85

Общие папки доступны

-86

При этом, если мы попробуем подключиться к серверу по RDP, то нас не пустят, т.к. нет доступа. Подключившись к ВПН с профилем all services, я смог удалённый ввести компьютер в домен.

Настройка клиента OpenVPN на windows 10

Через этот протокол, подключим пользователя user-admins

Для подключения нам потребуется сертификат пользователя, который мы заранее создали, на этапе настойки сервиса, выгрузим с роутера сертификат и ключевой файл сертификата. На роутере перейдём в меню "System=>Certificates" и на вкладке "Certificates" кликнем ПКМ на пользовательском сертификате, в появившемся меню выберем пункт "export"

-87

В появившемся окне:

  • в поле "Type" оставляем формат "PEM"
  • поле "Export Passphrase" укажем пароль для расшифровки ключевого файла сертификата (не менее 8 символов)
  • в поле "File Name" вводим имя файла для сертификата
-88

Файлы сертификатов появятся в меню "Files", вытащим их через "drag&drop"

Теперь скачаем и установим программу openVPN на клиенте (скачивается тут).

Файлы конфигурации, парольный файл и файлы сертификатов я буду складывать в "C:\Program Files\OpenVPN\config" - это папка по умолчанию для конфигураций openVPN (для файлов сертификатов и паролей можно задать любую папку, но для этого в конфигурации н.б. указать абсолютные пути к этим файлам).

Конфигурация клиента openVPN это текстовый файл с расширением .ovpn (наш файл называется labs.ovpn) и выглядит конфигурация так:

client

dev tun

proto udp #Указываем протокол, можно выбрать tcp

remote 1.1.1.1 1194 #Адрес сервера openVPN и порт

persist-key

persist-tun

mute-replay-warnings

ca _ca-labs.crt #Путь файлу с сертификатом центра сертификации

cert user-admins.crt #Путь файлу с сертификатом пользователя

key user-admins.key #Путь файлу с ключом сертификата пользователя

auth-nocache

--auth-user-pass pwd.txt #Путь файлу с логином\паролем пользователя

remote-cert-tls server

data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305:AES-256-CBC # Указываем протоколы шифрования

data-ciphers-fallback AES-256-CBC

verb 3

mute 20

route 10.254.1.0 255.255.255.0 # Маршруты до удалённых подсетей

route 172.16.1.0 255.255.255.0

Для этой конфигурации потребуется файл с логином и паролем пользователя, имя файла pwd.txt, наполнение у него простое

user-admins

111111

Итого у нас должно быть 5 файлов:

  • _ca-labs.crt - сертификат центра сертификации
  • user-admins.crt - сертификат пользователя
  • user-admins.key - файл с ключом сертификата пользователя
  • pwd.txt - файл с паролем\логинмо пользователя
  • labs.ovpn - конфигурация openVPN

Скопируем их в "C:\Program Files\OpenVPN\config"

-89

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

-90

Кликнем на нём ПКМ и в появившемся меню выберем пункт "Подключиться"

-91

Программа запросит пароль к ключевому файлу, который мы задавали при экспорте сертификата (чекбокс "Запомнить" имеется, использовать его или нет - по желанию). Вводим пароль и нажимаем "ОК"

-92

После успешного подключения, значок openVPN в трее станет зелёным

-93

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

После подключения, у нас появится доступ по RDP к серверу и виртуалке, а также мы сможем зайти на роутер через winbox и по ssh

На этом настройка завершена

П.С.

Я решил в одном материале сразу показать настройку трёх протоколов, и клиентов, т.к. на практике часто бывает используются сразу все 3 протокола на одной железке

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