Поддержка IPv6-пулов
Имя пула IPv6-адресов задается атрибутом Framed-IPv6-Pool в Access-Accept.
Framed-IPv6-Address, Framed-IPv6-Prefix, Delegated-IPv6-Prefix) являются более приоритетными, чем Framed-IPv6-Pool: при наличии в ответе пула и хотя бы одного из вышеперечисленных атрибутов, задающих IPv6 адрес или префикс, PCRF игнорирует Framed-IPv6-Pool
Обнаружив в ответе Радиуса атрибут Framed-IPv6-Pool, PCRF должен:
- обратиться к DHCPv6-серверу за адресом и/или префиксом абонента, передав DHCPv6-серверу имя пула в одной из DHCPv6-опций;
- получив ответ DHCPv6-сервера, сформировать общий ответ авторизации, объединив опции DHCPv6-ответа и атрибуты
Access-Accept
Кофигурирование fastpcrf
В fastpcrf.conf должен быть задан как минимум один DHCPv6-сервер, обслуживающий пулы. Адрес сервера задается в параметре dhcp6_server такого вида:
# Каждый сервер задается отдельным параметром dhcp6_server
# Формат:
# dhcp6_server=[ipv6%dev]{:port}{;option}+
# где:
# ipv6 - адрес DHCPv6-сервера
# dev - имя интерфейса, с которого устанавливать соединение
# port - порт, default=547
# options: дополнительные опции:
# source_ip=address - исходный IPv6-адрес, от имени которого идет запрос на DHCPv6-сервер
# Если source_ip не задан, то:
# - если адрес сервера link-local - берется link-local адрес интерфейса dev
# - если адрес сервера глобальный - берется глобальный адрес интерфейса dev
# relay_ip=address - IPv6-адрес релея. Именно этот адрес учитывает DHCPv6-сервер как адрес релея.
# Если не задан - равен source_ip
# Пример: два DHCPv6-сервера: один с глобальным адресом, второй - с link-local адресом
# dhcp6_server=[2001:4860:4860::8888%eth1];source_ip=2a01:a282:3:11:92b1:1cff:fe18:d298;relay_ip=2001::1
# dhcp6_server=[fe80::92b1:1cff:fe18:d298%em2];relay_ip=2001::1
dhcp6_server=[fe80::92b1:1cff:fe18:d298%em2];relay_ip=2001::1
Каждый DHCPv6-сервер задается в fastpcrf.conf отдельным параметром. Например, два сервера могут быть заданы так:
# Основной сервер - на интерфейсе eth1
dhcp6_server=[fe80::92b1:1cff:fe18:d298%eth1];relay_ip=2001::1
# Резервный сервер - на интерфейсе em2
dhcp6_server=[fe80::92b1:1cff:fe18:4509%em2];relay_ip=2001::1
Поддерживается задание до 16 DHCPv6-серверов. Никакого значения по умолчанию у данного параметра нет - для поддержки Framed-IPv6-Pool обязательно нужно в fastpcrf.conf прописать как минимум один DHCPv6-сервер.
Помимо DHCPv6-серверов, следует также указать, в какой опции DHCPv6-запроса посылать имя пула.
Это делается с помощью параметра dhcp6_poolname_opt. Поддерживаются следующие DHCP-опции:
dhcp6_poolname_opt=1- [15] User-Class. Если опция уже есть, её значение заменяется на имя пулаdhcp6_poolname_opt=2- [17] Vendor-Specific (vendorId=43823, subopt=1). Опция всегда добавляется
Если dhcp6_poolname_opt=0 (default) - имя пула будет передаваться в Vendor-Specific опции.
fastpcrf обращается к DHCPv6-серверам под видом релея, чтобы DHCPv6-трафик был уникастным. Все DHCPv6-запросы всегда шлются на все сервера, указанне в параметрах dhcp6_server. Если сконфигурировано несколько DHCPv6-серверов, PCRF принимает во внимание первый по времени ответ, ответы от остальных DHCPv6-серверов игнорируются.
Особенности выдачи IPv6-адресов/префиксов в СКАТ
Отметим, что в настоящее время СКАТ требует, чтобы клиенту выдавался префикс длиной, задаваемой параметром ipv6_subnetwork в fastdpi.conf (по умолчанию ipv6_subnetwork=64). Это относится как к PD-префиксам, так и к собственно IPv6-адресу, выдаваемому клиенту. То есть по сути клиенту выдается два префикса - PD-префикс и префикс, из которого СКАТ сам формирует полный IPv6-адрес клиента.
Большинство DHCPv6-серверов могут выдавать клиенту PD-префикс любой длины, но не умеют - префикс указанной длины в качестве IPv6-адреса клиента. Другими словами, DHCPv6-серверу невозможно указать "выдавай IPv6-адреса клиентам с таким-то шагом" (например, с шагом /64).
Чтобы обойти это ограничение, СКАТ использует такой трюк: запрашивается только PD-префикс, а DHCPv6-сервер должен выдать абоненту PD-префикс длиной ipv6_subnetwork - 1 (то есть по умолчанию 64 - 1 = 63 - /63 префикс). СКАТ сам делит такой PD-префикс на два /ipv6_subnetwork-префикса: младший префикс - для выделения IPv6-адреса клиенту, а старший - для PD-префикса клиента.
Примеры конфигурирования DHCPv6-сервера Kea
DHCPv6-сервер конфигурируется по-разному в зависимости от того, в какой DHCPv6-опции будет приходить имя пула (параметр dhcp6_poolname_opt).
Ниже даны не полные конфигурационные файлы /etc/kea/kea-dhcp6.conf Kea DHCP, а только выжимки, относящиеся к конфигурированию пула
- пример для опции 17 (
dhcp6_poolname_opt=2)
Формирование DHCPv6-запроса в режиме DHCPv6 Radius Proxy
В режиме DHCP Radius Proxy на DHCPv6-сервер передается оригинальный DHCPv6-запрос абонента с добавлением имени пула в соответствии с параметром dhcp6_poolname_opt. Но у сервера запрашивается только PD-префикс, см. выше "особенности выдачи IPv6-адресов/префиксов в СКАТ".
User-Class: если такая опция уже есть в DHCPv6-запросе абонента, её значение изменяется на имя пула. Если оригинальное значение этой опции важно при конфигурировании DHCPv6-сервера, следует для имени пула использовать опцию 17, которая всегда добавляется
Формирование DHCPv6-запроса для PPPoE-клиентов
Для PPPoE-абонентов PCRF формирует DHCPv6-запрос, в котором Client-Id (опция 1, client DUID) строится как DUID-EN (vendorId=43823, 32 бита), далее идут vlan'ы клиента (2 поля по 16 бит, если какого-то vlan нет - его значение равно 0), далее - 6 байт MAC-адрес клиента. Такое построение Client-Id гарантирует неизменность DUID, что важно для DHCPv6-сервера.
Формат опции при использовании конфигурационного параметра dhcp_client_id=1 следующий:
[comtype][subs_id][tunnel_ip]
tunnel_ip) всегда равен 0.
Формирование Access-Accept
Получив ответ от DHCPv6-сервера, PCRF объединяет его с ранее полученным от Радиуса Access-Accept. Напомним, что в Access-Accept также можно задавать DHCPv6-опции в виде специальных VSA. При объединении ответов DHCPv6-опции, возвращенные DHCPv6-сервером, считаются более приоритетными, чем эти VSA-атрибуты; например, если и в DHCPv6-ответе, и в Access-Accept задается разный список DNS-серверов, то абоненту будет отправлен список DNS-серверов из ответа DHCPv6-сервера.
Была ли полезна эта информация?