IKEv2 на UbuntuДобрый день, дорогие гости и читатели. Сегодня я публикую последнюю на ближайшее время статью на тему запуска своего VPN и эта статья о запуске собственного IKEv2 на Ubuntu 16.04.

Для выполнения задачи нам понадобится:

  • VPS или выделенный сервер с установленной ОС Ubuntu 16.04 LTS и внешним IP адресом;
  • Зарегистрированный и делегированный домен;
  • Уметь добавлять записи в DNS вашего домена.


Напоминаю, что дешевые VPS во Франции для запуска своего VPN вы можете посмотреть здесь. Для примера, в статье я использую вымышленные данные: поддомен vpn.alexell.ru для подключения к VPN, внешний IP сервера 55.55.55.55 и почту на домене test@alexell.ru. При настройке своего IKEv2 на Ubuntu по этой статье, заменяйте эти значения на свои собственные.

Итак, если все из списка выше у вас имеется, тогда начнем приготовления:

  1. Добавляем A запись в DNS домена чтобы сопоставить поддомен vpn.alexell.ru с IP адресом сервера 55.55.55.55, на котором будем запускать VPN.
  2. Создаем почту в собственном домене, например test@alexell.ru;
  3. Определяемся с внутренней подсетью для клиентов. Для примера возьмем 10.10.1.0/24;
  4. Подключаемся по SSH к нашему VPS, например через PuTTY.

Настройки системы и фаервола

Открываем файл /etc/sysctl.conf и добавляем в самый конец следующие строки:

Это активирует пересылку пакетов и отключит ICP-редиректы.

Стираем все правила фаервола командой iptables -F. Если у вас вдруг не установлен iptables, то просто установите его командой apt-get install iptables.

Узнайте название вашего сетевого интерфейса командой ifconfig. Запомните буквенный префикс, он может быть eth, ens или абсолютно другим. Например, если ваш интерфейс называется ens3, как было у меня, то при добавлении правил фаервола ниже, мы будем использовать обозначение ens+.

Для корректной работы NAT и протоколов IKE и ESP добавляем следующие правила:

Не забудьте заменить 55.55.55.55 на внешний IP вашего сервера.

Сохраняем правила NAT в файл командой:

Открываем файл /etc/network/interfaces и добавляем в конец файла строку:

Открываем файл /etc/rc.local и добавляем в конец файла, но до строки exit 0 следующую строку:

Теперь можно перезагрузить сервер для применения всех изменений.

Получение SSL сертификата

Клиенты, подключающиеся к нашему IKEv2 будут проверять подлинность сервера, дабы исключить возможность того, что какой-то другой сервер «притворяется» нашим (атаки класса MITM). Получить SSL сертификат можно в любом действующем удостоверяющем центре за деньги, например GlobalSign и Comodo, но мы воспользуемся бесплатным Let’s Encrypt.

Установим пакет software-properties-common, который позволит подключать внешние репозитории:

Установим утилиту certbot:

Получаем сертификат следующей командой:

После окончания процедуры, в папке /etc/letsencrypt/live/vpn.alexell.ru появятся файлы: chain.pem - корневой и промежуточный сертификаты, cert.pem - сертификат сервера и privkey.pem - приватный ключ.

Установка и настройка IPsec

На этом шаге мы установим демон для работы IPsec и набор плагинов, в которых есть нужный нам EAP-MSCHAPv2 для аутентификации клиентов.

Теперь нам необходимо поместить полученные файлы сертификатов в директорию ipsec.d, внутри которой находятся cacerts (для корневых сертификатов), certs (для сертификатов X.509 и PGP) и private для приватных ключей.

Для этого выполним команды:

Открываем файл /etc/ipsec.conf, стираем его содержимое и добавляем следующую конфигурацию:

Здесь leftcert - имя сертификата из /etc/ipsec.d/certs, leftid - ваш поддомен, на который был выдан сертификат, rightsourceip - пул внутренних IP адресов для клиентов, rightdns - DNS сервер, который будет использоваться при соединении через наш VPN.

Учетные записи для наших клиентов IKEv2  мы будем добавлять в файл /etc/ipsec.secrets, откройте его и замените содержимое на следующую конфигурацию:

Здесь : RSA key.pem - имя файла приватного ключа из /etc/ipsec.d/private, user - имя пользователя, password - пароль. В будущем, учетные записи вы можете добавлять в этот файл по аналогии.

Перезапускаем демон:

Теперь можно проверить корректность подключения сертификатов. Для этого выполните команду ipsec listcerts. Результат выполнения команды будет примерно такой:

Обратите внимание, фраза has private key должна быть обязательно.

Получить информацию о загруженной конфигурации и текущем состоянии можно командой:

Теперь можно подключиться к вашему новому VPN и убедиться что все работает. При подключении, выбирайте тип IKEv2, более подробные инструкции по подключению с разных устройств вы можете найти здесь.

Дополнительная информация об IKEv2 на Ubuntu

Авторизация и проблемы с подключением

При использовании приведенной конфигурации, клиент с одной учетной записью сможет иметь только одно открытое соединение с VPN одновременно, т.е. если под этим же логином произойдет второе подключение при активном первом - первое будет разъединено. Если вы хотите сделать одну общую учетную запись, например anonymous, то пропишите логин и пароль в ipsec.secrets, затем откройте ipsec.conf и измените uniqueids=yes на uniqueids=no.

Как я уже писал выше, инструкция по подключению с разных устройств находится здесь. Если у вас возникнут проблемы с подключением или вылетами на некоторых мобильных устройствах (вообще, эту конфигурацию я проверял только на Windows 7, 10 и iOS) или появится желание настроить свой IKEv2 на Ubuntu таким образом, чтобы под одной учетной записью можно было подключаться одновременно с одного мобильного устройства и с одного ПК, то в файле ipsec.conf замените единую секцию подключения на несколько секций под разные устройства (для лучшей совместимости).

Убираем эту секцию:

Добавляем вместо нее 2 секции:

Можно еще попробовать такой вариант:

Обновление сертификатов

Как известно, сертификаты Let’s Encrypt выдаются на 3 месяца, после чего их необходимо обновлять и снова копировать в директорию ipsec.d. Для автоматизации этого процесса можно сделать следующее:

Создаем в удобном для вас месте исполняемый файл. Для примера я создал его в корневой директории сервера и назвал updatecerts.sh. Заполняем его следующим образом:

Как видите, это уже знакомая вам процедура копирования файлов сертификата и перезагрузка демона ipsec. Не забудьте исправить путь, откуда берутся сертификаты.

Теперь добавляем ежедневное ночное задание в etc/crontab:

Не забудьте изменить root на имя пользователя от которого хотите выполнять команду и путь к созданному скрипту.

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

Хранение логов

Если вы не хотите хранить логи работы IKEv2 на Ubuntu и подключений клиентов, тогда можно писать их в /dev/null, для чего просто выполните команды:

Один комментарий на Поднимаем свой VPN — IKEv2 на Ubuntu

  1. Дмитрий - 19.06.2018 - 19:19 Ответить

    при выполнении на амазоне

    iptables -t nat -A POSTROUTING -j SNAT —to-source мойайпи -o eth+

    всё наглухо виснет если при этом запомнить iptables и встроить его в автозагрузку а потом перегрузить сервер, то к нему больше не достучаться — приходится сносить и устанавливать заново

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *