Linux PPPD + radcoad

radcoad - демон для поддержки CoA и DM радиус-запросов насами на базе pppd

Для своей работы требует pppd с наложенным патчем ppp-2.4.4-coa.patch

Представляет из себя демон, куфлизующий спецификацию RFC3576 в меру своих сил (поддерживаются не все аттрибуты т.к. полная поддержка требует глубокой интеграции с pppd).
Умеет определять сессии по:

  1. Framed-Protocol + Nas-Port
  2. Nas-Port-Id
  3. 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). Необходимо:

  1. внести в /etc/radcoaddb/clients адрес и пароль хоста, с которого будут приходить запросы;
  2. создать /etc/ppp/ip-mod, который будет модифицировать правила шейпера согласно содержимому radattr.pppX;
  3. запустить 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 пакетов)



Обсуждение в форуме