В этой статье я приведу пример как можно массово урезать скорость пользователям в биллинговой системе 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.