# OpenVPN

**OpenVPN** ([https://openvpn.net](https://openvpn.net)) - технология виртуальной частной сети (VPN).

Подключение OpenVPN к Blitz Identity Provider выполняется по протоколу RADIUS и состоит из двух этапов:

- Этап 1. Настройки на стороне Blitz Identity Provider
- Этап 2. Настройки на стороне OpenVPN

### Этап 1. Настройки на стороне Blitz Identity Provider

В консоли управления *Blitz Identity Provider* перейдите в раздел **RADIUS** и выполните следующие действия:

1. Нажмите на **Сегменты сети** и создайте новый сегмент. Задайте следующие параметры:

- **Имя**: укажите имя сети. Например, `openvpn`.
- **Подсеть**: укажите `192.168.122.96/32`.
- **Общий ключ**: задайте секретный ключ для безопасной аутентификации приложения.

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-1-b.png)

2. Нажмите **Сохранить**.
3. Перейдите на вкладку **Процедуры обработки запросов** и задайте параметры:

- **Статус**: переместите переключатель в режим on.
- **Идентификатор процедуры**: укажите идентификатор процедуры. Например, `OpenVPN2FA`.

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-3-b.png)

4. Вставьте код процедуры:

```java
package com.identityblitz.idp.radius.flow;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import com.identityblitz.idp.radius.flow.RadiusResult.*;

public class OpenVPN2FA implements RadiusFlow {

  private final Logger logger =
LoggerFactory.getLogger("com.identityblitz.idp.flow.radius");

  public String loginN12(final String login) {
    return login;
}

  public RadiusResult next (final RadiusContext context) {
    if (context.factor() == 1) {
      return RadiusResult.challenge(Challenges.password());
    } else if (context.factor() == 2) {
       final java.util.Map<String, String> answers = new
java.util.HashMap<String, String>();
      answers.put("1", "sms");
      answers.put("2", "totp");
      return RadiusResult.dialog("challengeChoose", answers);
    } else {
      return  RadiusResult.authenticated(context.subject());
    } 
}

  public RadiusResult dialog(final RadiusContext context,
                             final String message,
                             final java.util.Map<String,
String> answers,
                             final String answer) {
    if (message.equals("challengeChoose")) {
      final String challenge = answers.get(answer);
      if(challenge != null) {
return
RadiusResult.challenge(Challenges.byDialogName(challenge));
      } else {
        return RadiusResult.dialog(message, answers);
      }
    } else {
        return RadiusResult.rejected("unsupportedMessage");
    } 
  }

}

```

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-4-b.png)

5. Нажмите **Сохранить** и **Активировать**.
6. В консоли управления *Blitz Identity Provider* перейдите в раздел **Приложения** и **Создайте** новое приложение, задав его базовые настройки:

- **Идентификатор (entityID или client\_id)**: введите имя приложения. Например, `openvpn`.
- **Название**: укажите имя приложения OpenVPN. Например, `openvpn access server`.
- **Домен**: `http://localhost`.

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-5-b.png)

7. Нажмите **Сохранить**.
8. Далее нажмите кнопку **Параметры** ![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/button-1.png) у предложения openvpn и отредактируйте параметры приложения:

- **Протоколы**: выберите `RADIUS` и нажмите **Сконфигурировать**
- **Процедура обработки**: выберите `OpenVPN2FA`

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-6-b.png)

9. Нажмите **Сохранить**.
10. Далее перейдите в раздел **RADIUS** на вкладку **Сегменты сети**. Укажите **Приложение по умолчанию**: `openvpn access server`.

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-7-b.png)

11. Откройте для редактирования конфигурационный файл `/etc/blitz-config/custom_messages/messages` и добавьте в него строку `radius.display.dialog.challenge.name.sms=SMS`.
12. Перезапустите приложение blitz-idp командой `systemctl restart blitz-idp`.

### Этап 2. Настройки на стороне OpenVPN

1. В веб-консоли OpenVPN в разделе **Authentication** перейдите в **Settings** и укажите RADIUS в качестве подсистемы аутентификации по умолчанию.

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-1.png)

2. В разделе **Authentication** перейдите в **RADIUS** и укажите параметры подключения к Blitz, как указано ниже.

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-2.png)

3. В консоли сервера выполните команду для создания файла с настройками подключения: `/usr/local/openvpn_as/scripts/sacli --prefer-tls-crypt-v2 GetGeneric >/tmp/client.ovpn`.

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

1. Перенесите файл настроек на клиента с помощью команды `nmcli connection import type openvpn file ~/tmp/client.ovpn`
2. Далее импортируйте файл с помощью команды `mcli connection modify client vpn.user-name test`

<div id="bkmrk-%D0%92-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D1%82" style="background-color: #fff3cd; border: 1px solid #ffc107; border-radius: 5px; padding: 10px;">В примере используется консольная утилита nmcli для linux</div>3. Подключитесь к тестовой учетной записи с настроенным TOTP с помощью команды `nmcli connection up client`.

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-3.png)

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-4.png)

![](https://docs.identityblitz.ru/kb/uploads/images/gallery/2024-08/ov-5.png)