Jump to content
Калькуляторы

Поддержка POD/CoA для Linux pppd Для желающих потестить/допилить

Появилась необходимость на лету менять скорость/дропать клиентов на линуксовых насах; готового правильного решения не нашел, юзать ssh для этих целей - показалось слишком корявым, решил писать сам, взяв за основу древний радиус-демон от Cistron и изрядно кастрировал его, убрав все явно излишнее для данной задачи, после чего - навешал за недельку стафф для работы с RFC3576 запросами и взаимодействием с pppd и сетевой подсистемой. То, что получилось, выложил сюда. Выглядит немного коряво, кое-где проглядывает (а кое-где даже нагло выпирает) мохнатая седая щетина и прочие излишние непотребства от оригинального демона - тщательно чистить код мне было лень, но оно работает.

 

Коротко, что умеет:

1) Определение интерфейса по связке Framed-Protocol+Nas-Port, по Nas-Port-Id или по Framed-Ip (если указано несколько аттрибутов - пытается проверить их соответствие друг другу);

2) Для СоА - модификация /var/run/radattr.pppX согласно полученным аттрибутам, после - SIGUSR1 нужному процессу (который по этому сигналу после наложения патча должен вызывать скрипт /etc/ppp/ip-mod, оригинальный же - просто включал-выключал дебаг), патч для 2.4.4 прилагается;

3) Для DR - SIGHUP нужного процесса.

 

Из того, что явно не умеет - аутентификация по логину и по Session-Id (разбираться, как это вытянуть из пппд, или пилить костыли мне было лень, если кто-то сделает это красиво - добавлю в код с удовольствием).

 

 

Share this post


Link to post
Share on other sites

Может я не совсем понял требования к функционалу, но почему не snmptrapd?

Share this post


Link to post
Share on other sites

IMHO крайне необходимый фукнционал.

Если у кого то получится скрестить с BGB - прошу отписать.

Share this post


Link to post
Share on other sites

Почему возникла идея делать это в виде отдельного демона вместо плугина для pppd?

Share this post


Link to post
Share on other sites

Почему возникла идея делать это в виде отдельного демона вместо плугина для pppd?

Потому что было кое-что готовое, что надо было лишь допилить.

Share this post


Link to post
Share on other sites
но почему не snmptrapd?

А зачем пилить скриптовые костыли к snmptrapd для обработки/модификации radattr, если есть почти стандартизированное решение, используемое в других насах (кисках, mpd5) довольно долго?

 

Почему возникла идея делать это в виде отдельного демона вместо плугина для pppd?

А как несколько разных процессов будут слушать один и тот же сокет, и разбираться, что кому пришло, где корректный запрос, а где требование отключить/зашейпить давно померший интерфейс?

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

Share this post


Link to post
Share on other sites

Поправил баг со 100% загрузкой проца демоном. Новая версия - на сорсфорже.

Share this post


Link to post
Share on other sites

Патчите pppd (чтобы по SIGUSR1 не дебаг включал, а скрипт дергал), вносите в /etc/radcoaddb/clients адрес и пароль хоста, с которого будут приходить запросы, и запускаете radcoad (для журналирования в логи - с ключиками "-l syslog -g local0"). Ну и делаете скрипт /etc/ppp/ip-mod который будет анализировать устанавливать новую скорость согласно /var/run/radattr.pppX - обо всем остальном позаботится radcoad

Share this post


Link to post
Share on other sites

Патчите pppd (чтобы по SIGUSR1 не дебаг включал, а скрипт дергал), вносите в /etc/radcoaddb/clients адрес и пароль хоста, с которого будут приходить запросы, и запускаете radcoad (для журналирования в логи - с ключиками "-l syslog -g local0"). Ну и делаете скрипт /etc/ppp/ip-mod который будет анализировать устанавливать новую скорость согласно /var/run/radattr.pppX - обо всем остальном позаботится radcoad

Доброго здоровья!

Продолжается ли работа над сабжем?

Share this post


Link to post
Share on other sites

Да собссно вроде пока работает адекватно, функционала хватает - от того более глубоко интегрировать в pppd смысла нет. Тем более, если есть accel-ppp, у которого RFC3576 имеется искаропки.

Share this post


Link to post
Share on other sites

Да собссно вроде пока работает адекватно, функционала хватает - от того более глубоко интегрировать в pppd смысла нет. Тем более, если есть accel-ppp, у которого RFC3576 имеется искаропки.

 

По функционалу - согласен. ip-mod и сброс сессии это все что нужно.

А почистить код, устранить варнинги при make и ошибки при make install?

И самое интересное, как ведет себя при большой нагрузке?

 

По поводу accel-ppp смотрел, он мне не понравился. У меня pppoe ядрённое (kernel mode), очень удобно навешивать на виланы и не грузит систему. Аксель интересен в основном для pptp-шников.

Share this post


Link to post
Share on other sites

По поводу accel-ppp смотрел, он мне не понравился. У меня pppoe ядрённое (kernel mode), очень удобно навешивать на виланы и не грузит систему. Аксель интересен в основном для pptp-шников.

 

accel сейчас умеет pppoe, там еще проще навешивать вланы (есть телнет консоль для управления), кроме того умеет много вкусностей именно для pppoe - задержку PADO ответа к примеру для балансировки клиентов между серверами и возможность ступенчатого ограничения количества коннектов.

Share this post


Link to post
Share on other sites
А почистить код, устранить варнинги при make и ошибки при make install?

 

На это нужно время. А сейчас у меня есть более нужные/приоритетные задачи. Если есть желание - можете заняться, заведу под это дело гит на сорсфорже.

 

И самое интересное, как ведет себя при большой нагрузке?

 

Никаких проблем с ним не наблюдал. В т.ч. и при смене интервала, когда нескольким десяткам человек, сидящих на пакетах с переменной скорсотью, хором (как биллинговый скрипт успевал выплевывать радиус-запросы) перенастраивались шейперы. Да и в принципе ему-то пофиг нагрузка, пакет обработал, нашел процесс, послал сигнал процессу, выплюнул ответ, начал обрабатывать следующий пакет...

По поводу непрерывной работы - аптайм брасов поболее 100 суток.

Share this post


Link to post
Share on other sites

В т.ч. и при смене интервала, когда нескольким десяткам человек, сидящих на пакетах с переменной скорсотью, хором (как биллинговый скрипт успевал выплевывать радиус-запросы) перенастраивались шейперы.

А нескольким тысячам?

 

Если есть желание - можете заняться, заведу под это дело гит на сорсфорже.

 

Я не программер(((

Share this post


Link to post
Share on other sites

А нескольким тысячам?

Демону самому пофиг. Его дело малое, сколько пакетов жевать - без разницы, прожует и выплюнет по очереди ответы заодно с сигналами соответствующим процессам.

А вот как шейпер управится с многочисленными вызовами, и как сервер переживет массовое изменение тарифов скриптами (LA может сильно вырасти) - неизестно, в теории все нормально должно быть, но на практике - всяко случается.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this