Быстрый VPN через IKEv2

VPN

На FreeBSD для настройки IKEv2 сервера лучше всего использовать OpenIKED (порт security/openiked). Это современное, безопасное и простое в настройке решение, которое является портированной версией daemon из OpenBSD.

Основная инструкция по настройке (на базе OpenIKED)

  1. Установка OpenIKED
    pkg install openiked

Или из портов:
cd /usr/ports/security/openiked/ && make install clean

После установки добавьте сервис в автозагрузку:
sysrc iked_enable=»YES»

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

Для аутентификации клиентов потребуется инфраструктура открытых ключей (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) нужно будет установить позже на каждом клиенте.

  1. Настройка демона (/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: пул адресов для клиентов.

  1. Настройка файервола (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

  1. Запуск и проверка

Запустите сервис:
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-режиме).

О нас: kot@liapold.ru