Как стать автором
Обновить

Настройка простого VPN Server'а для всех устройств с использованием Mikrotik CHR

Уровень сложностиСредний

Добрый день всем, кто читает эту статью. Меня зовут Минисламов Руслан. Это мой перый пост на habr.com. Мы будем настраивать VPN Server с использованием Mikrotik CHR - это специальная версия Mikrotik RouterOS, которая разработана для развертывания в облачной инфраструктуре, например на VPS. Пост расчитан чтобы далекий от IT человек смог настроить себе VPN Server, а так же технически грамотный специалист, но не работавший с продуктами Mikrotik. К VPN по окончании статьи сможем подключаться с телефона при помощи ПО "strongSwan" к VPN по протоколу IKEv2 over IPsec ,приложение "strongSwan" есть в "Google Play", а так же сможем с ПК подключаться по протоколу L2TP over IPsec так же к нашему VPN.

Системные требования Mikrotik CHR: процессор: x86_64 с поддержкой аппаратной виртуализации, ОЗУ: 128 МБ и более.
Как видно из вышеуказанных требований, не нужно покупать дорогой VPS Server, достаточно стартового, с 1 ядром, оперативной памяти 512 Mb, OC на диске то же много не съест, но помоему везде предлагают от 5GB, тип диска SSD или SAS не важно. Для статьи я буду использовать VPS со следующими характеристиками.

Характеристики арендованного VPS.
Характеристики арендованного VPS.

Как только VPS будет подготовлен, выполняем подключение по ssh к нашему серверу. Данные для подключения к VPS скорее всего будут направлены на почту вашим "Хостинг Провайдером". После удаленного подключения к нашему VPS, выполним команду "ip r" чтобы узнать gateway. Потребуется в будущем при настройке, в моем случае это 194.36.179.1. Запишем себе в текстовый файлик это значение.

Результат команды ip r.
Результат команды ip r.

Выполним команду "fdisk -l". Нас интересует выделенное на скриншоте значение "/dev/vda".

Результат команды fdisk -l.
Результат команды fdisk -l.

Установим пакет wget и unzip, выполнив следующую команду
"apt update && apt install wget unzip -y".
Далее скачаем Mikrotik CHR и распакуем наш образ.
"wget https://download.mikrotik.com/routeros/7.9.2/chr-7.9.2.img.zip && unzip chr*.img.zip".
Далее вводим команды
"echo u > /proc/sysrq-trigger"
"dd if=chr-7.9.2.img of=/dev/vda bs=4M oflag=sync"
ВАЖНО!!! При вводе команды вам необходимо изменить следующие значения на свои:
of=/dev/vda полученные после ввода команды "fdisk -l"
if=chr-7.9.2.img на вашу версию, если отличается от используемого в инструкции образа.
Далее вводим команды перезагрузив наш VPS.
"echo 1 > /proc/sys/kernel/sysrq"
"echo b > /proc/sysrq-trigger"

Далее нам необходимо авторизоваться на сайте "Хостинг Провайдера" где арендовали VPS и перейти в Панель управления VPS Server'ом. Необходимо найти похожий интерфейс и подключиться через VNC к нашему серверу, так как следующие команды набо выполнять для первоначальной настройки на Mikrotik CHR.

Подключаемся через VNC к VPS.
Подключаемся через VNC к VPS.
Интерфейс после подключения к терминалу через VNC.
Интерфейс после подключения к терминалу через VNC.

Вводим в поле Login "admin" нажимаем Enter, в поле Password ничего не указываем просто кликаем Enter. И вводим "y" и удерживаем "Enter" чтобы прочитать молнееносно лицензионное соглашение"

Аутентификация и лицензионное соглашение.
Аутентификация и лицензионное соглашение.
Смена пароля.
Смена пароля.

Вводим пароль для УЗ "admin" я для теста ввел коротки пароль, но вам лучше использовать сложный. Далее будет еще пару моментов про настройку безопасности чтобы не пополнить копилку mikrotik bot'ов.
После смены пароля необходимо ввести следующие команды для первоначальной настройки Mikrotik CHR.

Вносим ip для первоначальной настройки и подключения к нашему MIkrotik.
Вносим ip для первоначальной настройки и подключения к нашему MIkrotik.

"ip address add interface=ether1 address=194.36.179.249 netmask=255.255.255.0"
"ip route add gateway=194.36.179.1 dst-address=0.0.0.0/0 distance=1"

С консолью работать закончили, можно подключаться к нашему роутеру с использованием ПО Winbox. Указываем настройки для подключения и кликаем "Connect".

Подключение к серверу через WinBox.
Подключение к серверу через WinBox.

Далее в меню выбираем "IP" - "Services" и кликая по каждому сервису, выдлив его, отключаем его кликнув на красную иконку.

Так выглядит изначально список сервисов ( не безопасно )
Так выглядит изначально список сервисов ( не безопасно )

Приведем вот к такому виду. Тем самым мы отключили ненужные сервисы и обезопасили себя от возможного взлома.

Отключение лишних сервисов для безопасности.
Отключение лишних сервисов для безопасности.

Далее делаем backup настроек, чтобы если что-то пошло не так, не нужно было переустанавливать все повторно, для этого перейдем в интерфейсе winbox выберем "Files"
Кликаем "Backup" - в новом окне в строке "Name" вводим название, чтобы было понятно. Я указал "first". Подтвержжаем нажимая "Backup".
Backup был создан как видно по скриншоту ниже.

Backup, чтобы вернуться к первоначальной настройке.
Backup, чтобы вернуться к первоначальной настройке.

Далее в меню выбираем "IP" - "DNS" Укажем DNS Server, я указал 8.8.8.8. Кликаем "OK" подтвердив наши настройки.

Указываем какой DNS использовать.
Указываем какой DNS использовать.

Далее в меню выбираем "Bridge" открывается окно, на вкладке "Bridge" в верхнем левом углу жмем на иконку "+". Добавляем новый Interface указав ему Name, я ввел "ikev2".

Создаем interface для нашего vpn.
Создаем interface для нашего vpn.

Далее работа будет происходить в меню "IP".
"IP" - "Addresses" - "+". В интерфейсе указываем в поле "Address" ip адрес ( адрес указываем используемые в локальных сетях ) и в поле "Interface" выбираем созданный на прошлом шаге "Interface". Кликаем "OK" подтвердив наши настройки.

Создаем диапозон IP адресов.
Создаем диапозон IP адресов.

"IP" - "Pool" - "+". В интерфейсе указываем в поле "Name" наименование нашего Pool, я введ "ikev2-pool". В поле "Addresses" указываем диапозон ip, из этого диапозона будет выдаваться подключенным Client'ам ip адрес, но вносим значение из того же диапозона что и сделали ранее Interface с именем "ikev2".

Указываем pool из которого клиентам будет выдаваться ip при подключении к vpn.
Указываем pool из которого клиентам будет выдаваться ip при подключении к vpn.

Далее работа будет происходить в меню "System".
"System" - "Certificates" - "+". В поле "Name" вводим "ca", следующие 3 поля "Country", "State" и "Locality" не обязательны, но если ввели, необходимо будет вносить и в созданных в будущем сертификатах. В поле "Days Valid" исправляем значение на "3650", чтобы не перевыпускать сертификат каждый год и не переподписывать клиентские сертификаты которые создадим далее. В этом же окне, переходим на вкладку "Key Usage" и ставим галочки в полях "key cert.sign" и "cert sign".
Кликаем "OK" подтвердив наши настройки.

Создаем ca сертификат.
Создаем ca сертификат.
Активируем необходимые атрибуты для ca сертификата.
Активируем необходимые атрибуты для ca сертификата.

Далее на созданном сертификате кликаем правой кнопокй мыши (далее: ПКМ), Sign.

Генерируем fingerprint для ca.
Генерируем fingerprint для ca.

В новом окне кликаем "Start" и ожидаем пока в поле "Progress" не появится надпись "done". Кликаем "Close".

Генерируем fingerprint для ca.
Генерируем fingerprint для ca.

Далее в этой же вкладке "Certificates" создаем новый сертификат, но уже сервера. Кликаем на иконку "+" . В поле "Name" я указал "serv-cert", как ранее и говорил так как раньше внес значения "Contry", "State" и "Locality" их указал и в текущем. В поле "Subject Alt. Name" выбираем "IP" и указываем внешний IP адрес который выдал нам хостинг провайдер. В поле "Days Valid" так же исправим значение на "3650" как и ранее. Переходим на вкладку "Key Usage" и активируем атрибут "tls server". Кликаем "OK" подтвердив наши настройки.

Создаем сертификат сервера.
Создаем сертификат сервера.
Активируем опции для сертификата сервера.
Активируем опции для сертификата сервера.

Далее в этой же вкладке "Certificates" создаем новый сертификат, но уже для клиента. Кликаем на иконку "+" . В поле "Name" я указал "client", как ранее и говорил так как раньше внес значения "Contry", "State" и "Locality" их указал и в текущем. В поле "Days Valid" так же исправим значение на "3650" как и ранее. Переходим на вкладку "Key Usage" и активируем атрибут "tls client". Кликаем "OK" подтвердив наши настройки.

Создаем клиентский сертификат.
Создаем клиентский сертификат.
Активируем опции для клиентского сертификата.
Активируем опции для клиентского сертификата.

Необходимо подписать сертификат сервера с именем "serv-cert" и клиентский сертификат с именем "client" сертификатом нашего УЦ созданного под именем "ca", для этого кликаем ПКМ на сертификате "serv-cert" выбираем "Sign", в новой вкладке в поле "CA" выбираем сертификат и нажимаем "Start". В поле "Progress" должна появится надпись done. Кликаем "Close".

Подписываем сертификат сервера, сертификатом УЦ.
Подписываем сертификат сервера, сертификатом УЦ.

То же самое делаем с клиентским сертификатом. (Если в будущем будете создавать дополнительные их так же нужно подписать).
Теперь можно выполнить "Export" Клиентского сертификата с именем "client". Кликаем ПКМ по сертификату и выбираем "Export".

Подписываем сертификат клиента, сертификатом УЦ.
Подписываем сертификат клиента, сертификатом УЦ.

В новом окне выбираем "Type" как на скриншоте ниже и обязательно в поле "Export Passphrase" указываем пароль, не меньше 8 символов, иначе вместе с сертификатом не произойдет экспорт сертификата сервера. Кликаем "Export".

Экспортируем клиентский сертификат.
Экспортируем клиентский сертификат.

Далее работа будет происходить в меню "IP" - "IPsec".
"IP" - "IPsec" - переходим на вкладку "Mode Configs" - "+". В поле "Name" указываем имя, я ввел "ikev2-ipsec", в поле "Address Pool" выбираем pool созданный ранее для пользователей которые будут подключаться к VPN. В поле "Address Prefix Length" указываем "32". (Для новичка слишком длинное будет объяснение почему 32, а технически грамотные специалисты и так поймут). Кликаем "OK" подтвердив наши настройки.

"IP" - "IPsec" - переходим на вкладку "Profiles" - "+". Создаем новый профиль. В поле "Name" я указал "ikev2-ipsec-profile", в поле "Hash Algorithms" изменил значени на "sha256", в поле "Encrypting Algorithm" оставить только 3 атрибута "aes256", "modp1024" и "modp2048". Кликаем "OK" подтвердив наши настройки.

"IP" - "IPsec" - переходим на вкладку "Groups" - "+". Создаем новую группу. В поле "Name" я указал "ikev2-group". Кликаем "OK" подтвердив наши настройки.

«IP» — «IPsec» — переходим на вкладку «Proposal» - «+». Указываем в поле «Name» любое имя, я указал «ikev2-proposal» и оставил активными 2 алгоритма шифрования, в поле «PFS Group» изменяем значение на «none». Кликаем «OK» подтвердив наши настройки.

"IP" - "IPsec" - переходим на вкладку "Policies" - "+". Активируем опцию "Template", в поле "Group" выбираем группу созданную ранее, переключаемся на вкладку "Action" и в поле "Proposal" выбираем ранее созданный "ikev2-proposal". Кликаем "OK" подтвердив наши настройки.
( Если простыми словами группа и proposal необходимы для установки IPsec соединения, а оно устанавливается из двух фаз, каждый из которых важен ).

"IP" - "IPsec" - переходим на вкладку "Peer" - "+". В поле "Name" указываем имя создаваемого нами peer, я назвал "ikev2-peer", в поле "Profile" выбираем профиль ранее созданный, в поле "Exchange Mode" выбираем IKE2. Активируем атрибут "Passive". Кликаем "OK" подтвердив наши настройки.

"IP" - "IPsec" - переходим на вкладку "Identities" - "+". В поле "Peer" выбираем ранее созданный "ikev2-peer", в поле "Auth. Method" выбираем "digital signature", в поле "Certificate" выбираем сертификат сервера "cert-serv", в поле "Remote Certificate" выбираем клиентский сертификат, в поле "Policy Template Group" выбираем ранее созданную группу "ikev2-group", в поле "Remote ID Type" выбираем "ignore", в поле "Match By" выбираем "certificate", в поле "Mode Configuration" выбираем ранее созданный "ikev2-ipsec", в поле "Generate Policy" выбираем значение "port strict". Кликаем "OK" подтвердив наши настройки. ( Эту настройку надо выполнять для каждого клиентского сертификата если вы сделали их несколько штук )

Далее работа будет происходить в меню "IP" - "Firewall".
"IP" - "Firewall" - переключаемся на вкладку "NAT" - "+". В поле "Chain" выбираем "srcnat", в поле "Src. Address" указываем диапозон ip из ранее созданного pool, у меня "172.17.18.0/24", переключаемся на вкладку "Action" в поле "Action" выбираем masquerade. Кликаем "OK" подтвердив наши настройки.

Осталось зайти в меню "Files", кликнуть ПКМ на сертификат и в выпадающем меню выбрать "Download" и укажем путь где сохранить файл. Переносим сертификат на мобильное устройство и установим приложение для VPN Strongswan.
PS: Возможно у Вас заработает VPN и через стандартные настройки, у меня телефон отказывался подключаться, пока не указать "Общий IPsec ключ" хотя его я нигде не вводил и это значение не является обязательным.

Настройки в приложении StrongSwan в приложении на телефоне приведены на скриншоте.

2 Важных момента!!!

1) Рекомендую так же зарегистрироваться на сайте mikrotik и получить бесплатную лицензию. После того как зарегистрируетесь, необходимо в меню выбрать "System" - "License" кликнуть "Renew License" и ввести свой логин (email) и пароль который вы создали при регистрации на сайте mikrotik, и у Вас будет лицензия P1.
Лицензия временная, предоставляет возможность обновляться в течении 60 дней на новую версию, но нам нужно увеличить скорость интерфейса. Даже когда закончится лицензия, скорость не будет резаться, сйчас скорость нашего интерфейса будет ограничена программно 1Мб, после регистрации на сайте, а затем указать эти данные в форме ниже, мы увеличим скорость до 1Гб, конечно в нашем случае скорость такой не будет, но около 100Мб и комфортная работа обеспечена.

2) Ниже настройки не обязательны, VPN уже работает.
Следующие правила можно не создавать, если в будущем не планируете более тонко настраивать Firewall и изучать эту тему, VPN уже готов к работе на этом этапе и можно к нему подключиться с мобильного устройства.
"IP" - "Firewall" - "+". В поле "Chain" вибираем канал "input", в поле "Protocol" выбираем udp, в поле "Dst. Port" вводим "500, 4500", переключаемся на вкладку "Action" в поле "Action" выбираем "accept". Кликаем "OK" подтвердив наши настройки.

Создадим следующее правило с настройками. В поле "Chain" выбираем "input", в поле "Src. Address" указываем "0.0.0.0", переключаемся на вкладку "Advanced" и в поле "IPsec Policy" выбираем "ipsec". Кликаем "OK" подтвердив наши настройки.

Создадим следующее правило с настройками. В поле "Chain" выбрать "forward", в поле "Src. Address" указать "0.0.0.0", переключаемся на вкладку "Action", в поле "Action" выбираем "accept". Кликаем "OK" подтвердив наши настройки.

Выше мы выполнили настройку VPN Server'а для того чтобы подключаться с мобильных устройств, ниже выполним настройку еще одного протокола для подключения к нашему VPN. Запасной протокол настраиваем, так как существует у каждого множество разных устройств, с разной ОС, с разным набором программ и отдельное устройство используется для разных задач. Например по протоколу L2TP можно будет подключаться к ChatGPT с ПК без проблем.

Создадим отдельный пул с ip адресами. Перейдем в меню "IP" - "Pool" - "+". Комментировать не буду, ранее создавали пул ip адресов для протокола ikev2.

Создаем pool для l2tp-server.
Создаем pool для l2tp-server.

Далее работа будет происходить в меню "PPP".
"PPP" - "Profiles" - "+". В поле "Name" указываем имя, я ввел "l2tp". В поле "Local Address" ip из того же пула что создали выше. В поле "Remote Address" указываем pool который ранее создали. Меняем значение "Change TCP MSS" с "default" на "yes". Кликаем "OK" подтвердив наши настройки.

"PPP" - "Interface" - "L2TP Server". Приводим к виду как на скриншоте ниже. Из важного, в поле "IPsec Secret" указан пароль, введите значение и запомните его, оно понадобиться при настройке подключения на ПК. Кликаем "OK" подтвердив наши настройки.

"PPP" - "Secrets" - "+". Данными действиями мы создаем нового пользователя, который сможет подключаться к нашему VPN по протоколу l2tp. Приводим к виду как на скриншоте ниже. Поле "Password" указан пароль с которым пользователь сможет подключаться, введите значение и запомните его, оно понадобиться при настройке подключения на ПК. Кликаем "OK" подтвердив наши настройки.

Последний момент, настроим NAT, переходим "IP" - "Firewall".
"IP" - "Firewall" - переключаемся на вкладку "NAT" - "+". В поле "Chain" выбираем "srcnat", в поле "Src. Address" указываем диапозон ip из ранее созданного pool, у меня "172.17.19.0/24", переключаемся на вкладку "Action" в поле "Action" выбираем "masquerade". Кликаем "OK" подтвердив наши настройки.

Расписывать как настроить L2TP на ПК не буду, там все элементарно, указать IP, логин и пароль пользователя которого создали в MIkrotik CHR и пароль для IPsec.
Так же рекомендую еще раз сделать backup настроек.

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

За статью спасибо моей девушке Елизавете, для которой и настраивался изначально VPN Server.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.