Привязка клиента к конкретноиу порту NAS

Установка, настройка, поддержка
Ответить
ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Привязка клиента к конкретноиу порту NAS

Сообщение ran »

А можно ли как-то организовать сабж? То бишь чтобы клиенту vasya ВСЕГДА назначался ифейс ppp150, а клиенту pupkin - ppp49? Юзается pppoe server + radius + pppd. Проблем в том, что когда клиент устанавливает пппое соединение, у сервера нет о клиенте никакой информации, кроме его MAC. Далее, насколько я понимаю, пппое запускает пппд, который выделяет динамически ппп ифейс и его номер передаёт его радиусу в качестве номера порта. А хоцца (ну очень), чтоб Абиллс хранил где-то в базе (это не проблема) номер порта клиента и радиус его возвращал бы... НО... ДО запуска пппд. А уж потом запуск pppd например с параметром ifname ...

Дерзкий Харри
Сообщения: 16
Зарегистрирован: Чт янв 24, 2008 3:52 pm

Сообщение Дерзкий Харри »

у сервера нет о клиенте никакой информации, кроме его MAC.
А тебе Мака мало?! из таблички абиллса выдергиваешь логин да и делов то, если нанешн ДШСП поднят))
ну а дальше....канешн ифконфигом уже после поднятия ифэйса....но эт извращение))
Сам хочу сделать имена ифэйсов но логину юзверей...ток пока не придумал как))

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

да переименовать-то его не проблема... можно и до поднятия - из скрипта /etc/ppp/ip-pre-up сделать:

ip link set $1name pppvasya

Только вот ведёт себя pppd после такого фокуса отвратительно. Всё дело в том, что к этому моменту в логах уже присутствует запись:

Feb 4 18:06:33 billing pppd[17429]: Connect: ppp14 <--> /dev/pts/15

И только потом вот эта:

Feb 4 18:06:36 billing pppd[17429]: Script /etc/ppp/ip-pre-up finished (pid 17448), status = 0x0

А первая запись говорит о том, что пппд уже "запомнил", что выделился интерфейс ppp14. И если его переименовать... то пппд становится раком. Потому как будет искать ppp14. И не найдёт :D

Тут надо именно запускать pppd с параметром ifname pppvasya. Тогда в логах будет запись:

Connect: pppvasya <--> /dev/pts/15

И всё будет пучком... Но... В моём случае (pppoe) pppd запускает pppoe сервер (по входящему от клиента линку). И на этом этапе о клиенте ничего, кроме его мака неизвестно (до авторизации-то дело ещё совсем не дошло). А в базу за именем интерфейса, который надо назначить данному клиенту надо лезть именно в этот момент, чтобы запустить pppd с нужным параметром ifname, иначе потом будет поздно... Вот в чём проблем...

Дерзкий Харри
Сообщения: 16
Зарегистрирован: Чт янв 24, 2008 3:52 pm

Сообщение Дерзкий Харри »

УРА!!!! убив день всё таки всё получилось)))
/var/log/pptp.log:

Код: Выделить всё

Renamed interface ppp1 to 1234
Using interface 1234
Connect: 1234 <--> /dev/pts/18
Как спросишь ты....а я возьму и отвечу...и так по порядку!!!
1. Пропатчил pppd-2.4.4 для использования ifname....нашел лишь под чуть старее версию, ну да благо всё обошлось без косяков)))
2. Заварив n-ый литраж чаю взялся за сорцы pptpd-1.3.4 и нашел...в итоге организовал перенаправление всех параметров передаваемых pppd в свой скрипт под кодовым названием pptp_ifnameиз которого pppd и стартует

pptp_ifname:

Код: Выделить всё

#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect("DBI:mysql:database=abills;host=localhost","root", "MyFuckingPass") || die $DBI::errstr;
my $result = $dbh->prepare("SELECT uid FROM dhcphosts_hosts WHERE ip=INET_ATON('$ARGV[6]')");
$result->execute();
my $ln = $result->fetchrow_hashref();
my $result = $dbh->prepare("SELECT id FROM users WHERE uid=$ln->{'uid'}");
$result->execute();
my $ln = $result->fetchrow_hashref();
print $ln->{'id'};
exec('/usr/sbin/pppd',$ARGV[1],$ARGV[2],$ARGV[3],$ARGV[4],$ARGV[5],$ARGV[6],$ARGV[7],$ARGV[8],'ifname',$ln->{'id'});
$dbh->disconnect();
чуть поясню суть скрипта...в скрипт поступают параметры от pptpd вместе с которыми и ip адрес клиента, по Ip адресу определяется uid клиента в абиллсе, а по uid`у уж и его логин, который и передается pppd в качестве аргумента параметра ifname

P.S. За возможные косяки в скрипте прошу не пинать, ибо на перле пишу ооочччеенннььь не часто...прост захотелось)))
P.S.S. патчи не оформлял, а по сему не выкладываю...да и...нужно еще подправить сорцы pptpd да бы в скрипт пердавалось и количество параметров :D но если есть интузиасты - выложу)))
P.S.S.S. ran у тебя похожая история...дерзайте судырь)))

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Сообщение ran »

ну уж если так... я уж лучше на сях в сырцы пппд вставлю :D ... когда время будет (а будет ли :cry: )а за идею - пасиба

Дерзкий Харри
Сообщения: 16
Зарегистрирован: Чт янв 24, 2008 3:52 pm

Сообщение Дерзкий Харри »

я уж лучше на сях в сырцы пппд вставлю Very Happy
Я тоже так сначала подумал, но потом решил все перенаправлять в скрипт по двум причинам:
1. При смене скажем пароля к мускулу ты предлагаешь опять лезть в сырцы? или же добавить параметры в конфиги?!...как по мне геморно и безсмысленно
2. удобней манипулировать...

Ответить