Mirkotik: OpenVPN server with certificates

Учитывая массовый переход на удаленку сами-знаете-в-связи-с-чем ( SARSCoV2 / Covid-19 ) возникла задача построить vpn для удаленщиков. В общем-то задача тривиальная, но при построении защищенного VPN средствами Микротик есть определенные особенности

Вступление

Почему именно OpenVPN ?

  • pptp : плохая крипто устойчивость + не поддерживается в последних версиях iOS;
  • l2tp : криптоустойчивость лучше, но только при использовании в связке с ipsec. Для Windows пользователю нужно совершить довольно сложные (для рядового пользователя действия), чтобы включить поддержку ipsec для l2tp. Возможности раздать через доменные политики нет ибо компьютеры изначально не находятся в офисе. Выход – помощь админа (через удаленное подключение) или создание специального инсталятора, который сам всё сделает (у нас это тоже есть). Еще один минус – для разных удаленных ПК нужны разные конфиги для локального роутинга, а в windows по умолчанию через vpn роутится весь траффик, что вызывает дополнительную ненужную нагрузку на vpn каналы. Выход такой же, как и в предыдущем случае с включением ipsec;
  • sstp : чисто Микрософтовское решение, соответсвенно невозможность или бубны в не-Windows системах;
  • openvpn : со дной стороны ставится абсолютно на всех системах (Windows/Linux/iOS), справится и рядовой (мы оптимисты) пользователь (установил клиент и подкинул выданные админом файлы). Особо продвинутые пользователи при этом могут самостоятельно в файле конфига закомментироть-раскомментировать нужные роуты, к примеру. Если еще интегрировать с LDAP – то вообще красота. Но есть минус – довольно ограниченная реализация openvpn в роутерах микротик, в частности не поддерживается (на момент написания статьи) push тех же роутов со стороны сервера.

 

OpenVPN: настройка сервера на Микротик

Тут в общем-то всё просто – существует куча мануалов, например:

https://wiki.mikrotik.com/wiki/OpenVPN

https://lantorg.com/article/nastrojka-vpn-cherez-mikrotik-openvpn

Открыли ссылки, разобрались как сгенерировать/импортировать сертификаты? Закрывайте. Микротик с недавних пор умеет сам генерировать сертификаты и для удобства я это оформил в виде скриптов.

Генерация сертификатов

Скрипты генерации сертификатов находятся тут .

По сути всё что нужно сделать, это:

  • импортировать certs.rsc  или же вручную создать четыре скрипта ( certs_defaults , certs_CA, certs_createServer , certs_createClient ) ;
  • подставить свои значения в certs_defaults ;
  • выполнить из терминала роутера скрипт certs_createCA (только один раз!), скрипт создаст, подпишет корневой сертификат. С помощью этого сертификата будут создаваться все остальные сертификаты, в том числе и для разных роутеров микротик или того-же NPM сервера (об этом потом);
  • выполнить из терминала роутера скрипт certs_createServer (только один раз для одного роутера!), скрипт создаст/подпишет корневым  “серверный” сертификат, который потом будем использовать в настройках OpenVPN сервера на микротик;
  • выполнить из терминала роутера скрипт certs_createClient (можно запускать много раз – если у вас много клиентов и все должны иметь свой сертификат).

Mikrotik: включаем OpenVPN Сервер

Тут следуем рецепту из секции “Server configuration” или же секции “Создаем PPP Профиль“: я включаю sha1+aes256, проверку клиентских сертификатов и выбираю сертификат, сгенерированный с помощью certs_createServer:

Также в профиле ставлю обязательным шифрование:

Всё остальное как обычно.

OpenVPN клиент

Тут тоже всё достаточно просто:

  • на удаленном ПК ставим клиент: https://openvpn.net/community-downloads/
  • в папку конфига (Windows: в глобальную “C:\Program Files\OpenVPN\config” или пользовательскую – “C:\Users\Юзверь\OpenVPN\config” ) копируем публичный CA .crt сертификат (создан certs_createCA, переименовуем в ca.crt ), оба – публичный и приватный – сертификаты, сгенерированные certs_createClient, соответсвенно переименовываем их в client.crt / client.key
  • туда же копируем конфиг , не забывая в нем указать свой сервер и свои роуты/ДНС

Папка конфига должна выглядеть так .

А дальше – если всё настроено правильно – просто коннектимся через OpenVPN GUI.