Название: FAQ. Несколько ip на PPPoE Отправлено: Efendy от 07 Августа 2013, 10:14:09 Как сделать чтоб клиент мог подключить несколько компов на pppoe под одним логином, при этом ровно столько подключений, сколько у него подключено ip?
Как известно, логин и пароль у учетки существует в единственном экземпляре. Но, ничего, мы придумаем добавлять постфикс к логинам: +1 (2й ip в списке), +2 (3й) и т.д. Например, логин у нас ivanov. Тогда при коннекте по логину ivanov или ivanov+0 подсоединимся и получим 1й ip из списка его ip. По логину ivanov+2 - второй и т.д. Если после плюса стоит не число или число больше чем у него ip - выдается 1й айпи из списка (ivanov+blablabla+oh_no) Итак, создаем следующие процедуры: Код: DROP FUNCTION IF EXISTS `get_ip_by_num`; Код: DROP PROCEDURE IF EXISTS `radcheck`; Код: DROP PROCEDURE IF EXISTS `radreply`; Процедура radupdate - это домашнее задание, справитесь по аналогии. Не забудьте в radcheck изменить hardpass на свой ключ шифрования паролей(см. sat.cfg) Проверяем: Код: call test_radreply('ivanov+1'); Если у клиента не прописано ни одного ip - выдается динамически по старой схеме и подсоединится может только один юзер Название: Re: FAQ. Несколько ip на PPPoE Отправлено: boomer666 от 07 Августа 2013, 12:29:55 Спасибо .Будем пробовать.
Название: Re: FAQ. Несколько ip на PPPoE Отправлено: sov от 09 Августа 2013, 22:43:02 Протестировал.
Если вызывать radreply в консоли mysql - процедура работает, а если через радиус - получается ерунда: Код: [sql] expand: %{User-Name} -> sov213+1 То есть, радиус в процессе передачи логина базе данных заменяет плюс на =2B. Кто нибудь знает, как это поправить? Лично я сходу не придумал. Однако, это легко лечится в самих процедурах. Нужно просто заменить такие строки: Код: SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; Код: SELECT SUBSTRING_INDEX(login, '=', 1) INTO real_login; Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Nafanya от 05 Августа 2014, 13:14:05 Цитировать Процедура radupdate - это домашнее задание, справитесь по аналогии. Не забудьте в radcheck изменить hardpass на свой ключ шифрования паролей(см. sat.cfg) Прошу помощи, в мускуле не силен. Сделайте работу над ошибками:Цитировать DROP PROCEDURE IF EXISTS `radupdate`; DELIMITER $$ CREATE PROCEDURE `radupdate`(IN login VARCHAR(64), IN ip VARCHAR(16), IN properties VARCHAR(255)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL; SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; SELECT CAST(REPLACE(login, real_login, '') AS UNSIGNED) INTO ip_index; SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip; CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); END$$ DELIMITER ; Спасибо Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Nafanya от 08 Августа 2014, 18:24:10 Ну не хочет оно работать!!! Уже нашел у себя ошибки, исправил... Помогите. ЛЮДИ!!!! АУ...
Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Nafanya от 10 Августа 2014, 05:35:07 Да, видимо здесь, в форуме, помощи не дождаться. Здесь все "ПРОГРАММИСТЫ", а кто какой вопрос не по их уровню - такЮ мелочь пузатая. Спасибо всем за помощь. Это называется - оперативная поддержка.
Название: Re: FAQ. Несколько ip на PPPoE Отправлено: 0xbad0c0d3 от 10 Августа 2014, 09:37:41 Ну я даже не знаю... Вижу кусок кода и какая-то просьба что-то сделать, а что именно - в упор не вижу.... а потом вижу вопли, что все вокруг пи...расы! Точность ответа на Ваш вопрос прямопропорциональна точности вопроса... Тут никто, никому, ничем, не обязан. Даже (я не читал, но думаю так и есть) если ты прочитаешь лицензионное соглашение на Н+, то вряд ли ты там найдешь пункт о том, что на любой твой вопрос, даже - "почему земля круглая", будет кто-то, спотыкаясь отвечать... Хочешь ответ? - пиши внятный вопрос, в одном сообщении...
Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Nafanya от 10 Августа 2014, 19:52:26 Ну я даже не знаю... Вижу кусок кода и какая-то просьба что-то сделать, а что именно - в упор не вижу.... а потом вижу вопли, что все вокруг пи...расы! Точность ответа на Ваш вопрос прямопропорциональна точности вопроса... Тут никто, никому, ничем, не обязан. Даже (я не читал, но думаю так и есть) если ты прочитаешь лицензионное соглашение на Н+, то вряд ли ты там найдешь пункт о том, что на любой твой вопрос, даже - "почему земля круглая", будет кто-то, спотыкаясь отвечать... Хочешь ответ? - пиши внятный вопрос, в одном сообщении... Никого я тут не оскорблял, и такой ответ я предполагал. А на сайте Нодени+ есть такоеЖЦитировать Обширное сообщество позволяет найти ответ на любой вопрос, поделится своим опытом или принять участие в разработке проекта (даже если вы не умеете программировать) А если Вы лично так восприняли мою фразу, тогда ПРОСТИТЕ. Но это как бы не уровень. Когда человек инвалид и прости помощи, но ему игнор. Еще раз прошу прощения, кого оскорбил (вернее человек принял это как оскорбление) Я просто хотел обратить внимание на вопрос. Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Nafanya от 10 Августа 2014, 20:08:56 Да и кому показалось, что я его оскорбил, стучите в лмчку - не будем засорять эфир выяснением отношений.
Название: Re: FAQ. Несколько ip на PPPoE Отправлено: 0xbad0c0d3 от 10 Августа 2014, 22:11:36 У меня нет Н+ и искать в доках что-то - желания нет. излагайте проблему:
1. Что нужно получить на выходе; 2. что не работает; 3. Что делали чтобы заработало; 4. Что не работает, после того, как что-то делали. Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Nafanya от 11 Августа 2014, 07:31:52 Весь вопрос заключается: подключить одному клиенту два РРРоЕ, на два IP. Сделал процедуры как здесь. Добавил процедуру radupdate:
Цитировать DROP PROCEDURE IF EXISTS `radupdate`; DELIMITER $$ CREATE PROCEDURE `radupdate`(IN login VARCHAR(64), IN ip VARCHAR(16), IN properties VARCHAR(255)) BEGIN DECLARE usr_id INT; DECLARE ip_index INT; DECLARE usr_ip VARCHAR(15) DEFAULT NULL; DECLARE real_login VARCHAR(64) DEFAULT NULL; SELECT SUBSTRING_INDEX(login, '=', 1) INTO real_login; SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'=2B','') AS UNSIGNED) INTO ip_index; SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1; SELECT get_ip_by_num(usr_id, ip_index) INTO usr_ip; CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':',''))); END$$ DELIMITER ; Как видите, что в этой процедуре, что в процедуре radreply Я заменил две строки, как говорилось выше: Цитировать То есть, радиус в процессе передачи логина базе данных заменяет плюс на =2B. Кто нибудь знает, как это поправить? Лично я сходу не придумал. Однако, это легко лечится в самих процедурах. Нужно просто заменить такие строки: Код: SELECT SUBSTRING_INDEX(login, '+', 1) INTO real_login; SELECT CAST(REPLACE(login, real_login, '') AS UNSIGNED) INTO ip_index; на, допустим, такие: Код: SELECT SUBSTRING_INDEX(login, '=', 1) INTO real_login; SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'=2B','') AS UNSIGNED) INTO ip_index; После чего алиасы начинают работать. Однако не работает. Может, что то делаю неправильно? Я мало понимаю в мускуле, я это писал выше, однако учусь. Но не все так быстро. Не смейтесь, но где выполнять проверку: Цитировать call test_radreply('ivanov+1'); Заранее спасибо за помощь.Надеюсь вся инфа, если что-то не хватает - пожалуйста вопросы. Название: Re: FAQ. Несколько ip на PPPoE Отправлено: ser970 от 11 Августа 2014, 08:23:28 Цитировать call test_radreply('ivanov+1'); Заранее спасибо за помощь.Надеюсь вся инфа, если что-то не хватает - пожалуйста вопросы. сначала mysql -u root -pпароль мускула nodeny и потом call test_radreply('ivanov+1') Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Efendy от 11 Августа 2014, 09:34:08 надо проверять не
Код: call test_radreply('ivanov+1'); Код: call test_radreply('ivanov=2B1'); Клиент посылает ivanov+1, радиус меняет на ivanov=2B1 и в radreply подставляет этот логин Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Nafanya от 12 Августа 2014, 06:47:54 надо проверять не Код: call test_radreply('ivanov+1'); Код: call test_radreply('ivanov=2B1'); Клиент посылает ivanov+1, радиус меняет на ivanov=2B1 и в radreply подставляет этот логин Пытаюсь проверитьЖ Цитировать mysql> call test_radreply('telefon=2B1'); подскажите куда смотреть. Хочу все таки разобраться.ERROR 1305 (42000): PROCEDURE nodeny.test_radreply does not exist mysql> call test_radreply('telefon+1'); ERROR 1305 (42000): PROCEDURE nodeny.test_radreply does not exist Процедуры прикрепил Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Efendy от 12 Августа 2014, 07:47:41 Ты даже не пытаешься читать, что тебе mysql пишет. Он пишет, что процедуры test_radreply не существует. Это логично, поскольку ты ее не создавал, а создавал radreply. Кто-то привел пример с test_radreply, надеясь что ты не робот и подумаешь перед слепым использованием и переименуешь под свой случай, но оказался не прав
Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Redmen от 05 Февраля 2017, 17:19:24 Просмотрев данную тему, т.к. необходимо осуществить сабж, столкнулся с некоторыми проблемами, но всё таки довел до ума!
Во-первых, проблема выше описанных процедур в том, что если их использовать (рабочие), то даже если у абона есть только одна айпишка, все равно нужно указывать логин с индексом (правда с любым числовым), а так не красиво. Я выкладываю рабочие процедуры, в которых уже нет этой проблемы, то есть работают логины типа: test абон получит 1ый ип test+0 абон получит 1ый ип test+1 абон получит 2ой ип если у него их 2, если только 1 то 1ий (и по аналогии 2,3,4 и т.д.) test+N абон получит N-1 ип если у него их N и так, процедуры: Код: DROP FUNCTION IF EXISTS `get_ip_by_num`; Не забудьте в процедуре radcheck изменить hardpass на свой ключ шифрования паролей из файла nodeny/sat.cfg Код: DROP PROCEDURE IF EXISTS `radcheck`; Код: DROP PROCEDURE IF EXISTS `radreply`; Код: DROP PROCEDURE IF EXISTS `radupdate`; кто подскажет, зачем нужен в процедуре radupdate на входе вторым параметром IN `ip` VARCHAR(16), он нигде в ней не используется Код: DROP PROCEDURE IF EXISTS `radstop`; Предлагаю все эти процедуры добавить в коробку, так же процедура get_ip_by_num может полностью заменить процедуру get_ip принимаю СПАСИБКИ в Карму to be continued... Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Redmen от 05 Февраля 2017, 17:55:38 ...продолжение
Во-вторых при тестировании всего этого в freeradius-2.2.9 при radiusd -X и radtest .. было замечено: Код: Found Auth-Type = PAP то есть оно просит в процедуре radcheck заменить это Код: SELECT id, name, 'Password' AS Attribute, на ето Код: SELECT id, name, 'Cleartext-Password' AS Attribute, Но В Н И М А Н И Е ! ! ! ЭТОГО ДЕЛАТЬ НЕ НАДО! ! ! в freeradius-2.x.x работает по старому, а по новому нужно еще кучу настроек радиуса перековыривать но по старому точно не будет работать в freeradius-3.x.x, только по новому Т.к. freeradius-2.x.x больше обновляться не будет, и последняя стабильная версия freeradius-2.2.9, я уже себе на виртуалке для теста настроил freeradius-3.0.12, но это труднее чем 2.x.x, поэтому инструкцию пока не выкладываю (не готова) Название: Re: FAQ. Несколько ip на PPPoE Отправлено: kostya_zpr от 18 Мая 2017, 13:40:20 В такой реализации, как приведена в этой ветке, очень смущает строчка "WHERE uid = user_id AND type='static' ORDER BY ip "
То есть если добавить еще один адрес, меньший, чем последний, то все привязки поплывут Никаких других механизмов фиксации ip по передаваемому логину не придумали? Для нас тема очень актуальна, т.к. в N50.32 существует куча "корпоративных" абонентов, с индивидуальными логинами на общем счёте и не можем их нормально перенести Насчет RADIUS - я у себя сделал так Код: /* For RADIUS 1.X */ Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Efendy от 20 Мая 2017, 07:57:16 Могу написать модуль, 50 у.е цена устраивает?
Название: Re: FAQ. Несколько ip на PPPoE Отправлено: kostya_zpr от 20 Мая 2017, 08:15:10 Пока сам попробую мозги поразмять :)
Но из ответа следует: 1) данная фича еще не реализована, это не я плохо искал функционал 2) все реализуемо Будут сложности - обращусь Название: Re: FAQ. Несколько ip на PPPoE Отправлено: Efendy от 20 Мая 2017, 11:47:01 https://youtu.be/A2yx5TcQzpQ
60 у.е |