Биллинговая система Nodeny
13 Декабря 2024, 22:46:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: 1 ... 4 5 [6] 7
  Печать  
Автор Тема: DHCP + Opt82 + Radius  (Прочитано 44408 раз)
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #75 : 16 Февраля 2018, 14:38:36 »

10feed5ded85-dcd2fc5cbfe8-0/2 - це увас такий юзернейм прилітає?
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 326


Просмотр профиля Email
« Ответ #76 : 16 Февраля 2018, 14:41:45 »

Код:
В нього ж немає таких параметрів як svlan-ідентифікатор свіча і cvlan-ідентифікатор порта, а є в нього Мак устройства і Порт устройства
А записать в Мак устройства і Порт устройства нужные Вам данные религия не позволяет?) Это же всего-лишь строки

Цитировать
10feed5ded85-dcd2fc5cbfe8-0/2 - це увас такий юзернейм прилітає?
Да mac-device_mac-port
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


Просмотр профиля
« Ответ #77 : 16 Февраля 2018, 14:56:09 »

Код:
В нього ж немає таких параметрів як svlan-ідентифікатор свіча і cvlan-ідентифікатор порта, а є в нього Мак устройства і Порт устройства
А записать в Мак устройства і Порт устройства нужные Вам данные религия не позволяет?) Это же всего-лишь строки
Вони записані але криво. 1) Тип поля Мак устройства приводиться до виду мак адреса.. Ладно можна пережити, може то й правильно 2)порт записуємо. Але що з ними робити? хто і де має парсити юзернейм? А якщо мережа ще гібридна - вланперюзер, і авторизація по маку)))

Тре мабуть якось стандартизувати юзернейм. Наприклад, якщо прилітає лише мак клієнта- то це авторизація по маку, все інше рахується вже, що на порту 1 клієнт. Тут може бути два типа авторизації (взагалі навіть 3) - 1) Option 82 2)Vlan  per user 3) VLAN  per user з  QinQ.
в першому випадку авторизація мак пристрою (доречі сюди можна не мак тулити а ідентифікатор свіча, тоді можливо обєднати 1 і 3 варіант) і порт клієнта. 2-й влан ід - є унікальним для кожно клієнта (обмеження 4к клієнтів).3-й - svlan+cvlan. Знову ж таки, це моє бачення і не є догмою. Тому сюди пишу порадитися,  в т.ч. і з розробником, який повністю розуміє логіку свого продукта

P.S. це що описав, мабуть все таки заточено під accel. і обєднати 1 і 3 варіанти, мабуть тільки з аccel можливо.. бо ж Option 82 там інші ... Поки писав одна думка зявилась. Ща разрабам accel напишу..
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4792



Просмотр профиля
« Ответ #78 : 17 Февраля 2018, 16:54:39 »

Запуск модуля dhcp вообще нужен если есть аккаунтинг через радиус?
Епт, я прочитал как "не нужен" и ответил "да". Запуск модуля dhcp не нужен
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4792



Просмотр профиля
« Ответ #79 : 17 Февраля 2018, 17:07:49 »

Вы тут много написали и у меня нет времени вникать, поэтому опишу кратко, что я по этому поводу думаю.

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

В таблице mac_uid я сделал аж 3 параметра: мак юзера, мак свича и иной како-либо параметр свича (например порт). А мог бы сделать вообще одним параметром, например, все эти данные склеивались бы в одну строку. Но чисто для удобства администрирования лучше чтобы мак устройства был отдельно - тогда админка может предложить выбор мака из списка устройств.

Если вы хотите сделать еще одно поле для идентификации - это можно, но настоятельно не рекомендую это делать по одной простой причине - этих схем авторизаций развелось уже громадное количество. Поддерживать этот зоопарк все сложнее и сложнее. Если в одной схеме авторизации я или кто-то иной внедрит какую-то дополнительную фичу - еще придется адаптировать к вашей схеме и вашему новосозданному полю.

Кстати, в коде я обнаружил такой момент: если мак устройства больше 12 символов, то, все что перед ним считается vlan-ом. Видимо, я когда-то уже делал эту фичу для кого-то. Помню даже, что поле device_mac увеличивал в базе по количеству знаков. Но думаю, это было лишним, можно ж vlan хранить в поле port. Да, его надо сделать текстовым и желательно перемиеновать (но из-за совместимости не получится)
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 326


Просмотр профиля Email
« Ответ #80 : 17 Февраля 2018, 17:58:25 »

Стас все верно, схема у тебя продуманная и ее хватит на все случаи. Можно просто было бы добавить еще одну функцию чтобы указывать сколько полей нужно учитывать при авторизации. Тогда мы можем смело писать допустим в поле порт или мак устройства vlan и по нему авторизовать. На данный момент мы можем или по маку авторизовать или мак+порт. Отдельно по порту или устройству не можем, а это как раз дало бы свободу выбора в схемах авторизаций
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 326


Просмотр профиля Email
« Ответ #81 : 17 Февраля 2018, 19:23:08 »

Стас а как правильно в mac_uid добавить столбец?
Сделал
Код:
ALTER TABLE `mac_uid` ADD `onedevice` TINYINT(1) UNSIGNED NULL DEFAULT '0' AFTER `oneconnect`;

Через некоторое время /usr/local/nodeny/modules/dhcp/events.pl завис в deadlock, пришлось удалить столбец.
Записей всего-то 900.
Как быть?
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 326


Просмотр профиля Email
« Ответ #82 : 19 Февраля 2018, 16:17:49 »

Стас подскажи как сделать из checkbox, radio чтобы выбирался или первый или второй вариант но не два вместе.
Код:
    $tbl->add('*','lL',
        [ _('[p][p]',
            L('К данному порту не подключены другие абоненты/устройства'),
            L('При подключении мак не будет проверяться')) ],
        [ v::checkbox( name=>'oneconnect', value=>2, checked=>$d->{d}{oneconnect}) ],
     );

    $tbl->add('*','lL',
        [ _('[p][p]',
            L('К данному устройству не подключены другие абоненты/устройства'),
            L('При подключении мак и порт не будут проверяться')) ],
        [ v::checkbox( name=>'onedevice', value=>2, checked=>$d->{d}{onedevice}) ],
    );
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4792



Просмотр профиля
« Ответ #83 : 19 Февраля 2018, 18:23:31 »

Код:
    $tbl->add('*','lL',
        [ _('[p][p]',
            L('К данному порту не подключены другие абоненты/устройства'),
            L('При подключении мак не будет проверяться')) ],
        [ v::radio( name=>'oneconnect', value=>1, checked=>$d->{d}{oneconnect}) ],
    );

    $tbl->add('*','lL',
        [ _('[p][p]',
            L('К данному устройству не подключены другие абоненты/устройства'),
            L('При подключении мак и порт не будут проверяться')) ],
        [ v::radio( name=>'oneconnect', value=>2, checked=>$d->{d}{onedevice}) ],
    );
Обратить внимание:
  • имя переменной должно быть одинаковым в обоих radio ибо только так они будут считаться группой
  • value должны быть разными, чтобы при сабмите было видно какой пункт выбран
  • checked остается так же как и у тебя есть сейчас
  • необходимо модифицировать функцию апдейта так, чтобы при oneconnect = 1 устанавливалось oneconnect=1,onedevice=0; при oneconnect = 2 устанавливалось oneconnect=0,onedevice=1
  • в твоем случае третьего не дано - либо oneconnect либо onedevice будут установлены. Либо добавлять еще один radio
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 326


Просмотр профиля Email
« Ответ #84 : 19 Февраля 2018, 19:11:51 »

В create.o_mac_uid.pl есть такая функция o_update, а в ней кусок кода

Код:
...
    my $device_mac = ses::input('device_mac');
    my $device_port = ses::input_int('device_port');
    my $oneconnect = ses::input_int('oneconnect');
...

Если я после добавлю условие например такое

Код:

if ($oneconnect == 1) {
  my $oneconnect = 1;
  my $onedevice = 0;
} elsif ($oneconnect == 2) {
  my $oneconnect = 0;
  my $onedevice = 1;
}


Правильно так будет?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4792



Просмотр профиля
« Ответ #85 : 19 Февраля 2018, 23:34:25 »

нет. my ограничивает область видимости переменной. Нужно до условия определить переменные, а в самом условии не юзать my:

Код:
my $onedevice;
if ($oneconnect == 1) {
  $oneconnect = 1;
  $onedevice = 0;
} elsif ($oneconnect == 2) {
  $oneconnect = 0;
  $onedevice = 1;
}
С другой стороны зачем устанавливать $oneconnect = 1 когда $oneconnect == 1?
Код:
my $onedevice;
if ($oneconnect == 1) {
  $onedevice = 0;
} elsif ($oneconnect == 2) {
  $oneconnect = 0;
  $onedevice = 1;
}
Но проще так:
Код:
$oneconnect = $oneconnect == 1 ? 1 : 0;
my $onedevice = 1 - $oneconnect;
Или даже так:
Код:
$oneconnect = ($oneconnect == 1) + 0;
my $onedevice = 1 - $oneconnect;
Либо так:
Код:
my $onedevice = --$oneconnect == 1?  $oneconnect-- : $oneconnect++;
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 326


Просмотр профиля Email
« Ответ #86 : 27 Февраля 2018, 13:38:55 »

Сегодня обнаружил еще один баг

Есть клиент dhcp у которого НЕ стоит "Один на порту" и тут он меняет ноутбук. По идее у него должно писаться "Вы сменили компьютер... Получить доступ в интернет" где он вводит логин и пароль, а вместо этого ему пишет "Доступ в интернет отсутствует т.к. вы не атворизованы... Если вы пользуетесь через высокоскоростно... " до того момента пока не удалишь его ip в учетке. Удаляешь Ip и начинает правильно писать "Вы сменили компьютер... Получить доступ в интернет".

Я так полагаю проблема эта появилась из-за того что увеличилось время аренды ip до 3600.
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 326


Просмотр профиля Email
« Ответ #87 : 27 Октября 2018, 15:35:19 »

Стас проскакивает ситуация во время новой активации связки mac=uid клиентом, что новая активация забирает чужую связку работающего юзера или недавно получавшего этот ip, предположительно это происходит из-за того что связка находится по ip, насколько я понимаю по другому не найти ее в момент активации клиентом через браузер и когда ip в динамике выдается, один и тот же адрес иногда попадает разным клиентам и тут находится связка с уже проставленным uid и она перезаписывается новым uid.

Предположительно нужно сделать проверку тут /usr/local/nodeny/modules/dhcp/create.user.dhcp.pl
Код:
  # у клиента сейчас гостевой ip - выдадим новый
    my $new_ip = $usr->{ips}[0]{ipn};
    $rows = Db->do("UPDATE mac_uid SET uid=?, ip=? WHERE ip=INET_ATON(?)", $uid, $new_ip, $ses::ip);
    Db->ok or Error $lang::user::soft_error;
Добавить проверку WHERE uid=0 или подобную в UPDATE.

Что думаешь Стас?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4792



Просмотр профиля
« Ответ #88 : 28 Октября 2018, 09:19:18 »

А как получается, что выдается один и тот же ip?

P.S. Я не сразу отвечаю, потому что занят другой задачей (переделкой модуля snmp) и чтобы вникнуть в логику dhcp, которая слегка ебанутая, приходится долго вспоминать что там к чему
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 326


Просмотр профиля Email
« Ответ #89 : 28 Октября 2018, 20:10:35 »

Цитировать
А как получается, что выдается один и тот же ip?
Предполагаю так, работает клиент, потом отключается, ip через час освобождается, но походу ip не затирается в mac_uid ?! и тут подключается гость, получает этот Ip, регистрируется и в mac_uid находится по ip, якобы его связку.

Цитировать
P.S. Я не сразу отвечаю, потому что занят другой задачей (переделкой модуля snmp) и чтобы вникнуть в логику dhcp, которая слегка ебанутая, приходится долго вспоминать что там к чему
Та это пиздец, я уже думаю рисовать все связи на бумаге между маками и другими сущностными в dhcp режиме, что бы построить правильный алгоритм.
Записан
Страниц: 1 ... 4 5 [6] 7
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!