COA new version

Матеріал з NoDeny
Версія від 11:52, 10 липня 2023, створена Sv (обговорення | внесок) (Новая страница: «COA это модуль ядра, который периодически просматривает данные абонентов (параметры авто...»)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

COA это модуль ядра, который периодически просматривает данные абонентов (параметры авторизации, доступ, баланс и т.д) и в случае их изменения отправляет команды на оборудование. Например, при изменении тарифа, не сбрасывая сессию, он может послать команду на изменения скорости. Либо при уходе баланса в минус послать команду блокировки.

Используется совместно с Radius и устраняет его недостаток - когда данные соединения (ip, скорости, сервисы) устанавливаются только в момент подключения.

Настройка

Конфиг /usr/local/nodeny/modules/coa/create.cfg.coa.cfg.pm.

Здесь вы можете увидеть, что coa отсылаются стандартной утилитой radclient (из пакета freeradius). Вы должны убедиться в правильном пути к этой утилите в параметре $radclient - на Linux и FreeBSD пути различаются.

Также в $radclient прописаны ключи, некоторые из которых вы можете подтюнить:

  • -t : сколько секунд ждем coa-ответа от устройства, после чего посылаем повторный пакет. Этот параметр зависит от того насколько долго идет пакет от сервера с модулем COA до самого дальнего BRAS. И обратно. Естественно, необходимо накинуть время на обработку пакетов BRAS и разные непредвиденные ситуация. Большой таймаут тоже не следует делать ибо этим вы уменьшаете время реакции, т.е. управление будет запаздывать. Тем не менее, в первую очередь важна надежность, поэтому важен баланс, но с гарантированным запасом.
  • -r : сколько попыток слать пакет. Если 2, то после первой неудачной посылается еще один. COA использует протокол UDP, поэтому могут быть ситуации, когда пакет потеряется. Две попытки, нормальный вариант.
  • -p : максимальное одновременное количество coa-пакетов. Когда примерно в одно время изменяются данных большого количества абонентов, например, списание за услуги с последующей блокировкой, на BRAS идет большое количество coa-пакетов. Если их не отправлять параллельно, то это может занять большое количество времени. Поэтому пакеты посылаются параллельно в несколько потоков. Какое количество установить - зависит от производительности ваших BRAS...



В переменных $coa_connect__state_on, $coa_connect__state_off и $coa_disconnect указываются атрибуты, которые посылаются Radius-сервером клиенту в определенных ситуациях:

  • В $coa_connect__state_on атрибуты, которые посылаются когда подключен абонент, которому разрешен доступ в интернет
  • В $coa_connect__state_off атрибуты, которые посылаются когда подключен абонент, которому запрещен доступ в интернет
  • В $coa_disconnect атрибуты, которые посылаются когда абонент отключается (перестает быть авторизованным)

Не обязательно использовать все три переменные.

Атрибуты задаются таким образом:

$coa_connect__state_on = {
    type     => тип пакета,
    template => шаблон,
};

Если же необходимо послать несколько команд:

$coa_connect__state_on = [
    {
        type     => тип пакета,
        template => шаблон,
    },
    {
        type     => тип пакета,
        template => шаблон,
    }
];

Тип пакета может быть:

  • coa - предписывает изменить параметры сессии
  • disconnect - предписывает отключить клиента

Шаблон - это текст с атрибутами в виде:

атрибут=значение

В двойных фигурных скобках можно указать данные конкретного абонента, например:

  • ip - ip адрес
  • auth_ses - имя сессии
  • speed_in1_kb - входящая скорость в килобитах
  • speed_in1_mb - входящая скорость в мегабитах



Если в параметрах авторизации будет параметр nas - coa пакет будет послан на сервер, ip которого берется из nas. В противном случае пакет будет послан на ip, указанный в конфиге.