tom
|
|
« Ответ #75 : 16 Февраля 2018, 14:38:36 » |
|
10feed5ded85-dcd2fc5cbfe8-0/2 - це увас такий юзернейм прилітає?
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #76 : 16 Февраля 2018, 14:41:45 » |
|
В нього ж немає таких параметрів як svlan-ідентифікатор свіча і cvlan-ідентифікатор порта, а є в нього Мак устройства і Порт устройства А записать в Мак устройства і Порт устройства нужные Вам данные религия не позволяет?) Это же всего-лишь строки 10feed5ded85-dcd2fc5cbfe8-0/2 - це увас такий юзернейм прилітає? Да mac-device_mac-port
|
|
|
Записан
|
|
|
|
tom
|
|
« Ответ #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
|
|
« Ответ #78 : 17 Февраля 2018, 16:54:39 » |
|
Запуск модуля dhcp вообще нужен если есть аккаунтинг через радиус?
Епт, я прочитал как "не нужен" и ответил "да". Запуск модуля dhcp не нужен
|
|
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #79 : 17 Февраля 2018, 17:07:49 » |
|
Вы тут много написали и у меня нет времени вникать, поэтому опишу кратко, что я по этому поводу думаю.
Мы говорим об авторизации по вилану, порту и т.д. На самом деле, для биллинга вообще не важна эта сущность. Он рассматривает параметры от dhcp или иного сервера как некий идентификатор. Например, комбинация данных мак-свича-порт - это некий идентификатор. А может быть любой другой с разным количеством параметров. Если идентификатор не найден в базе (например изменился порт) - юзер считается неизвестным.
В таблице mac_uid я сделал аж 3 параметра: мак юзера, мак свича и иной како-либо параметр свича (например порт). А мог бы сделать вообще одним параметром, например, все эти данные склеивались бы в одну строку. Но чисто для удобства администрирования лучше чтобы мак устройства был отдельно - тогда админка может предложить выбор мака из списка устройств.
Если вы хотите сделать еще одно поле для идентификации - это можно, но настоятельно не рекомендую это делать по одной простой причине - этих схем авторизаций развелось уже громадное количество. Поддерживать этот зоопарк все сложнее и сложнее. Если в одной схеме авторизации я или кто-то иной внедрит какую-то дополнительную фичу - еще придется адаптировать к вашей схеме и вашему новосозданному полю.
Кстати, в коде я обнаружил такой момент: если мак устройства больше 12 символов, то, все что перед ним считается vlan-ом. Видимо, я когда-то уже делал эту фичу для кого-то. Помню даже, что поле device_mac увеличивал в базе по количеству знаков. Но думаю, это было лишним, можно ж vlan хранить в поле port. Да, его надо сделать текстовым и желательно перемиеновать (но из-за совместимости не получится)
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #80 : 17 Февраля 2018, 17:58:25 » |
|
Стас все верно, схема у тебя продуманная и ее хватит на все случаи. Можно просто было бы добавить еще одну функцию чтобы указывать сколько полей нужно учитывать при авторизации. Тогда мы можем смело писать допустим в поле порт или мак устройства vlan и по нему авторизовать. На данный момент мы можем или по маку авторизовать или мак+порт. Отдельно по порту или устройству не можем, а это как раз дало бы свободу выбора в схемах авторизаций
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #86 : 27 Февраля 2018, 13:38:55 » |
|
Сегодня обнаружил еще один баг
Есть клиент dhcp у которого НЕ стоит "Один на порту" и тут он меняет ноутбук. По идее у него должно писаться "Вы сменили компьютер... Получить доступ в интернет" где он вводит логин и пароль, а вместо этого ему пишет "Доступ в интернет отсутствует т.к. вы не атворизованы... Если вы пользуетесь через высокоскоростно... " до того момента пока не удалишь его ip в учетке. Удаляешь Ip и начинает правильно писать "Вы сменили компьютер... Получить доступ в интернет".
Я так полагаю проблема эта появилась из-за того что увеличилось время аренды ip до 3600.
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #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
|
|
« Ответ #88 : 28 Октября 2018, 09:19:18 » |
|
А как получается, что выдается один и тот же ip?
P.S. Я не сразу отвечаю, потому что занят другой задачей (переделкой модуля snmp) и чтобы вникнуть в логику dhcp, которая слегка ебанутая, приходится долго вспоминать что там к чему
|
|
|
Записан
|
|
|
|
fet4
|
|
« Ответ #89 : 28 Октября 2018, 20:10:35 » |
|
А как получается, что выдается один и тот же ip? Предполагаю так, работает клиент, потом отключается, ip через час освобождается, но походу ip не затирается в mac_uid ?! и тут подключается гость, получает этот Ip, регистрируется и в mac_uid находится по ip, якобы его связку. P.S. Я не сразу отвечаю, потому что занят другой задачей (переделкой модуля snmp) и чтобы вникнуть в логику dhcp, которая слегка ебанутая, приходится долго вспоминать что там к чему Та это пиздец, я уже думаю рисовать все связи на бумаге между маками и другими сущностными в dhcp режиме, что бы построить правильный алгоритм.
|
|
|
Записан
|
|
|
|
|