ABillS. Массовый шейпинг скорости при авариях

В этой статье я приведу пример как можно массово урезать скорость пользователям в биллинговой системе ABillS.

В услуге каждого пользователя, в поле «Скорость (kb)» можно указать индивидуальную скорость, приоритет которой выше чем у тарифного плана, скорость указывается одним числом в обе стороны, например 50000, в поле «Фильтр» можно указать для клиента индивидуальные Radius параметры, например скорость на закачку, а исходящая скорость останется по тарифу (так как она не указана), либо можно также указать через запятую параметр для исходящей скорости.

Приведу пример изменения индивидуальной скорости SQL запросом:

UPDATE internet_main SET speed=1500 WHERE tp_id NOT IN (1600, 1601) LIMIT 10;
UPDATE internet_main SET speed=1500 WHERE tp_id NOT IN (1600, 1601);
SELECT * FROM internet_main WHERE speed !=0;

Пример очистки поля индивидуальной скорости:

UPDATE internet_main SET speed="" WHERE tp_id NOT IN (1600, 1601);

Пример указания radius параметров в поле «Фильтр»:

RAD: PPPD-Downstream-Speed-Limit=20000

После указания и очистки поля индивидуальной скорости или radius параметров, необходимо сделать переавторизацию всех сессий либо выполнить скрипт который передаст параметры скорости CoA запросами.

Также можно изменять скорость клиентов по расписанию, например если в настройках тарифного плана указано несколько интервалов с разными скоростями, то на границе интервалов в cron нужно добавить скрипт который передаст параметры скорости серверу доступа, например:

1 17 * * * root /usr/abills/libexec/billd checkspeed NAS_ID=11 > /dev/null 2>&1
30 23 * * * root /usr/abills/libexec/billd checkspeed NAS_ID=11 > /dev/null 2>&1

Но сначала выполним вручную для теста, например для aceel-ppp:

/usr/abills/libexec/billd checkspeed accel_ppp=1 NAS_ID=11
/usr/abills/libexec/billd checkspeed accel_ppp=1 NAS_ID=11 DEBUG=7

Пример просмотра сессий:

/usr/abills/libexec/billd checkspeed accel_ppp=1 SHOW_SPEED=1 NAS_ID=11
/usr/abills/libexec/billd check_accel_ppp=1 NAS_ID=11 SHOW=1

Скрипт изменения скорости на Juniper по тарифу (скрипт деактивирует текущий профиль и активирует новый):

/usr/abills/libexec/billd mx80_change_profile LOGIN=test PROFILE="svc-global-ipoe(524288,1048576)" DEBUG=1

С опцией START=1, изменение скорости на Juniper всем клиентам на указанный svc-global-ipoe(524288,1048576), значение скорости в байтах, второй раз возвращаем скорость по тарифу:

/usr/abills/libexec/billd mx80_change_profile PROFILE="svc-global-ipoe(524288,1048576)" START=1
/usr/abills/libexec/billd mx80_change_profile PROFILE="svc-global-ipoe(524288,1048576)"

Смотрите мою статью:
Juniper MX. Как посмотреть скорость сессии пользователя

Можно также завершить все сессий скриптом:

cd /usr/abills/misc/
./autozh.pl DEBUG=1 HANGUP=1

Еще пример мягкого завершения сессий со стороны accel-ppp:

telnet 127.0.0.1 2000
terminate all soft

Если конечно в конфигурации accel-ppp указано soft-terminate=1, то при запросе продления аренды IP адреса, accel-ppp ответит клиенту DHCPNAK, что спровоцирует у клиента запрос DHCPDISCOVER для получения нового IP адреса и переавторизация выполнится плавно (за исключением например некоторых старых маршрутизаторов с багами, которые не отреагируют на DHCPNAK и будут ждать окончания аренды IP адреса и только потом выполнят запрос на получение нового IP адреса).

Приведу пример как можно сохранять список сессий accel-ppp в текстовый файл, где видно параметры скорости, чтобы наблюдать как выполняется переавторизация:

accel-cmd -H192.168.2.1 -P password show sessions > ixnfo.com.txt

При большом количестве сессий, переавторизация является трудоемким процессом, по этому лучше не завершать сессии, а передать серверу доступа новые параметры скорости.

Смотрите другие мои статьи про ABillS.

Оставьте комментарий

Добавить комментарий