Архитектура ISP (OSS/BSS)
Access Control (AAA) Service
FreeRADIUS интеграция: профили, CoA, сессии, PPPoE/IPoE, vendor-атрибуты.
Access Control (AAA) Service
Bounded Context: Network Access Control
Владелец данных: RadiusProfile, Session
Технологии: Go, PostgreSQL, ConnectRPC, FreeRADIUS (SQL backend)
Ответственность
AAA Service управляет доступом абонентов к сети. Работает в связке с FreeRADIUS, который выступает RADIUS-сервером для NAS-устройств (BRAS, OLT). Это критический компонент — если AAA не работает, абоненты не могут подключиться к сети. SLO: 99.99% availability, < 50ms p99 latency.
- Profiles: CRUD RADIUS-профилей (radcheck/radreply) для каждой подписки. Каждый абонент = один RadiusProfile с набором атрибутов.
- CoA (Change of Authorization): Динамическое изменение параметров активной сессии (скорость, блокировка, редирект) без разрыва соединения. Ключевой механизм для dunning и турбо-кнопки.
- Sessions: Мониторинг активных сессий (RADIUS Accounting Start/Stop/Interim-Update). Данные передаются в Mediation для биллинга и аналитики.
- Auth Types: PPPoE (логин/пароль), IPoE (MAC + Option 82 — без логина), Hotspot (captive portal).
Сценарии использования CoA
| Сценарий | Триггер | RADIUS-атрибуты | Результат |
|---|---|---|---|
| Dunning: soft block | balance < 0 (D+0) | Mikrotik-Address-List=blocked | Redirect на captive portal |
| Dunning: hard block | D+3 без оплаты | Mikrotik-Rate-Limit=64k/64k | Скорость 64 kbps |
| Dunning: resume | Оплата получена | Восстановление оригинальных атрибутов | Полная скорость |
| Турбо-кнопка | Покупка ускорения | Mikrotik-Rate-Limit=200M/200M | Временное ускорение |
| Смена тарифа | tariff.changed | Новый Rate-Limit по тарифу | Новая скорость на лету |
| Disconnect | Расторжение/RMA | Disconnect-Request | Принудительный разрыв сессии |
Архитектура
Loading diagram...
Агрегат: RadiusProfile
Loading diagram...
Примеры атрибутов
PPPoE (MikroTik BRAS):
| Таблица | Attribute | Op | Value |
|---|---|---|---|
| radcheck | Cleartext-Password | := | hashed_password |
| radreply | Mikrotik-Rate-Limit | := | 100M/100M |
| radreply | Framed-IP-Address | := | 10.0.1.100 |
| radreply | Framed-Pool | := | pool-residential |
IPoE (Huawei BRAS):
| Таблица | Attribute | Op | Value |
|---|---|---|---|
| radcheck | Auth-Type | := | Accept |
| radreply | Huawei-Input-Average-Rate | := | 102400 (kbps) |
| radreply | Huawei-Output-Average-Rate | := | 102400 |
| radreply | Framed-IP-Address | := | 10.0.2.50 |
ConnectRPC API
service AAAService {
rpc CreateProfile(CreateProfileRequest) returns (CreateProfileResponse);
rpc UpdateProfile(UpdateProfileRequest) returns (UpdateProfileResponse);
rpc DeleteProfile(DeleteProfileRequest) returns (DeleteProfileResponse);
rpc SendCoA(SendCoARequest) returns (SendCoAResponse);
rpc DisconnectSession(DisconnectSessionRequest) returns (DisconnectSessionResponse);
rpc ListActiveSessions(ListActiveSessionsRequest) returns (ListActiveSessionsResponse);
rpc GetSessionHistory(GetSessionHistoryRequest) returns (GetSessionHistoryResponse);
}| Метод | RBAC | Описание |
|---|---|---|
CreateProfile | internal | Создать RADIUS-профиль (вызывается Provisioning) |
UpdateProfile | internal | Обновить атрибуты (смена скорости) |
SendCoA | internal | Отправить CoA-пакет на NAS (смена параметров без разрыва) |
DisconnectSession | isp-operator+ | Принудительный разрыв сессии |
ListActiveSessions | isp-viewer+ | Активные сессии (для мониторинга и CRM) |
CoA Flow (Change of Authorization)
Loading diagram...
Session Monitoring
Данные из RADIUS Accounting (radacct таблица):
| Поле | Описание |
|---|---|
acctsessionid | Уникальный ID сессии |
username | Логин PPPoE или MAC (IPoE) |
nasipaddress | IP NAS-устройства |
framedipaddress | IP абонента |
acctinputoctets | Входящий трафик (bytes) |
acctoutputoctets | Исходящий трафик (bytes) |
acctstarttime | Начало сессии |
acctstoptime | Конец сессии (NULL если активна) |
Зависимости
Loading diagram...
- Входящие: Provisioning → AAA (CreateProfile, UpdateProfile, SendCoA).
- Исходящие: AAA → NAS (CoA packets).
Ссылки:
- Protobuf-контракт: aaa/v1/aaa_service.proto
- Подробная интеграция с RADIUS: RADIUS Integration
- Слой OSS: OSS Layer