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

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

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #60 : 07 Февраля 2018, 20:00:02 »

Покажи какая ошибка в дебаг-режиме на странице сохранения. Если на титульной странице включить дебаг-режим, то практически все сохранения будут идти с большим белым пространством, на котором написано redirect. Нужно не нажимая redirect нажать debug и сделать скриншот ошибки
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #61 : 08 Февраля 2018, 22:44:12 »

Сел заскринить ошибку сегодня и прикинь не мог получить ее все добавлялось успешно. Что я делал - брал учетку, удалял в ней мак, добавлял снова мак, добавлял в другую учетку этот мак, все добавлялось. А Ip каждый раз разный выдавался с нужного пула, хотя само устройство не перезагружалось.

Что я делал до этого когда получал ошибку?

Поменял тип данных столбца device_port на varchar(6)
И в /usr/local/nodeny/modules/dhcp/create.o_mac_uid.pl
Код:
my $device_port = ses::input_int('device_port');
на
Код:
my $device_port = ses::input('device_port');

Да бы в него записывались не только целые числа, а и порты вида 1/12, 0/2:6 и т.д.
Для чего ? Возникла ситуация в сети когда одинаковый номер порта был у двух разных клиентов и естественно не давал работать обоим.
А что тогда у них разное было ? А разный у них был номер юнита, т.к. свичи были в стеке, т.е порты были такого вида 1/13 и 3/13.
Подумав, решил что нужно так же и хранить все это и изменил.

Могли ли эти изменения еще на что-то повлиять например, выдавать ошибку при создании, может там были какие-то не состыковки?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #62 : 10 Февраля 2018, 09:29:04 »

Полностью не вник, что ты написал. Напишу как я тестировал. У абона включается комп, мак которого еще нигде в биллинге не светился. Dchp выдает рандомный ip из пула биллинга. При этом в таблице mac_uid создается запись ip + mac + device_mac + device_port. Uid в этой записи = 0. Оператор открывает учетную запись этого абонента и нажимает кнопку "добавить мак". В поле мак-адрес вписывает мак абона и нажимает "сохранить". При этом после сохранения видно, что в поле "порт" и "мак устройства" добавились корректные данные (те, которые я написал выше device_mac и device_port). Более того, если в mysql посмотреть таблицу mac_uid и выбрать запись uid=id_абона, то и ip должен быть тем, что был выдан абоненту когда его мак еще не был занесен. Кстати, ip хранятся в виде числа, их надо расшифровывать так: INET_NTOA(ip).

Тут такой момент. Я сначала сделал перенос только ip и ты, вероятно, тогда обновился. Но позже я еще сделал перенос мака устройства и порта. Поэтому не работало.

Ну и порт переделаю в текстовый вид чуть позже

  
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #63 : 15 Февраля 2018, 15:20:03 »

Обновил сегодня модуль и что получаю.

Цитировать
Оператор открывает учетную запись этого абонента и нажимает кнопку "добавить мак". В поле мак-адрес вписывает мак абона и нажимает "сохранить". При этом после сохранения видно, что в поле "порт" и "мак устройства" добавились корректные данные (те, которые я написал выше device_mac и device_port)

mac не привязан
Код:
 SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| id      | mac          | ip        | uid | time       | device_mac   | device_port | oneconnect |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| 6434302 | ec086bd996e7 | 180489656 |   0 | 1518698735 | 0012cf7ef380 | 1/21        |          0 |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+

Добавляю чисто мак, без указания устройства и порта. Как мы видим устройство и порт не подтягивается, а ip сохраняется тот который выдан.
Код:
 SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+-----------+-----+------------+------------+-------------+------------+
| id      | mac          | ip        | uid | time       | device_mac | device_port | oneconnect |
+---------+--------------+-----------+-----+------------+------------+-------------+------------+
| 6434377 | ec086bd996e7 | 180489656 |   4 | 1518698915 |            |             |          0 |
+---------+--------------+-----------+-----+------------+------------+-------------+------------+

Проходит аккаунтинг и что мы видим? Связка удалилась и ip поменялся.
Код:
SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| id      | mac          | ip        | uid | time       | device_mac   | device_port | oneconnect |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| 6434377 | ec086bd996e7 | 180488872 |   0 | 1518699128 | 0012cf7ef380 | 1/21        |          0 |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+

Дальше, если указать мак, устройство и порт. То все хорошо, подвязывается нужный ip и клиент работает без передергиваний.
Код:
 SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| id      | mac          | ip        | uid | time       | device_mac   | device_port | oneconnect |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| 6434454 | ec086bd996e7 | 180488872 |   4 | 1518699308 | 0012cf7ef380 | 1/21        |          0 |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+

Если добавлять мак со всеми полями включая галку один на порту. То вываливается с ошибкой "Создание привязки не выполнено" и запись в mac_uid WHERE mac=? AND uid=0 затирается.
Debug
Код:
0.115583	
181 Db.pm::rollback
rollback (fail: DELETE FROM mac_uid WHERE mac=? AND uid=0)

При повторном добавлении, добавляется но без ip. Клиентское устройство приходится передергивать.
Код:
SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+----+-----+------+--------------+-------------+------------+
| id      | mac          | ip | uid | time | device_mac   | device_port | oneconnect |
+---------+--------------+----+-----+------+--------------+-------------+------------+
| 6434656 | ec086bd996e7 |  0 |   4 |    0 | 0012cf7ef380 | 1/21        |          2 |
+---------+--------------+----+-----+------+--------------+-------------+------------+


Как я понимаю где-то не правильно учитывается oneconnect. Т.к. если галку не ставить то все добавляется успешно и ip правильный. Но в основном у всех один на порту. Поэтому это критично.

Так же забегая наперед, хотелось бы добавить функцию "один на устройстве" аналог один на порту, но учитывается только мак устройства при авторизации. Большая часть  клиентов на pon так и работают, порт устройства прилетающего в опиции 82 меняется на 1, тем самым эмулируя "один на устройстве" хотя в реальности там есть физический номер порта который хотелось бы видеть в связке но не учитывать т.к. он меняется периодически.
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #64 : 15 Февраля 2018, 15:49:52 »

Цитировать
Тут такой момент. Я сначала сделал перенос только ip и ты, вероятно, тогда обновился. Но позже я еще сделал перенос мака устройства и порта
Когда ты последний раз обновлял dhcp модуль?

P.S. Мой затуп, я не обновил модуль. Обнови

Должно быть так:
   
Код:
SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| id      | mac          | ip        | uid | time       | device_mac   | device_port | oneconnect |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| 6434302 | ec086bd996e7 | 180489656 |   0 | 1518698735 | 0012cf7ef380 | 1/21        |          0 |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
Цитировать
Добавляю чисто мак, без указания устройства и порта:
Код:
SELECT * FROM `mac_uid` WHERE mac='ec086bd996e7';
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| id      | mac          | ip        | uid | time       | device_mac   | device_port | oneconnect |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
| 6434302 | ec086bd996e7 | 180489656 |   4 | 1518698735 | 0012cf7ef380 | 1/21        |          0 |
+---------+--------------+-----------+-----+------------+--------------+-------------+------------+
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #65 : 15 Февраля 2018, 18:39:35 »

Да, теперь подтягиваются устройство и порт. Т.е. так правильно добавлять, чисто мак клиента, а потом галку один на порту ставить?
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #66 : 15 Февраля 2018, 22:33:19 »

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

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #67 : 15 Февраля 2018, 23:10:05 »

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

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #68 : 15 Февраля 2018, 23:11:09 »

Да, теперь подтягиваются устройство и порт. Т.е. так правильно добавлять, чисто мак клиента, а потом галку один на порту ставить?
по идее можно сразу ставить мак и один на порту, а устройство и порт подтянутся
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


Просмотр профиля Email
« Ответ #69 : 16 Февраля 2018, 13:05:22 »

to Tom
Я не авторизую по vlan но представляю примерно как это сделать, тем самым увеличив функционал модуля dhcp до всех современных потребностей сетей которые работают по dhcp через radius.

Без изменений модуля dhcp
можно тупо отсылать в качестве имени пользователя vlan, который в свою очередь будет записываться в поле mac таблицы mac_uid, по нему и будет происходит авторизация, минус такого способа, не будет видно маков клиента.

можно записывать vlan допустим в device_mac, а в порт единицу и указать один на порту, так же будет работать логика vlan per user, костыльно выглядит конечно.

с изменением dhcp модуля
Сделать еще одно условие и доп поле "Один на устройстве", если "ДА" то при авторизации проверять только поле device_mac в которое можно занести вместо dev_mac номер vlan. Тем самым решив вопрос vlan per user и когда клиент действительно один на устройстве.

Все поля полезные mac, device_mac, port в них может хранится нужная информация для диагностики и определения от куда клиент пришел, но она не всегда нужна при авторизации по-этому было бы удобно исключать любое из них.

Стас что скажешь ? по-этому поводу?
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


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

Записувати влани - відразу ні, це непотрібне навантаження на колцентр та інженерів.. вони мають вибрати точку підключення, в ідеалі. Де підтягнеться ід svlan. І вказати номер порта, що згенерує cvlan. Це я собі так уявляю. І тут вже саме цікаве.
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


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

Цитировать
вони мають вибрати точку підключення, в ідеалі.
Где ? Когда?

Код:
І вказати номер порта, що згенерує cvlan.
Биллинг хранит то что прилетает к нему, а не наоборот.

Тогда можно добавить еще одну сущность в виде  столбца в mac_uid "vlan" и записывать туда еще и vlan и доп. поле "vlan per user", если да, то проверяем только это поле.
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


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

Ну а як привязати клієнта до порта/свіча? При введені в базу потрібно вказати де цей клієнт включений, після цього вже буде його авторизація. Миж вводим данні мака, при авторизації по маку клієнта?! Тим чи іншим способом.. В ідеалі і тут можна, по логіну паролю.. Але це вже інше тема. Поки, мені не зрозуміло, яким чином зберігати параметри авторизаціїї клієнта. Якщо в окремому полі зберігати данні типу vlan2501.101 - ну це вже суперечить вимогам Стаса про створення додаткових полів в БД. Та ще й виникає проблема, коли з accel переходити на жун, там взагалі прилітає щось типу ge-1/0/0:100-1005.
Записан
fet4
Старожил
****

Карма: 2
Offline Offline

Сообщений: 324


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

Tom вы путаетесь с понятиями.

Сначала вы хотите привязать к vlan, потом "до порта/свіча".

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

UPD
Код:
окремому полі зберігати данні типу vlan2501.101 - ну це вже суперечить вимогам Стаса про створення додаткових полів в БД.
Я думаю он сам добавит если не придумает как по другому выйти с положения. Потому что это нужные вещи.

Цитировать
Та ще й виникає проблема, коли з accel переходити на жун, там взагалі прилітає щось типу ge-1/0/0:100-1005.
Конечно это все нужно правильно формировать на входе в биллинг, уменя допустим вот так выглядят логины по опции 82 которые потом я уже в sql процедуре разбираю на части.
Код:
 ifname |            username             |    calling-sid    |      ip       | type  | comp | state  |   uptime
--------+---------------------------------+-------------------+---------------+-------+------+--------+-------------
 ipoe2  | 10feed5ded85-dcd2fc5cbfe8-0/2   | 10:fe:ed:5d:ed:85 | 10.194.0.74   | ipoe  |      | active | 10.10:43:24
 ipoe7  | f81a678b481d-0012cf8c0260-3/20  | f8:1a:67:8b:48:1d | 10.194.0.167  | ipoe  |      | active | 10.10:11:07
 ipoe0  | 30b5c25e55c3-0012cf8c0260-1/13  | 30:b5:c2:5e:55:c3 | 10.194.9.61   | ipoe  |      | active | 6.16:17:20
 ipoe1  | d46e0e506a69-0012cf8c0260-3/18  | d4:6e:0e:50:6a:69 | 10.194.0.28   | ipoe  |      | active | 5.16:05:37
 ipoe9  | 78447659340e-e067b317a3b8-0/2:6 | 78:44:76:59:34:0e | 10.194.0.6    | ipoe  |      | active | 5.02:49:02
Записан
tom
Постоялец
***

Карма: 2
Offline Offline

Сообщений: 216


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

Tom вы путаетесь с понятиями.

Сначала вы хотите привязать к vlan, потом "до порта/свіча".

Цитировать
При введені в базу потрібно вказати де цей клієнт включений, після цього вже буде його авторизація.
Зачем? Есть механизм который сам его привяжет к той или иной сущности при вводе логина и пароля в личном кабинете, нужно только указать к чему именно привязать и потом прислать биллингу всю эту необходимую информацию откуда пришел запрос.
Ну це вже інше питання, чи це вводить вручну, чи автоматом.. Питання як його зберігати і відпрацьовувати. Я не путаюсь, це білінг путається )) В нього ж немає таких параметрів як svlan-ідентифікатор свіча і cvlan-ідентифікатор порта, а є в нього Мак устройства і Порт устройства. Через них і робив костиль поки. Тільки я не знаю як на рівні радіуса розпарсить username. І тоді ще має бути хитра процедура пошуку клієнта - де спочатку по svlanу знаходим ід устройства, після цього запускаєм пошук клієнта з ід устройства і порта(який ми добудемо з cvlana)
Записан
Страниц: 1 ... 3 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!