swanctl: Настройка подключения с аутентификацией по EAP-MSCHAPV2

IKEv2 VPN StrongSwan swanctl swanctl.conf EAP-MSCHAPv2

В этой статье рассматривается подготовка конфигурационного файла swanctl для strongSwan.
Предполагается, что CA, серверные и клиентские сертификаты уже созданы и были подробно разобраны в предыдущей статье — здесь мы к этому возвращаться не будем.


Где находятся конфигурации strongSwan и swanctl

В современных версиях strongSwan используются два разных подхода к конфигурации:

strongSwan (демон charon)

Основной конфигурационный файл: /etc/strongswan.conf

Используется для:

  • глобальных параметров демона
  • включения и настройки плагинов
  • логирования

swanctl (современный интерфейс управления)

Основной конфигурационный файл: /etc/swanctl/swanctl.conf

Дополнительные каталоги:

/etc/swanctl/x509ca/    # CA сертификаты
/etc/swanctl/x509/      # сертификаты серверов/клиентов
/etc/swanctl/private/   # приватные ключи
/etc/swanctl/crls/      # CRL (если используется проверка отзывов)

Используется для:

  • описания VPN-подключений
  • пулов адресов
  • учетных данных (EAP)
  • политик и CHILD_SA

⚠️ ipsec.conf и ipsec.secrets в этом подходе не используются.


Пример конфигурации: IKEv2 + EAP-MSCHAPv2

Ниже приведён пример swanctl.conf, который:

  • создает IKEv2-подключение
  • аутентифицирует пользователя по EAP-MSCHAPv2
  • аутентифицирует сервер по сертификату (server-cert.pem)
  • раздает клиентам адреса из пула
  • подходит для Windows, macOS, iOS, Android

Пример /etc/swanctl/swanctl.conf

connections {
  ikev2-eap {
    version = 2
    rekey_time = 0
    mobike = yes
    send_cert = ifasked
    unique = never
    proposals = aes256-sha256-modp2048,aes256-sha1-modp2048,aes256-sha256-modp1024,aes256-sha1-modp1024

    local {
      auth = pubkey
      certs = server-cert.pem
      id = vpn.example.com
    }

    remote {
      auth = eap-mschapv2
      eap_id = %any
    }

    children {
      ikev2-eap {
        local_ts  = 0.0.0.0/0, ::/0
        esp_proposals = aes256-sha256,aes256-sha1
        rekey_time = 0
        dpd_action = trap
      }
    }

    pools = ipv4-pool, ipv6-pool
  }
}

pools {
  ipv4-pool {
    addrs = 172.42.2.0/24
    dns = 8.8.8.8,8.8.4.4
  }
  ipv6-pool {
    addrs = fe80::/112
  }
}

secrets {
  eap-user {
    id = user1
    secret = StrongPa$sw0rd
  }
}

Назначение основных секций конфигурации

connections

Описывает IKE-подключения:

  • параметры IKEv2
  • методы аутентификации
  • сертификаты
  • наборы шифров
  • дочерние SA (CHILD_SA)

Каждый блок внутри connections — это логическое VPN-подключение.


local

Описывает сторону сервера:

  • auth = pubkey — аутентификация по сертификату
  • certs — сертификат сервера
  • id — IKE identity сервера (обычно FQDN)

remote

Описывает клиентскую сторону:

  • auth = eap-mschapv2 — пользовательская аутентификация
  • eap_id = %any — разрешает любое имя пользователя

children

Описывает CHILD_SA (туннели передачи трафика):

  • local_ts / remote_ts — какие сети маршрутизируются
  • esp_proposals — алгоритмы ESP

pools

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

  • IPv4 / IPv6 диапазоны
  • DNS-серверы
  • другие параметры сети

secrets

Хранит учетные данные EAP:

  • логин (id)
  • пароль (secret)

Используется только для EAP, не для сертификатов.

Итог

Конфигурация swanctl.conf позволяет полностью описать VPN-подключение без использования устаревшего ipsec.conf.