На FreeBSD для настройки IKEv2 сервера лучше всего использовать OpenIKED (порт security/openiked). Это современное, безопасное и простое в настройке решение, которое является портированной версией daemon из OpenBSD.
Основная инструкция по настройке (на базе OpenIKED)
- Установка OpenIKED
pkg install openiked
Или из портов:
cd /usr/ports/security/openiked/ && make install clean
После установки добавьте сервис в автозагрузку:
sysrc iked_enable=»YES»
- Генерация сертификатов
Для аутентификации клиентов потребуется инфраструктура открытых ключей (PKI). Можно сгенерировать сертификаты через openssl вручную, либо использовать встроенную утилиту ikectl.
Создаём удостоверяющий центр (CA) и сертификат сервера:
Создаём структуру папок для CA (если используется ikectl)
ikectl ca vpnca init
Подписываем сертификат сервера (замените vpn.example.com на ваш домен или IP)
ikectl ca vpnca certificate vpn.example.com —server —name server-cert
Если вы используете самоподписанные сертификаты через openssl, корневой сертификат CA (ca.crt) нужно будет установить позже на каждом клиенте.
- Настройка демона (/etc/iked.conf)
Создайте или отредактируйте файл конфигурации. Пример для «road warrior» с выдачей клиентам IP из пула:
/etc/iked.conf
Секция конфигурации для IKEv2
ikev2 «public» esp \
from any to 10.20.30.0/24 \ # Пул IP-адресов для клиентов
local vpn.example.com peer any \ # local = ваш сервер
srcid vpn.example.com \ # Идентификатор сервера (должен совпадать с CN сертификата)
config address 10.20.30.0/24 \ # Настройка клиента: выдать IP из пула
config name-server 8.8.8.8 \ # DNS для клиентов
tap enc0 # Интерфейс для обработки трафика
Важные параметры:
· local: адрес или FQDN вашего сервера.
· srcid: должен совпадать с Common Name (CN) вашего серверного сертификата.
· config address: пул адресов для клиентов.
- Настройка файервола (PF)
Для работы VPN нужно открыть порты для IKE (500) и NAT-Traversal (4500), а также настроить NAT для клиентов.
Добавьте в /etc/pf.conf:
Определим переменные
ext_if = «vmx0» # Ваш внешний интерфейс
vpn_network = «10.20.30.0/24»
Разрешаем трафик IKEv2
udp_services = «{ isakmp, ipsec-nat-t }» # Порт 500 и 4500
pass in on $ext_if proto udp to port $udp_services
Разрешаем ESP (Encapsulating Security Payload)
pass in on $ext_if proto esp
Настраиваем NAT для клиентов VPN
nat on $ext_if from $vpn_network to any -> ($ext_if)
Включаем форвардинг (если не включен глобально)
pass in quick on enc0 all
pass out quick on enc0 all
Примените правила:
pfctl -f /etc/pf.conf
Не забудьте включить форвардинг пакетов в ядре:
sysctl net.inet.ip.forwarding=1
Сделать изменение постоянным
echo ‘net.inet.ip.forwarding=1’ >> /etc/sysctl.conf
- Запуск и проверка
Запустите сервис:
service iked start
Для просмотра установленных ассоциаций безопасности (SA) используйте:
setkey -D
Если что-то идёт не так, запустите демон в отладочном режиме:
iked -d -vv -f /etc/iked.conf
Альтернативный вариант: StrongSwan
Если вам по какой-то причине не подходит OpenIKED, можно использовать StrongSwan. Однако настройка там сложнее и требует ручного конфигурирования файла ipsec.conf и работы с таблицами маршрутизации.
Пример базовой конфигурации для StrongSwan (/usr/local/etc/ipsec.conf) из обсуждений на форумах:
config setup
charondebug=»ike 1, knl 1, cfg 0″
uniqueids=no
conn ikev2-vpn
auto=add
keyexchange=ikev2
left=%any
leftid=1.1.1.1 # IP сервера
leftcert=server-cert.pem
leftsubnet=0.0.0.0/0
right=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8
eap_identity=%identity
Диагностика
Проверка портов: Убедитесь, что порты 500/udp и 4500/udp доступны снаружи (sockstat -4 | grep -E ‘500|4500’).
3.
Логи клиента: Если клиенты не подключаются, первым делом смотрите логи на сервере (/var/log/messages или запуск iked в debug-режиме).
