Протокол L2TP

+49

Cегодня создадим свой VPN серверIPsec / L2TP.

Выберем протокол для VPN.

Мне известны эти: OpenVPN, PPTP, IPsec L2TP и IKEv2. Ещё набирает большую популярность WireGuard, но его рассматривать в этой статье я не буду (возможно напишу как-нибуть отдельную статью).

OpenVPN — считается самым простым и популярным вариантом, у которого скорость, защита и надежность на высоком уровне, но требует установки клиентского приложения, что не всегда удобно.

По самостоятельной настройке OpenVPN продвинутым пользователям я рекомендую эту статью. В этом руководстве предполагается, что центр сертификации находится на отдельном сервере Ubuntu 20.04, и как его сделать там тоже сказано, а Oracle нам как раз даёт две VPS. Хотя технически возможно использовать сервер OpenVPN на той же машине — компьютере в качестве центра сертификации, это не рекомендуется, поскольку это открывает вашу VPN для некоторых уязвимостей безопасности. Согласно официальной документации OpenVPN , вы должны разместить свой CA на автономном компьютере, который предназначен для импорта и подписи запросов на сертификаты.

L2TP/IPSec — собственно, именно этот протокол мы будем использовать в этой статье, т.к. найденный на github сценарий автоматической установки и настройки мне показался самым простым для новичков и «чайников» + подойдёт для установки не только на Ubuntu но и на Debian и CentOS. Недостаток этого протокола, пожалуй в том, что  он считается медленным и стандартные порты может закрыть ваш интернет-провайдер или сетевой администратор.

PPTP — устаревший протокол, у которого конечно же достойная скорость подключения, но в плане защиты и конфиденциальности он на самом низком уровне и использовать его в проектах «Умного дома», я точно не рекомендую!

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

Я даже начал написание своего поста с него, адаптируя эту инструкцию под VPS сервер от Oracle:

но в итоге она мне показалось сложной для новичков и «чайников», удалил её  и решил оставить просто эту ссылку на оригинал, для продвинутых пользователей 😉

На самом деле инструкций по ручной и автоматической установке VPN — сервера по любому протоколу в интернете существует +100500 и ещё столько же, поэтому напомню про свой disclaimer )))

Ну и наконец переходим к самому главному:

Установим свой VPN сервер

Особенности сервера, который мы будем устанавливать:— Быстрее IPsec/XAuth («Cisco IPsec») и поддерживается режим IKEv2;— Доступен предварительно созданный Docker-образ VPN-сервера; — Полностью автоматизированная настройка IPsec VPN-сервера;

— Инкапсулирует весь трафик VPN в UDP — протокол ESP не нужен;

— Протестировано с Ubuntu, Debian, CentOS / RHEL и Amazon Linux 2

Вся наша установка сводится  к запуску сценария автоматической настройки с githab, мы лишь подготовим систему, пропишем 20-и значный ключ IPSec, логин и пароль для VPN + откроем порты для VPN в VPS от Oracle.

Другие варианты установки + дополнительная настройка IKEv2 (рекомендуется) смотрите в документации автора скрипта. Для параноиков — это «open source», исходный код скрипта смотрим там же 🙂

Подключаемся через PuTTy по SSH к своему серверу (Как? В конце предыдущего постамы это уже делали.)

1) Для получения списка новых пактов, выполните:

sudo apt-get update

2) Для выполнения обновления пакетов, выполните:

sudo apt-get upgrade

Не забываем нажать «»Y» — «Enter» ))

3) Скачиваем скрипт командой:

wget https://git.io/vpnsetup -O vpnsetup.sh

4) После завершения, открываем vpnsetup.sh для редактирования:

sudo nano -w vpnsetup.sh

В котором в одинарных кавычках указываем свои значения:

YOUR_IPSEC_PSK='Защищенный PSK IPsec должен состоять мин из 20 случайных символов.' YOUR_USERNAME='Ваш логин для VPN' YOUR_PASSWORD='Ваш пароль для VPN'

5) Сохраняем и закрываем файл, нажав CTRL + X, Y, а затем ENTER.

6) Запускаем скрипт и идём на пару минут пить кофе ))

sudo sh vpnsetup.sh

Ф С Ё !!! Готово !!! )))

В случае с нашим бесплатном VPS сервером от Oracle конечно ещё не всё )))

Нужно ещё открыть порты UDP 500 и 4500 для VPN на VPS от Oracle.

Для этого открываем ссылку в письме, которая пришла после регистрации в Oracle, вводим логин и пароль и попадаем в свою учетку, где следуем по пути:Сети — Виртуальные облачные сети — vcn- (ВАШ) — Сведения о списках безопасности

Альтернативный способ попасть туда из главного окна: «Настроить сеть с помощью мастера», «Запуск мастера VNC»  нужно нажать «отмена», кликаем на свой «VNC-номер», далее в «ресурсах» нажимаем на «Списки безопасности» и кликаем на «Default Security List for vcn-номер»

где добавляем правила для входящего трафика:

Если не знаете, как настроит клиентов IPsec / L2TP VPN, то можете почитать например — ЗДЕСЬ.

Скорость этого VPN соединения (локальная 80 МБ/сек) с сервером в Амстердаме у меня получилась такая (спустя пару дней до 40-50 Мб/с):

UPD:  На всякий случай настройки (открыть порты для этой VPN) для файрволла IPTABLES (мне не потребовалось):

sudo iptables --policy INPUT ACCEPTsudo iptables -F sudo iptables -A INPUT -p udp --dport 500 -m state --state NEW -j ACCEPT sudo iptables -A INPUT -p udp --dport 4500 -m state --state NEW -j ACCEPT sudo netfilter-persistent save sudo ufw disable

UPD2: Исправляем проблему подключения к L2TP/IPSec VPN серверу за NAT

+49

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

К сожалению, каждый провайдер оперирует своими настройками, отличающимися по многим пунктам. Первая опция, на которой нужно сконцентрировать внимание – это тип интернет-соединения. Таких типов разработано множество, на все случаи жизни.

В этой нашей заметке мы обсудим подключение к одному из крупнейших российских операторов «Билайн» по протоколу L2TP. При этом не станем обращать внимание на технические детали вроде конкретной модели маршрутизатора.

Будем считать, что наш роутер подключен по классической схеме, изображенной на рисунке ниже:

2605695501-sxema-podklyucheniya.jpgТо есть шнур провайдера напрямую соединен с WAN-портом роутера, а разъем сетевой карты компьютера (как вариант — ноутбука) коммутирован с любым из четырех LAN-разъемов на задней панели устройства.

В этом случае конфигурирование сведется к последовательности двух операций: к настройке протокола TCP/IP на персоналке и настройке опций беспроводной сети на самом роутере. Приведем краткую инструкцию по настройке протокола L2TP Beeline, имея в виду этого конкретного провайдера.

Поработаем с компьютером

Первым делом необходимо задать правильные параметры TCP/IP на компьютере, подключенном к маршрутизатору. Делаем это следующим образом:

  • Заходим в меню «Пуск».
  • Переходим в «Панель Управления», далее движемся через «Сеть и Интернет» и «Центр управления сетями и общим доступом» в раздел «Управление сетевыми подключениями» и подраздел «Изменения параметров адаптера».
  • Появится окно имеющихся на компьютере соединений с сетью, в котором нужно будет выбрать соединение, маркированное как «Подключение по локальной сети».
  • Щелкаем по его ярлыку правой кнопкой мышки и в раскрывшемся контекстном меню выбираем пункт «Свойства»
  • Перед нами возникнет еще одно окошко со списком сетевых компонентов. В этом списке нужно выбрать строку «Протокол Интернета версии 4» и нажать на кнопку «Свойства».
  • Появится окно параметров протокола, в котором нужно выставить автоматическое назначение IP-адреса и такое же автоматическое назначение адресов DNS-серверов.2605695502-vystavit-avtomaticheskoe-naznachenie-ip-adresa.jpg
  • Сохраняем сделанные изменения.

Таких установок требуют и «Билайн», и почти любой другой провайдер.

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

Чтобы настроить Билайн на маршрутизаторе, поступаем следующим образом:

  • Запускаем на компьютере браузер.
  • В адресной строке вводим 192.168.1.1.
  • В конфигураторе выбираем раздел WAN.
  • В поле «Тип подключения» задаем значение «L2TP».
  • В поля «Имя пользователя» и «Пароль» вносим данные из договора.
  • В поле «Сервер» записываем адрес Билайн vpn-сервера: tp.internet.beeline.ru.

Затем перебираемся в раздел «Беспроводная сеть» и расставляем опции так, как показано на следующем рисунке:

PR-12408_Mikrotik_750x394_blog_main_vk@2x.png

Ранее мы писали про установку и базовую настройку Mikrotik CHR на виртуальные серверы. В этой статье мы выполним настройку VPN-сервера на базе Cloud Hosted Router и подключим клиентские устройства к настроенному VPN.

При написании данной статьи использовался облачный сервер со следующими характеристиками:

  • 1 vCPU;
  • 512 МБ RAM;
  • 5 ГБ быстрый диск.

Операционной системой выбрана актуальная на момент написания статьи Stable-версия RouterOS: 6.47.6. Мы предполагаем, что читатель уже установил MikroTik CHR и провел первичную настройку.

Несмотря на то, что в статье описана настройка на Cloud Hosted Router, эта инструкция может использоваться и для физических маршрутизаторов с RouterOS.

Общие настройки

Создание пула IP-адресов

При подключении к VPN клиент «входит» в локальную сеть с VPN-сервером. Это требует серой подсети и списка доступных для клиента адресов, называемых пул. Создать пул можно следующей командой:

/ip pool add name=<название> ranges=

Мы выделили 253 адресов в подсети 172.24.0.0/24 и назвали ее vpn-pool.

/ip pool add name=vpn-pool ranges=172.24.0.1-172.24.0.253

Обратите внимание, что адрес 172.24.0.254 не входит в пул адресов, так как этот адрес будет принадлежать VPN-серверу и не должен быть выделен клиенту.

Создание PPP-профиля

«Связать» пул адресов для клиентов и адрес VPN-сервера можно с помощью PPP-профиля. Используем следующую команду:

/ppp profile add name=vpn-profile local-address=172.24.0.254 remote-address=vpn-pool use-mpls=no use-compression=yes use-encryption=yes only-one=no

Рассмотрим параметры команды:

  • name=vpn-profile — задаем имя профиля;
  • local-address=172.24.0.254 — задаем адрес VPN-сервера;
  • remote-address=vpn-pool — указываем использовать пул vpn-pool для выдачи адресов клиентам;
  • use-mpls=no — не используем MultiProtocol Label Switching;
  • use-compression=yes — включаем сжатие трафика;
  • use-encryption=yes — включаем шифрование;
  • only-one=no — разрешаем более одного одновременного подключения для пользователя.

Создать локальную сеть между VPN-сервером и VPN-клиентом — это половина проблемы. Далее необходимо разрешить клиенту выходить в интернет через VPN-подключение. Для этого необходимо настроить NAT. Сделать это можно следующей командой:

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

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

Далее создаем пользователя. Сделать это можно следующей командой:

/ppp secret add name=<логин> password=<пароль> service=<тип сервера>

Параметр service определяет, какие сервисы доступны пользователю. Мы планируем использовать пользователя для демонстрации четырех протоколов VPN, поэтому установим значение any. Создаем пользователя vpn-user с паролем vpn-password с доступом к любому сервису:

/ppp secret add name=vpn-user password=vpn-password service=any

Пользователь создан. Однако, некоторые VPN-протоколы требуют сертификатов.

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

Если вы планируете использовать OpenVPN или SSTP, то со стороны сервера требуются два сертификата: CA (Certification authority, Центр Сертификации) и серверный (server). Первый сертификат является «неоспоримым» и им можно подтверждать самоподписанные сертификаты, созданные для сервера и для клиентов.

Сперва выберем Common Name (CN) для центра сертификации. Здесь нет специфических требований, поэтому допустимо использовать любое имя. Мы используем имя хоста в качестве CN. В параметре ca-crl-host необходимо указать IP-адрес или домен VPN-сервера.

/certificate add name=ca-template common-name="MikroTik" days-valid=3650 key-usage=crl-sign,key-cert-sign  /certificate sign ca-template ca-crl-host=185.X.X.83 name="MikroTik"

Далее создаем сертификат для VPN-сервера и подписываем его только созданным CA-сертификатом. Обратите внимание, что CN для сертификата сервера должен быть строго доменом или IP-адресом.

/certificate add name=server-template common-name=185.X.X.83 days-valid=3650 key-usage=digital-signature,key-encipherment,tls-server /certificate sign server-template ca="MikroTik" name="server@MikroTik"

Для протокола SSTP значение поля CN является критичным. Если CN является IP-адресом, то VPN-клиенту нужно подключаться именно по IP-адресу. При подключении по домену произойдет ошибка.

Сертификат CA необходимо экспортировать, чтобы клиент доверял сертификату сервера. Файл:

/certificate export-certificate "MikroTik" export-passphrase=""

После экспорта на вкладке Files в веб-интерфейсе можно будет скачать файл cert_export_MikroTik.crt. Сохраните его, он потребуется далее.

Настройка VPN-сервера

Мы рассмотрим четыре протокола для организации VPN:

  • PPTP;
  • L2TP/IPsec;
  • OpenVPN;
  • SSTP.

Каждый из протоколов обладает своими плюсами и минусами. Рассмотрим протоколы поближе.

PPTP

Начнем с самого легкого в настройке протокола Point-to-Point Tunneling Protocol (PPTP). Данный протокол не требует большого количества вычислительных ресурсов и поддерживается «из коробки» множеством операционных систем. Среди минусов — наличие серьезных уязвимостей в протоколах аутентификации.

Запустить VPN-сервер можно в одну команду:

/interface pptp-server server set enabled=yes default-profile=vpn-profile authentication=mschap2

В качестве клиента возьмем смартфон под управлением ОС Android 8.0.0.

1_PPTP_1-1525x1356.jpg
Добавление VPN и подключение средствами ОС Android

Подключение по PPTP не требует дополнительного программного обеспечения и не доставляет проблем. Однако, если хочется чуть больше безопасности, то следует посмотреть в сторону протоколов L2TP/IPsec.

L2TP/IPSec

Как и PPTP, протоколы L2TP/IPsec поддерживаются большим количеством операционных систем. Более того, используемый в IPsec алгоритм шифрования AES на данный момент не имеет серьезных уязвимостей, что гарантирует относительную безопасность и конфиденциальность при использовании L2TP/IPsec.

Настройка L2TP/IPsec VPN-сервера похожа на настройку PPTP-сервера:

/interface l2tp-server server set enabled=yes default-profile=vpn-profile authentication=mschap2 use-ipsec=required ipsec-secret=super-secret

Обратите внимание на параметр ipsec-secret. Этот параметр — общий ключ IPsec. Так как мы используем аутентификацию по паре логин/пароль без сертификата, то в настройках клиента необходимо выбирать L2TP/IPsec PSK или L2TP/IPsec с общим ключом.

2_L2TP-IPsec_1-1525x1356.jpg
Выбор L2TP/IPsec PSK и ввод ipsec-secret

Хотя L2TP/IPsec является хорошим компромиссом, стоит оценить и OpenVPN.

OpenVPN

OpenVPN — современная технология с открытым исходным кодом. Данное решение предоставляет безопасность, высокую скорость работы и умение маскироваться под HTTPS-трафик. К сожалению, для использования OpenVPN необходимо устанавливать дополнительное программное обеспечение, например, официальный OpenVPN Connect, а также работать с сертификатами и конфигурационными файлами ovpn.

Включаем OpenVPN-сервер с указанием серверного сертификата, который сгенерировали ранее:

/interface ovpn-server server set auth=sha1 certificate="server@MikroTik" cipher=aes128,aes192,aes256 default-profile=vpn-profile enabled=yes require-client-certificate=yes

Создаем шаблон клиентского сертификата:

/certificate add name=client-template common-name="client" days-valid=3650 key-usage=tls-client

Генерируем сертификат для пользователя vpn-user на основе шаблона:

/certificate add name=client-vpn-user copy-from=client-template common-name="vpn-user@MikroTik" /certificate sign client-vpn-user ca="MikroTik" name="vpn-user@MikroTik"

Экспортируем сертификат и ключ. Обратите внимание, что пароль во время экспортирования указан пароль super-secret-password, который необходимо будет ввести при импорте в VPN-клиенте.

/certificate export-certificate "vpn-user@MikroTik" export-passphrase="super-secret-password"

В веб-интерфейсе на вкладке Files можно найти следующие файлы:

  • cert_export_vpn-user@MikroTik.crt;
  • cert_export_vpn-user@MikroTik.key.

Скачиваем указанные файлы и составляем конфигурационный файл ovpn:

client dev tun proto tcp-client remote  1194 nobind persist-key persist-tun cipher AES-128-CBC auth SHA1 pull verb 2 mute 3   auth-user-pass   # Добавляем эту строчку, чтобы отправлять все запросы через VPN redirect-gateway def1   <ca> # Вставляем содержимое cert_export_MikroTik.crt </ca><cert> # Вставляем содержимое cert_export_vpn-user@MikroTik.crt </cert><key> # Вставляем содержимое cert_export_vpn-user@MikroTik.key </key>

Передаем ovpn-файл на смартфон и импортируем его через OpenVPN Connector.

3_ovpn_1-1525x904.jpg
Импортирование профиля ovpn

В качестве Private Key Password используем пароль, указанный при экспортировании. Данные пользователя для подключения остались неизменными.

SSTP

SSTP — это проприетарный протокол от Microsoft, обладающий достоинствами OpenVPN. Данный протокол поддерживается ОС Microsoft Windows, начиная с Vista SP1, а на других ОС требует установки дополнительного ПО.

Для запуска сервера достаточно выполнить одну команду:

/interface sstp-server server set enabled=yes certificate=server@MikroTik default-profile=vpn-profile

Так как данный протокол поддерживается Windows, то проверим работу сервера на Windows 10. В первую очередь необходимо установить центр сертификации. Скачиваем cert_export_MikroTik.crt и открываем двойным кликом.

4_import_ca.png
Импорт сертификатов

Откроется окно, которое предупреждает, что нет доверия к этому центру сертификации. Это исправляется установкой сертификата. При установке выбираем хранилище «локальный компьютер» и на следующем шаге помещаем сертификат в «доверенные корневые центры сертификации». Теперь можно приступить к настройке VPN-подключения.

5_sstp_setup.png
Настройка SSTP VPN на Windows 10

Открываем Параметры Windows — Сеть и Интернет — VPN и добавляем VPN-подключение, вводим имя или адрес сервера как было указано в сертификате сервера и вводим свои логин-пароль. VPN-подключение установлено.

Заключение

Мы рассмотрели настройку VPN-серверов на четырех разных протоколах. Надеемся, что эта инструкция поможет вам создать собственный виртуальный маршрутизатор на базе Mikrotik CHR.

Используемые источники:

  • https://huny.blog/vpn-server-ipsec-l2tp-na-ubuntu/
  • https://nastrojkin.ru/provider/beeline/nastrojka-l2tp-beeline.html
  • https://selectel.ru/blog/vpn-on-mikrotik-chr/

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации