Linux PPPD + radcoad
radcoad - демон для поддержки CoA и DM радиус-запросов насами на базе pppd
Для своей работы требует pppd с наложенным патчем ppp-2.4.4-coa.patch
Представляет из себя демон, куфлизующий спецификацию RFC3576 в меру своих сил (поддерживаются не все аттрибуты т.к. полная поддержка требует глубокой интеграции с pppd).
Умеет определять сессии по:
- Framed-Protocol + Nas-Port
- Nas-Port-Id
- Framed-IP
Также умеет проверку соответствия наса по Nas-Ip-Address.
При наличии нескольких аттрибутов из перечисленных - проверка производится по всем из них.
Игнорируемые аттрибуты:
Framed-IP-Netmask Client-IP-Address
Аттрибуты, записываемые в radattr.pppX (для CoA запроса):
Filter-Id Octets-Direction Session-Octets-Limit (pppd обновлять это значение не умеет, сохраняется только в radattr.pppX!) Session-Timeout (pppd обновлять это значение не умеет, сохраняется только в radattr.pppX!) PPPD-Upstream-Speed-Limit PPPD-Downstream-Speed-Limit Vendor-Specific
Попытка передать другие атрибуты вызовет ответ с отказом.
Как это все работает:
radcoad при поступлении CoA запроса определяет номер интерфейса, который модифицируется, далее - вносит изменения в /var/run/radattr.pppX и посылает SIGUSR1 соответствующему процессу pppd, который, получив этот сигнал, вызывает скрипт /etc/init.d/ip-mod с параметрами, аналогичными скрипту ip-up.
Для DM-запроса - порядок действий сходный, только демон не правит radattr.pppX и посылает pppd сигнал SIGHUP (обрыв соединения) вместо SIGUSR1
Что нужно для запуска демона radcoad:
Необходим пропатченый pppd (патч - для 2.4.4, ложится и на 2.4.5).
Необходимо:
- внести в /etc/radcoaddb/clients адрес и пароль хоста, с которого будут приходить запросы;
- создать /etc/ppp/ip-mod, который будет модифицировать правила шейпера согласно содержимому radattr.pppX;
- запустить radcoad (для журналирования в syslog - с ключиками
-l syslog -g local0
)
Конфигурация pppd/poptop - идентична приведенной в Linux PPPD + radattr.so
ABillS
/ System configuration/ NAS/
Type: | pppd_coa |
---|---|
Alive: | Интервал RADIUS Alive пакетов. Желательно значение 120 |
:Manage: | |
IP:PORT: | IP-адрес и порт (по умолчанию 3799), на котором radcoad слушает команды |
Password: | Пароль (указанный /etc/radcoaddb/clients) |
Radius Pairs: | Дополнительные RADIUS атрибуты. Лучше установить Acct-Interim-Interval=120; (Интервала RADIUS Alive пакетов) |