RADIUS CoA [Документация VAS Experts]

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
dpi:bras_bng:radius_integration:radius_auth_coa [2024/12/04 15:34] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1dpi:bras_bng:radius_integration:radius_auth_coa [2024/12/05 15:02] (текущий) elena.krasnobryzh
Строка 1: Строка 1:
 +====== RADIUS CoA ======
 +{{indexmenu_n>2}}
 +
 +__[[https://tools.ietf.org/html/rfc5176|CoA]]__ — Change of Authorization — это оповещения от RADIUS-сервера о том, что свойства пользователя поменялись или что пользователь стал неавторизованным.
 +CoA-Request нотификация говорит о том, что пользователь авторизован и, опционально, у него изменились некоторые параметры. Таким образом, CoA-Request может приходить в следующих случаях:
 +  * пользователь перешел из состояния "не авторизован" в состояние "авторизован" (например, пополнил счет) — см. далее;
 +  * у авторизованного пользователя изменились параметры (подключение/отключение услуг, изменение профилей услуг).
 +
 +<note important>Если пользователь не авторизован и изменяются его параметры, должен генерироваться 
 +[[dpi:bras_bng:radius_integration:radius_auth_coa#упрощенная_нотификация_coa-request_запрос_реавторизации|упрощенный CoA-Request]], который фактически инструктирует fastDPI произвести немедленную 
 +реавторизацию абонента, то есть послать Access-Request.</note>
 +
 +Виды СоА:
 +  - Упрощенный CoA-Request — при получении CoA fastDPI понимает, что атрибуты пользователя изменились и требуется повторная авторизация. Получив такое оповещение, fastDPI шлет обычный запрос ''Access-Request'' на RADIUS-сервер, как описано [[dpi:bras_bng:radius_integration:radius_auth_server_integration|ранее]].
 +  - Полный CoA-Request — оповещение ''CoA-Request'' может содержать полный список __изменившихся__ атрибутов пользователя.
 +  - Disconnect-Request — сброс статуса авторизации пользователя.
 +
 +====== Виды нотификации CoA-Request======
 +<note important>Хотя оповещение ''CoA-Request'' может содержать полный список __изменившихся__ атрибутов пользователя, предлагается использовать упрощенный вариант этой нотификации. Такой вариант говорит fastDPI, что атрибуты пользователя изменились и требуется повторная авторизация. Получив такое оповещение, fastDPI шлет обычный запрос ''Access-Request'' на RADIUS-сервер, как описано [[dpi:bras_bng:radius_integration:radius_auth_server_integration|ранее]].</note>
 +
 +===== Упрощенная нотификация CoA-Request (запрос реавторизации) =====
 +''CoA-Request'' содержит следующие атрибуты:
 +  * ''Service-Type=8'' (Authenticate-Only).
 +  * ''User-Name'' — имя (логин) пользователя. 
 +  * Один из атрибутов ''Framed-IP-Address'', ''Framed-IPv6-Address'', ''Framed-IPv6-Prefix'' — IPv4 или IPv6-адрес абонента.
 +  * ''VasExperts-L2-SubsId'' — идентификатор L2-абонента.
 +
 +Предпочтительным идентификатором абонента в CoA является его логин. 
 +При обработке CoA fastDPI ищет абонента по логину (''User-Name'' или ''VasExperts-UserName''), если логин не найден — это ошибка.
 +Если логин не указан в CoA, абонент ищется по IP-адресу.
 +Если в CoA задан и логин, и IP-адрес, — IP-адрес игнорируется: fastDPI не анализирует, связаны ли логин и IP-адрес в базе данных UDR.
 +
 +**[СКАТ 7.5+]** Начиная с версии СКАТ 7.5, возможно указывать атрибут ''Acct-Session-Id'' в качестве идентификатора абонента. 
 +СКАТ ищет по ''Acct-Session-Id'' IP-адрес абонента у себя во внутренней БД и в случае успеха — формирует внутренний запрос реавторизации по IP.
 +''Acct-Session-Id'' является наиболее "слабым" из идентификаторов: он принимается во внимание только тогда, когда в CoA-запросе не указан ни логин, ни IP-адрес.
 +
 +**[СКАТ 8.3+]** Вместо атрибута ''User-Name'' можно указать логин абонента в атрибуте ''Chargeable-User-Identity'' (CUI). Чтобы СКАТ поддержал CUI, необходимо в fastpcrf.conf указать 
 +<code bash>
 +radius_attr_cui=1
 +</code>
 +
 +<note warning>Атрибут CUI не рекомендуется к использованию в СКАТ, так как по RFC он содержит хеш логина абонента, а не сам логин. СКАТ требует, чтобы CUI содержал истинный логин абонента.</note>
 +
 +==== Ответ на упрощенную нотификацию ====
 +Согласно RFC5176, на CoA-Request с Service-Type=8 (Authenticate-Only) должен быть ответ CoA-NAK с атрибутом Error-Cause=507 (Request Initiated). Это не всегда удобно, так как некоторые утилиты (например, radclient из FreeRADIUS)
 +трактуют ответ CoA-NAK как ошибку. 
 +FastPCRF имеет настроечный параметр ''coa_reauth_ack'', который определяет, как отвечать на CoA-Request с Service-Type=8:
 +  * 0 (значение по умолчанию) — стандартное поведение: отвечать CoA-NAK с Error-Cause=507;
 +  * 1 — нестандартное поведение: отвечать CoA-ACK.
 +
 +Этот параметр может быть задан в fastpcrf.conf как глобально, для всех RADIUS-серверов, так и для каждого RADIUS-сервера:
 +<code bash>
 +  # глобальная настройка
 +coa_reauth_ack=0
 +
 + # для этого сервера применяется глобальная настройка coa_reauth_ack=0
 +radius_server=mysecret1@192.168.10.10%eth0
 +
 + # а для этого явно задано coa_reauth_ack=1
 +radius_server=mysecret2@192.168.20.10%eth0;coa_reauth_ack=1
 +</code>
 +
 +===== Полная нотификация CoA-Request =====
 +Хотя нотификация CoA-Request и поддерживается fastPCRF, но не рекомендуется к использованию из-за потенциальной сложности реализации: она должна содержать только изменения атрибутов (списка услуг и пр.) абонента.
 +\\
 +Для авторизованного пользователя нотификация CoA-Request содержит __только изменения__ параметров пользователя;
 +поддерживаются следующие атрибуты:
 +  * Имя (логин) пользователя — один из атрибутов ''VasExperts-UserName'', ''Chargeable-User-Identity'' (CUI), ''User-Name''.
 +  * Один из атрибутов ''Framed-IP-Address'', ''Framed-IPv6-Address'', ''Framed-IPv6-Prefix'' — IPv4/IPv6-адрес; этот атрибут применяется только для поиска абонента, если логин не задан.
 +  * ''VasExperts-Multi-IP-User'' — задает изменение признака, один или много IP-адресов связано с данным пользователем. Если пользователь становится многоадресным (то есть с одним пользователем может быть связано много IP-адресов), данный атрибут должен быть установлен в 1. Если пользователь становится одноадресным — данный атрибут должен быть установлен в 0. Если признак ''multi-IP'' пользователя не изменяется, CoA-Request не должен содержать атрибут ''VasExperts-Multi-IP-User''. Допустимо не более одного данного атрибута в CoA-Request.
 +  * ''VasExperts-Policing-Profile'' — имя профиля полисинга для пользователя. Данный атрибут должен включаться только если изменился профиль полисинга пользователя. В CoA-Request допустимо не более одного атрибута ''VasExperts-Policing-Profile''. Если требуется удалить профиль полисинга у клиента, то следует послать атрибут ''VasExperts-Policing-Profile'' с пустым значением (с пустой строкой).\\ **[СКАТ-9.6+]** Согласно RFC 2865, строковые атрибуты не могут иметь пустого значения; поэтому начиная с версии 9.6 для удаления профиля полисинга у абонента следует указывать значение "n/a": ''VasExperts-Policing-Profile=<n/a>''.
 +  * ''VasExperts-Enable-Service'' — задает изменение статуса услуги: подключена (on) или отключена (off). В CoA-Request указываются все услуги, статус подключения которых изменился. Если какая-то услуга не содержится в CoA-Request, это значит, что статус её "подключенности" не изменился для пользователя. Каждая сменившая статус услуга должна задаваться отдельным атрибутом ''VasExperts-Enable-Service'', то есть CoA-Request может содержать ноль или более атрибутов ''VasExperts-Enable-Service''.
 +  * ''VasExperts-Service-Profile'' — задает имя нового профиля услуги (то есть набор параметров услуги). Если данная услуга отключена, она включается (то есть ''VasExperts-Service-Profile'' имеет более высокий приоритет, чем ''VasExperts-Enable-Service''). Для того чтобы отключить услугу с профилем, следует задать для неё атрибут ''VasExperts-Enable-Service'' со значением "off" (например, для услуги 5: ''VasExperts-Enable-Service="5:off"''). Каждое изменение имени профиля услуги задается отдельным атрибутом ''VasExperts-Service-Profile'', то есть CoA-Request может содержать ноль или более атрибутов ''VasExperts-Service-Profile''.
 +  * ''Session-Timeout'' — опциональный атрибут, задает время действия авторизации в секундах. Значение 0 игнорируется. По истечении этого времени статус авторизации пользователя устанавливается в "неизвестен", что приводит к отправке запроса на авторизацию Access-Request.
 +
 +====== Disconnect-Request ======
 +Нотификация ''Disconnect-Request'' сигнализирует о том, что пользователь стал неавторизованным (например, закончились средства на счете). Нотификация Disconnect-Request может содержать следующие атрибуты:
 +  * Один из атрибутов ''Framed-IP-Address'', ''Framed-IPv6-Address'', ''Framed-IPv6-Prefix'' — IPv4 или IPv6-адрес абонента.
 +  * Имя (логин) пользователя — один из атрибутов ''VasExperts-UserName'', ''Chargeable-User-Identity'' (CUI), ''User-Name''.
 +  * ''Acct-Session-Id'' — идентификатор accounting-сессии. По этому идентификатору СКАТ ищет у себя во внутренней БД IP-адрес, связанный с данной accounting-сессией.
 +  * ''VasExperts-L2-SubsId'' — идентификатор L2-абонента.
 +
 +При получении Disconnect-Request СКАТ:
 +  - если разрешен [[dpi:bras_bng:radius_integration:radius_accounting|accounting]] — посылает Accounting Stop с причиной Admin-Reset (6);
 +  - для протоколов, допускающих разрыв сессии по инициативе сервера (например, PPPoE), — разрывает сессию;
 +  - проставляет статус авторизации для IP-адреса в статус "неизвестно". Это приводит к тому, что при поступлении пакета от данного IP СКАТ пошлет [[dpi:bras_bng:radius_integration:radius_auth_server_integration|запрос на авторизацию]].
 +
 +<note important>Если в Disconnect-Request указан логин абонента — эти действия производятся для всех IP-адресов, связанных с логином.</note>
 +
 +<note important>Если после PoD (CoA Disconnect) не пришло никакого DHCP-запроса до истечения lease time — такую сессию надо закрыть с отправкой деанонса и acct stop.\\ При этом следует учитывать, что у абонента может измениться тип сессии — вместо DHCP стать StaticIP или PPPoE; в этом DHCP-сессию нужно закрыть без деанонса и acct stop.</note>
 +===== Настройка логики обработки DHCP абонента при получении PoD =====
 +
 +Флаги опции ''bras_dhcp_disconnect'' используются для обеспечения гибкости в обработке PoD, так как между PoD и реавторизацией DHCP Discover от клиента может пройти достаточно много времени (max lease time / 2) и трафика:
 +
 +  * **0x0001** — ''disable acct stop'', не посылать немедленно ''acct stop'' для ''disconnected'' DHCP-абонента. Позволяет учитывать трафик после PoD. По умолчанию acct-сессия закрывается по PoD, что может привести к неучтенному трафику для DHCP-абонентов от момента PoD до DHCP-реавторизации. 
 +  * **0x0002** — ''disable L3 auth'', не выполнять L3-авторизации для ''disconnected'' DHCP-абонента. СКАТ может авторизовать L2-абонента по его IP-адресу при поддержке RADIUS.
 +  * **0x0004** — ''block traffic'' — блокируем весь трафик от ''disconnected'' абонента (то есть на пути ''subs -> inet''). Попытка сократить время реавторизации: многие CPE при пропадании соединения в Интернет досрочно шлют DHCP. Но цена этого флага — разрыв всех существующих сессий абонента.  
 +  * **0x0008** — на DHCP Request -> отвечаем NAK. Позволяет сократить время реавторизации путем прерывания аренды IP-адреса.
 +  * **0x0010** — игнорируем DHCP Request (ждем DHCP Discovery). 
 +
 +Эта опция покрывает следующие случаи:
 +
 +**''bras_dhcp_disconnect=0''** (default, как сейчас):
 +
 +  * шлем acct stop
 +  * следующий DHCP-запрос (Discover или Request) отправляется на RADIUS 
 +  * сбрасываем время L3-сессии, что приводит к L3 auth на первом не-DHCP-пакете от абонента
 +\\
 +**''=1''**: ожидание DHCP-запроса от абонента без блокировки трафика, c L3 auth, без acct stop
 +
 +  * **не** шлем acct stop
 +  * следующий DHCP-запрос (Discover или Request) отправляется на RADIUS
 +  * сбрасываем время L3-сессии, что приводит к L3 auth на первом не-DHCP-пакете от абонента
 +\\
 +**''=2, 3''**: ожидание DHCP-запроса от абонента без блокировки трафика, без L3 auth
 +
 +  * шлем (2) / не шлем (3) acct stop
 +  * следующий DHCP-запрос (Discover или Request) отправляется на RADIUS
 +\\
 +**''=4, 5''**: ожидание DHCP-запроса от абонента с блокировкой трафика, L3 enabled. То есть пакеты от абонента блокируются, но L3 auth по ним производится
 +
 +  * шлем (4) / не шлем (5) acct stop
 +  * следующий DHCP-запрос (Discover или Request) отправляется на RADIUS
 +  * сбрасываем время L3-реавторизации, что приводит к L3 auth на первом не-DHCP-пакете от абонента
 +\\
 +**''=6, 7''**: (2 + 4) ожидание DHCP-запроса от абонента с блокировкой трафика, L3 disabled
 +
 +  * шлем (6) / не шлем (7) acct stop
 +  * следующий DHCP-запрос (Discover или Request) отправляется на RADIUS
 +  * трафик от абонента дропается
 +\\
 +**''=8, 9''**: ожидание DHCP-запроса от абонента без блокировки трафика, L3 auth enabled
 +
 +  * шлем (8) / не шлем (9) acct stop
 +  * сбрасываем время L3-реавторизации, что приводит к L3 auth на первом не-DHCP-пакете от абонента
 +  * DHCP Request - отвечаем NAK, DHCP Discover - отправляем на RADIUS
 +\\
 +**''=10, 11''**: (2 + 8) ожидание DHCP-запроса от абонента без блокировки трафика, L3 auth disabled
 +
 +  * шлем (10) / не шлем (11) acct stop
 +  * DHCP Request - отвечаем NAK, DHCP Discover - отправляем на RADIUS
 +  * L3 auth disabled
 +\\
 +**''=12, 13''**: (4 + 8) ожидание DHCP-запроса от абонента с блокировкой трафика, L3 auth enabled. То есть пакеты от абонента блокируются, но L3 auth по ним производится
 +
 +  * шлем (12) / не шлем (13) acct stop
 +  * DHCP Request - отвечаем NAK, DHCP Discover - отправляем на RADIUS
 +  * трафик от абонента дропается
 +  * сбрасываем время L3-реавторизации, что приводит к L3 auth на первом не-DHCP-пакете от абонента
 +\\
 +**''=14, 15''**: (2 + 4 + 8) ожидание DHCP-запроса от абонента с блокировкой трафика, L3 auth disabled
 +
 +  * шлем (14) / не шлем (15) acct stop
 +  * DHCP Request - отвечаем NAK, DHCP Discover - отправляем на RADIUS
 +  * трафик от абонента дропается
 +  * L3 auth disabled
 +\\
 +**''=16, 17''**: ожидание DHCP-запроса от абонента без блокировки трафика, L3 auth enabled
 +
 +  * шлем (16) / не шлем (17) acct stop
 +  * сбрасываем время L3-реавторизации, что приводит к L3 auth на первом не-DHCP-пакете от абонента
 +  * DHCP Request - игнорируем (drop), DHCP Discover - отправляем на RADIUS
 +\\
 +**''=18, 19''**: (2 + 16) ожидание DHCP-запроса от абонента без блокировки трафика, L3 auth disabled
 +
 +  * шлем (18) / не шлем (19) acct stop
 +  * DHCP Request - игнорируем (drop), DHCP Discover - отправляем на RADIUS
 +  * L3 auth disabled
 +\\
 +**''=20, 21''**: (4 + 16) ожидание DHCP-запроса от абонента с блокировкой трафика, L3 auth enabled. То есть пакеты от абонента блокируются, но L3 auth по ним производится
 +
 +  * шлем (20) / не шлем (21) acct stop
 +  * DHCP Request - игнорируем (drop), DHCP Discover - отправляем на RADIUS
 +  * трафик от абонента дропается
 +  * сбрасываем время L3-реавторизации, что приводит к L3 auth на первом не-DHCP-пакете от абонента
 +\\
 +**''=22, 23''**: (2 + 4 + 16) ожидание DHCP-запроса от абонента с блокировкой трафика, L3 auth disabled
 +
 +  * шлем (22) / не шлем (23) acct stop
 +  * DHCP Request - игнорируем (drop), DHCP Discover - отправляем на RADIUS
 +  * трафик от абонента дропается
 +  * L3 auth disabled
 +
 +Все остальные значения ''bras_dhcp_disconnect'' являются ошибкой.
 +
 +<note important>Данные acct stop все равно будут отправляться при любой авторизации (если в PCRF включена синхронизация auth/acct).\\ RADIUS понимает, что PoD обработался, получив Disconnect-ACK в ответ на PoD.</note>
 +
 +====== Отдельные CoA-клиенты ======
 +В некоторых конфигурациях CoA-клиент, посылающий CoA-запросы Disconnect-Request и CoA-Request, может быть отдельной сущностью, не являющейся RADIUS-сервером. Например, это может быть некая утилита, умеющая формировать CoA-запросы и применяющаяся в скриптах. FastPCRF поддерживает такие "обособленные" CoA-клиенты. В конфигурационном файле fastpcrf.conf каждый такой CoA-клиент задается отдельным параметром "coa_client", имеющим формат, аналогичный параметру ''radius_server'':
 +
 +<code bash>coa_client=secret@ip%dev:port{;param=value}*</code>
 +  * ''secret'' — секрет RADIUS;
 +  * ''ip'' — IP-адрес CoA-клиента;
 +  * ''dev'' (необязательный) — имя интерфейса, на котором слушать входящие запросы; если не задан — интерфейс выбирается операционной системой;
 +  * ''port'' — слушаемый локальный порт;
 +  * ''param=value'' — перечень (через точку с запятой) конфигурационных параметров для данного CoA-клиента. Поддерживаются параметры: ''max_resend_count'', ''msg_auth_attr'', ''coa_resend_timeout''.
 +
 +Каждый CoA-клиент описывается в conf-файле отдельным параметром ''coa_client''
 +Всего может быть до 16 обособленных CoA-клиентов.
 +FastPCRF принимает CoA-запросы только от зарегистрированных (описанных в conf-файле) RADIUS-серверов и CoA-клиентов. Если RADIUS-сервер поддерживает CoA, нет необходимости описывать его ещё и параметром ''coa_client'', — достаточно для этого RADIUS-сервера указать опцию ''coa_port'' в параметре ''radius_server''.
 +
 +====== Запрос accounting-сессии через CoA ======
 +**[СКАТ 8.2]** Добавлена возможность запроса сторонней системой состояния accounting-сессии. 
 +Эта возможность реализована через CoA-Request с атрибутом ''VasExperts-Command-Code=1''.
 +
 +**[СКАТ 8.3]** В связи с поддержкой мульти-сессий изменились логика работы и CoA-ответы.
 +
 +===== Проверка существования сессии =====
 +CoA-Request со следующими атрибутами проверит, существует ли указанная accounting-сессия:
 +<code bash>
 +VasExperts-Command-Code=1
 +Acct-Session-Id=A1B2C3D4E5F6
 +</code>
 +
 +В случае успеха возвращается CoA-ACK с указанием IP-адреса, к которому эта сессия относится:
 +<code bash>
 +# CoA-ACK атрибуты:
 +VasExperts-Command-Code=1
 +Acct-Session-Id=A1B2C3D4E5F6
 + # СКАТ-8.3: добавился атрибут ID мульти-сессий
 +Acct-Multi-Session-Id=MA1B2C3D4E5F6
 + # СКАТ-8.3: добавился атрибут NAS-IP-Address - каким fastDPI создана сессия
 +NAS-IP-Address=192.168.0.200
 +Framed-IP-Address=192.168.10.20
 +</code>
 +
 +Если указанной сессии не существует (или она неактивна, например, завершена по idle timeout), возвращается CoA-NAK с атрибутами:
 +<code bash>
 +# CoA-NAK атрибуты:
 +VasExperts-Command-Code=1
 +Acct-Session-Id=A1B2C3D4E5F6
 +Error-Cause=503 # Session Context not found
 +# Атрибут Error-Cause может принимать и другие значения.
 +</code>
 +
 +===== Запрос accounting-сессии для данного IP-адреса =====
 +Можно запросить у СКАТ идентификатор активной accounting-сессии для данного IP-адреса.
 +Структура запроса отличается для случаев "один fastPCRF — один fastDPI" и "один fastPCRF — несколько fastDPI".
 +
 +Для случая "один fastPCRF — один fastDPI" CoA-Request выглядит так:
 +<code bash>
 +VasExperts-Command-Code=1
 +Framed-IP-Address=192.168.10.20
 +</code>
 +
 +Для случая "один fastPCRF — несколько fastDPI" в CoA-Request нужно указать, какой fastDPI нас интересует:
 +<code bash>
 +# CoA-ACK атрибуты
 +VasExperts-Command-Code=1
 +Framed-IP-Address=192.168.10.20
 + # СКАТ-8.3: какой сервер fastDPI
 +NAS-IP-Address=192.168.0.200
 +</code>
 +В принципе, атрибут ''NAS-IP-Address'' (или ''NAS-Identifier'') можно не указывать, если вы уверены, что данный IP-адрес есть только на одном fastDPI.
 +
 +Если для указанного IP-адреса есть активная accounting-сессия, СКАТ вернет CoA-ACK с идентификатором сессии:
 +<code bash>
 +# CoA-ACK атрибуты
 +VasExperts-Command-Code=1
 +Framed-IP-Address=192.168.10.20
 +Acct-Session-Id=A1B2C3D4E5F6
 + # СКАТ-8.3: добавился атрибут ID мульти-сессий
 +Acct-Multi-Session-Id=MA1B2C3D4E5F6
 + # СКАТ-8.3: добавился атрибут NAS-IP-Address - каким fastDPI создана сессия
 +NAS-IP-Address=192.168.0.200
 +</code>
 +
 +Если активной сессии нет или же её нет на указанном fastDPI, вернется CoA-NAK вида:
 +<code bash>
 +# CoA-NAK атрибуты
 +VasExperts-Command-Code=1
 +Framed-IP-Address=192.168.10.20
 +Error-Cause=503 # Session Context not found
 +# Атрибут Error-Cause может принимать и другие значения.
 +</code>
 +
 +<note tip>**СКАТ 12.4** — Добавлена поддержка IPv6 для CoA.\\ ''Command-Code=1'' — поиск acct session по IP.\\ Поиск acct-сессии может вестись по IPv6-префиксу атрибута ''Framed-IPv6-Prefix'' или ''Delegated-IPv6-Prefix''. В ответе команды указываются все известные IP-адреса найденной acct-сессии — ''Framed-IP-Address'', ''Framed-IPv6-Prefix'', ''Delegated-IPv6-Prefix''.</note>
 +===== Запрос accounting-сессии по мульти-сессии =====
 +**[СКАТ 8.3]** Можно по идентификатору мульти-сессии узнать, какому IP-адресу она соответствует и какая активная сессия у него есть для указанного fastDPI:
 +<code bash>
 +   # Атрибуты CoA-Request
 +VasExperts-Command-Code=1
 +Acct-Multi-Session-Id=MA1B2C3D4E5F6
 +</code>
 +
 +Если данная мульти-сессия найдена, СКАТ вернет IP-адрес, который соответствует данной мульти-сессии.
 +В случае, если у мульти-сессии есть только одна активная сессия, вернется CoA-ACK:
 +<code bash>
 +# CoA-ACK атрибуты
 +VasExperts-Command-Code=1
 +Framed-IP-Address=192.168.10.20
 +Acct-Session-Id=A1B2C3D4E5F6
 +Acct-Multi-Session-Id=MA1B2C3D4E5F6
 + # каким fastDPI создана сессия
 +NAS-IP-Address=192.168.0.200
 +</code>
 +
 +Если нет активной сессии или же их более одной, вернется CoA-NAK с указанием IP-адреса абонента:
 +<code bash>
 +# CoA-NAK атрибуты
 +VasExperts-Command-Code=1
 +Acct-Multi-Session-Id=MA1B2C3D4E5F6
 +Framed-IP-Address=192.168.10.20
 +Error-Cause=503 # Session Context not found
 +# Атрибут Error-Cause может принимать и другие значения.
 +</code>
 +
 +Можно в CoA-Request указать, какой fastDPI нас интересует:
 +<code bash>
 +   # Атрибуты CoA-Request
 +VasExperts-Command-Code=1
 +Acct-Multi-Session-Id=MA1B2C3D4E5F6
 +NAS-IP-Address=192.168.0.200
 +</code>
 +
 +В этом случае СКАТ вернет IP-адрес абонента и ID сессии, если для данного fastDPI есть активная сессия:
 +<code bash>
 +# CoA-ACK атрибуты
 +VasExperts-Command-Code=1
 +Framed-IP-Address=192.168.10.20
 +Acct-Session-Id=A1B2C3D4E5F6
 +Acct-Multi-Session-Id=MA1B2C3D4E5F6
 + # каким fastDPI создана сессия
 +NAS-IP-Address=192.168.0.200
 +</code>
 +
 +Если активной сессии для указанного fastDPI нет, СКАТ вернет CoA-NAK:
 +<code bash>
 +# CoA-NAK атрибуты
 +VasExperts-Command-Code=1
 +Acct-Multi-Session-Id=MA1B2C3D4E5F6
 +NAS-IP-Address=192.168.0.200
 +Framed-IP-Address=192.168.10.20
 +Error-Cause=503 # Session Context not found
 +# Атрибут Error-Cause может принимать и другие значения.
 +</code>