Биллинговая система Nodeny

Главная категория => Nodeny Plus => Тема начата: Cell от 19 Января 2017, 12:13:14



Название: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 19 Января 2017, 12:13:14
Сабж темы заслуживает внимания т.к. данная связка описана в разных местах и с разными допущениями и требует довольно долгого курения всяких процедур, чтобы понять что именно необходимо, поэтому собираю все до кучи в этой теме.
Если кто-то хочет вникать самостоятельно, то вот ссылки для облегчения поисков:
http://forum.nodeny.com.ua/index.php?topic=2703.75 (http://forum.nodeny.com.ua/index.php?topic=2703.75)
http://forum.nodeny.com.ua/index.php?topic=2374.0 (http://forum.nodeny.com.ua/index.php?topic=2374.0)
http://nodeny.com.ua/wiki/index.php/Dhcp%2BRadius (http://nodeny.com.ua/wiki/index.php/Dhcp%2BRadius)
Итак. Что мы имеем? При нескольких вланах, обслуживаемых одним микротиком настройка ДХЦП сводится к поднятию и настройке DHCP сервера для каждого из вланов (со своим интерфейсом, пулом и т.п.) Тут самое важное понимать, что ДХЦП сервер  микротика присылает запрос на радиус-сервер с радиус-атрибутом Called-Station-Id равным параметру Name в настройках дхцп микротика.

Раз мы все это поняли, то остается передавать в биллиг этот параметр и пометить необходимые динамические пулы тегом равным параметру Name (имени) дхцп для каждого из вланов.

Даллее  sql.conf необходимо внести изменения чтобы было так:

Код:
        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}', '%{Called-Station-Id}')"
        postauth_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}','nas=%{NAS-IP-Address}', '%{Called-Station-Id}')"
        accounting_update_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}','nas=%{NAS-IP-Address}', '%{Called-Station-Id}')"
Не забыть ребутнуть после этого радиус-сервер.

Ну  и внести в базу данных изменения в процедуры и функции:

Цитировать
DROP FUNCTION IF EXISTS `get_ip_by_tag`;
DELIMITER $$
CREATE FUNCTION `get_ip_by_tag` ( user_id INTEGER UNSIGNED, tag VARCHAR(64) )
    RETURNS VARCHAR(15) NO SQL
BEGIN
    DECLARE user_ip VARCHAR(15);
    DECLARE real_ip VARCHAR(15);

    SELECT 1 INTO real_ip FROM users_services WHERE uid = user_id AND tags LIKE '%,realip,%';
    UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 300
        WHERE (uid = 0 OR uid = user_id)
            AND type = 'dynamic'
            AND realip = IF(real_ip>0,1,0)
            AND tags LIKE CONCAT('%,', tag, ',%')
        ORDER BY uid DESC, id ASC LIMIT 1;

    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id LIMIT 1;
    RETURN user_ip;
END$$
DELIMITER ;


DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply`(IN login VARCHAR(64), tag VARCHAR(64))
    BEGIN
    DECLARE usr_mac VARCHAR(12);
    DECLARE usr_ip VARCHAR(15);
    DECLARE usr_id INT;
    DECLARE add_attr MEDIUMTEXT;
    DECLARE line MEDIUMTEXT;
    DECLARE i INT DEFAULT 1;
    SELECT REPLACE(login, ':', '') INTO usr_mac;
    SELECT uid INTO usr_id FROM mac_uid WHERE mac=usr_mac;
    IF usr_id IS NOT NULL AND usr_id>0 THEN
        SELECT get_ip_by_tag(usr_id, tag) INTO usr_ip;
        UPDATE mac_uid SET ip=0 WHERE ip=INET_ATON(usr_ip) AND uid<>usr_id;
        UPDATE mac_uid SET ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP() WHERE uid=usr_id;
    ELSE
        START TRANSACTION;
            SELECT INET_NTOA(ip) INTO usr_ip FROM ip_pool p WHERE uid=0 AND type='dynamic' AND tags  LIKE CONCAT('%,', tag ,',%')
            AND NOT EXISTS (SELECT ip FROM mac_uid WHERE ip=p.ip)
            ORDER BY RAND() LIMIT 1 FOR UPDATE;
            INSERT INTO mac_uid VALUES(
            NULL, usr_mac, INET_ATON(usr_ip), 0, UNIX_TIMESTAMP(), 0, 0, 0)
        ON DUPLICATE KEY
            UPDATE ip=IF(ip>0,ip,INET_ATON(usr_ip)), time=UNIX_TIMESTAMP();
        COMMIT;
        SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid WHERE mac=usr_mac;
    END IF;
    SELECT NULL, login, 'Framed-IP-Address', usr_ip, '=';
    SELECT NULL, login, 'Session-Timeout', '600', '=';
END$$
DELIMITER ;




DROP PROCEDURE IF EXISTS `radupdate`;
DELIMITER $$
CREATE PROCEDURE `radupdate`(
    IN login VARCHAR(64), IN ipa VARCHAR(16), IN properties VARCHAR(255), IN tag VARCHAR(64))
BEGIN
    DECLARE usr_mac VARCHAR(16);
    SELECT REPLACE(login, ':', '') INTO usr_mac;
    CALL set_auth(ipa, CONCAT('mod=dhcp;user=', usr_mac, ';', REPLACE(properties,':','')));
    UPDATE mac_uid SET time=UNIX_TIMESTAMP() WHERE ip=INET_ATON(ipa) LIMIT 1;
END$$
DELIMITER ;

Проверяем следующим образом:

SELECT get_ip_by_tag(id_абонента,'тэг_dhcp_пула');
CALL radreply('11:22:33:44:55:66', 'тэг_dhcp_пула');

Если ошибок нет, то все сделано правильно.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: fet4 от 19 Января 2017, 13:01:15
Какой смысл авторизовывать по маку клиента?


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 19 Января 2017, 16:39:30
Какой смысл авторизовывать по маку клиента?
прибор? 20! Что 20? А что прибор?


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: fet4 от 19 Января 2017, 17:37:29
Какой смысл авторизовывать по маку клиента?
прибор? 20! Что 20? А что прибор?
микротик? а что такое микротик?


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 19 Января 2017, 22:48:32
Дружище, микротик - это такой же nas как твой аксель любимый, только со своими прибабахами, отличными от других. Не то чтобы мне там сильно нравилась его RouterOS но появившиеся не так давно железяки с ней на борту а особенно соотношение их цены/качества заставляют меня обращать на них свое внимание. В данном конкретном случае рассматривается схема авторизации абонентов по дхцп при помощи радиуса и динамических ip пулов биллинга. Есть что сказать, дополнить - говори.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: fet4 от 20 Января 2017, 11:59:21
Дружище, если ты не понял это был стеб, как и в твоем предыдущем посте, я знаю что такое микротик.
Мне просто интересна эта схема дхцп+радиус и я ее реализовал так же, только на акселе с динамикой и застрял на том что я не могу прикрутить к ней еще опцию82, так как без нее смысла нет в этой схеме, тем более если клиенты по опции82 уже работают только через обычный модуль дхцп.

Потому я и задал вопрос.
Какой смысл авторизовывать по маку клиента в данной схеме?


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Efendy от 20 Января 2017, 13:01:51
Кстати, get_ip иногда приводила к дедлокам, мускул иногда на простых запросах чудит, пришлось переделать ее, так что тоже самое надо сделать и для get_ip_by_tag,  типа такого:
Код:
UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 300
    WHERE id = (SELECT id FROM (
        (
          SELECT id, uid FROM ip_pool
          WHERE uid = 0 AND type = 'dynamic' AND realip = IF(real_ip>0,1,0)
          AND tags LIKE CONCAT('%,', tag, ',%')
          LIMIT 1
        ) UNION (
         SELECT id, uid FROM ip_pool
          WHERE uid = user_id AND type = 'dynamic' AND realip = IF(real_ip>0,1,0)
          AND tags LIKE CONCAT('%,', tag, ',%')
          LIMIT 1
        )
    ) AS tbl ORDER BY uid DESC LIMIT 1);

И в radupdate параметр tag не используется у тебя.

И, походу у себя мелкий косяк заметил: в REPLACE(properties,':','') надо не двоеточие, а точку с запятой - это защита от того, что в параметре появится разделитель в виде точки запятой


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 20 Января 2017, 14:26:24
Проверю как работает и исправлю в описании.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 20 Января 2017, 22:41:20
С конфигом из первого поста, на первый взглад, работает все как надо. Mikrotik выдает IP из нужного pool`а согласно тегу в билинге в нужном pool`е и названию DHCP сервера в Mikrotik`е.
Из замеченного:
Если в Mikrotik`е /ip dhcp-server add disabled=no interface=ether1 name=dhcp_15(соответственно в билинге в нужном pool`е ТЕГ=dhcp_15), клиент получает IP 10.0.15...
Код:
mysql> SELECT *, INET_NTOA(ip) FROM mac_uid;
+----+--------------+-----------+-----+------------+------------+-------------+------------+---------------+
| id | mac          | ip        | uid | time       | device_mac | device_port | oneconnect | INET_NTOA(ip) |
+----+--------------+-----------+-----+------------+------------+-------------+------------+---------------+
|  1 | 005533007766 | 167776091 |   0 | 1484942137 | 0          |           0 |          0 | 10.0.15.91    |
+----+--------------+-----------+-----+------------+------------+-------------+------------+---------------+
Если потом сменить название DHCP на /ip dhcp-server add disabled=no interface=ether1 name=dhcp_1,
то IP из нового назначенного pool`а не выдается, а остается тот что прописан в БД(10.0.15.91).


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 20 Января 2017, 23:33:45
Это нормально. Этот ип минут через 5 удаляется ядром и все начинает фунциклировать как надо.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Efendy от 21 Января 2017, 00:23:27
По идее можно изменить в get_ip_by_tag:

Код:
    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id LIMIT 1;

на

Код:
    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id AND tags LIKE CONCAT('%,', tag, ',%') LIMIT 1;


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 21 Января 2017, 00:39:09
Хочу выдать клиенту реальный IP из pool`а 217.55.66.240/28

1) Создал pool.
В личном кабинете, статически назначаю адрес 217.55.66.251
2) В Mikrotik`е:
/ip firewall nat add chain=dstnat dst-address=217.55.66.240/28 action=netmap to-addresses=10.0.1.2-10.0.1.254
/ip firewall nat add chain=srcnat src-address=10.0.1.2/24 action=netmap to-addresses=217.55.66.240/28
Добавил второй шлюз 217.55.66.240 к 10.0.1.1()

Mikrotik назначает новый адрес, но с маской /24 вместо /28
Чтото надо в процедуре изменить?


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 21 Января 2017, 01:02:54
По идее можно изменить в get_ip_by_tag:

Код:
    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id LIMIT 1;

на

Код:
    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id AND tags LIKE CONCAT('%,', tag, ',%') LIMIT 1;

Работает! Автоматически обновляет адрес в течении 5-ти минут. Или после перезагрузки компа клиента.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 21 Января 2017, 10:12:35
Mikrotik назначает новый адрес, но с маской /24 вместо /28
Чтото надо в процедуре изменить?
добавить реальный пул в дхцп и описать сеть соотв. образом.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 21 Января 2017, 15:22:47
К сожалению не могу изменить первый пост т.к. нет прав на это, поэтому пишу здесь, может модератор перенесет.
В результате последних тестирований дополнений и обновлений конфигурация выглядит следующим образом:
sql.conf

Цитировать
        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}', '%{Called-Station-Id}')"
        postauth_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}','nas=%{NAS-IP-Address}')"
        accounting_update_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}','nas=%{NAS-IP-Address}')"

Измененные функции и процедуры по сравнению с документацией:
Цитировать
DROP FUNCTION IF EXISTS `get_ip_by_tag`;
DELIMITER $$
CREATE FUNCTION `get_ip_by_tag` ( user_id INTEGER UNSIGNED, tag VARCHAR(64) )
    RETURNS VARCHAR(15) NO SQL
BEGIN
    DECLARE user_ip VARCHAR(15);
    DECLARE real_ip VARCHAR(15);

    SELECT 1 INTO real_ip FROM users_services WHERE uid = user_id AND tags LIKE '%,realip,%';
    UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 300
    WHERE id = (SELECT id FROM (
        (
          SELECT id, uid FROM ip_pool
          WHERE uid = 0 AND type = 'dynamic' AND realip = IF(real_ip>0,1,0)
          AND tags LIKE CONCAT('%,', tag, ',%')
          LIMIT 1
        ) UNION (
         SELECT id, uid FROM ip_pool
          WHERE uid = user_id AND type = 'dynamic' AND realip = IF(real_ip>0,1,0)
          AND tags LIKE CONCAT('%,', tag, ',%')
          LIMIT 1
        )
    ) AS tbl ORDER BY uid DESC LIMIT 1);
        SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id AND tags LIKE CONCAT('%,', tag, ',%') LIMIT 1;
    RETURN user_ip;
END$$
DELIMITER ;



DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply`(IN login VARCHAR(64), tag VARCHAR(64))
    BEGIN
    DECLARE usr_mac VARCHAR(12);
    DECLARE usr_ip VARCHAR(15);
    DECLARE usr_id INT;
    DECLARE add_attr MEDIUMTEXT;
    DECLARE line MEDIUMTEXT;
    DECLARE i INT DEFAULT 1;
    SELECT REPLACE(login, ':', '') INTO usr_mac;
    SELECT uid INTO usr_id FROM mac_uid WHERE mac=usr_mac;
    IF usr_id IS NOT NULL AND usr_id>0 THEN
        SELECT get_ip_by_tag(usr_id, tag) INTO usr_ip;
        UPDATE mac_uid SET ip=0 WHERE ip=INET_ATON(usr_ip) AND uid<>usr_id;
        UPDATE mac_uid SET ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP() WHERE uid=usr_id;
    ELSE
        START TRANSACTION;
            SELECT INET_NTOA(ip) INTO usr_ip FROM ip_pool p WHERE uid=0 AND type='dynamic' AND tags  LIKE CONCAT('%,', tag ,',%')
            AND NOT EXISTS (SELECT ip FROM mac_uid WHERE ip=p.ip)
            ORDER BY RAND() LIMIT 1 FOR UPDATE;
            INSERT INTO mac_uid VALUES(
            NULL, usr_mac, INET_ATON(usr_ip), 0, UNIX_TIMESTAMP(), 0, 0, 0)
        ON DUPLICATE KEY
            UPDATE ip=IF(ip>0,ip,INET_ATON(usr_ip)), time=UNIX_TIMESTAMP();
        COMMIT;
        SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid WHERE mac=usr_mac;
    END IF;
    SELECT NULL, login, 'Framed-IP-Address', usr_ip, '=';
    SELECT NULL, login, 'Session-Timeout', '600', '=';
END$$
DELIMITER ;




DROP PROCEDURE IF EXISTS `radupdate`;
DELIMITER $$
CREATE PROCEDURE `radupdate`(
    IN login VARCHAR(64), IN ipa VARCHAR(16), IN properties VARCHAR(255))
BEGIN
    DECLARE usr_mac VARCHAR(16);
    SELECT REPLACE(login, ':', '') INTO usr_mac;
    CALL set_auth(ipa, CONCAT('mod=dhcp;user=', usr_mac, ';', REPLACE(properties,';','')));
    UPDATE mac_uid SET time=UNIX_TIMESTAMP() WHERE ip=INET_ATON(ipa) LIMIT 1;
END$$
DELIMITER ;

Да, и модуль dhcp все-таки включать надо! Без него авторизация через 150 секунд идет курить.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 23 Января 2017, 14:57:44
Сделал процедуру из поста выше. Хочу выдать клиенту реальный IP.
В билинге назначаю адрес статически. Новый адрес не выдается. Продолжает выдавать 10.0.1.2.
В пуле на реальном адресе добавил нужный тег. Ситуация не изменилась.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 23 Января 2017, 15:22:28
Может реальный пул нужно статическим пометить?


Название: Re: mikrotik+dhcp+динамика+radius+много вланов+реальные IP
Отправлено: k291 от 23 Января 2017, 18:28:47
Может реальный пул нужно статическим пометить?
Он статический:
Цитировать
217.66.55.248   Статический   Да   2   dhcp_1   Изменить   Удалить
Видимо был глюк. Перезагрузил сервер. Выдало реальный адрес.
_______________________________________________________________________________
Для выдачи реальных IP адресов за микротиком:
1) В билинге создаем статический pool с пометкой "реальный?" и заполняем ТЕГ(должен быть такойже как название dhcp сервера в микротике).
1.1) На странице клиента, статически назначаем реальный адрес.
2) В микротике создаем сеть:
Код:
/ip dhcp-server network add address=217.66.55.240/28 gateway=217.66.55.240 n
etmask=28 dns-server=8.8.8.8
PS: сервер с Н+ выдает только IP адрес. Маску, шлюз и DNS выдает Mikrotik.

Дальше надо разрешить трафик в Mikrotik`е для реальных адресов:
Способ 1: при помощи создания моста между интерфейсами (Bridge).
Код:
/interface bridge
add name=Bridge1
/interface bridge port
add bridge=Bridge1 interface=ether1-gateway
add bridge=Bridge1 interface=ether2-local
ether1-gateway-порт провайдера
ether2-local-порт клиентской сети

Способ 2: при помощи NAT. В этом случае, в билинг должен быть выдан серый IP. Внешний адрес статически не назначаем
Пробросим внешний адрес 217.66.55.248 на локальный адрес 10.0.1.2:
Код:
/ip firewall nat
add action=netmap chain=srcnat comment="Mapping 217.66.55.248 > 10.0.1.2" src-address=10.0.1.2 to-addresses=217.66.55.248
add action=dst-nat chain=dstnat dst-address=217.66.55.248 to-addresses=10.0.1.2
На внешнем интерфейсе микротика, вешаем внешний адрес клиента:
Код:
/ip address
add address=217.66.55.248/32 interface=ether1-gateway network=217.66.55.248


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 23 Января 2017, 18:41:22
Может есть вариант при котором в билинге мы назначим статический реальный IP адрес, и клиент будет работать по белому адресу, без использования Bridge в Mikrotik`е?


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 23 Января 2017, 19:50:53
Может есть вариант при котором в билинге мы назначим статический реальный IP адрес, и клиент будет работать по белому адресу, без использования Bridge в Mikrotik`е?
Пока вижу 1н вариант: Создать pool реальных адресов без назначения ТЕГа. Статически назначить клиенту в его кабинете. На Микротике сделать "Способ 2: при помощи NAT" из поста выше.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 23 Января 2017, 19:51:35
Можно конечно )) для этого реальная сеть должна быть зароучена на микротик, при этом ип шлюза нужно вешать алиасом с юзерской стороны


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 24 Января 2017, 16:26:06
Можно конечно )) для этого реальная сеть должна быть зароучена на микротик, при этом ип шлюза нужно вешать алиасом с юзерской стороны
Можешь подсказать как именно. Не могу разобраться.
Я уточню, выше стоящий провайдер выдает блок реальных адресов, их надо раздать некоторым клиентам за микротиком.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов+реальные IP
Отправлено: k291 от 24 Января 2017, 16:46:39
На внешнем интерфейсе микротика, вешаем внешний адрес клиента:
Код:
/ip address
add address=217.66.55.248/32 interface=ether1-gateway network=217.66.55.248
Поправка:
Код:
/ip address
add address=217.66.55.248/28 interface=ether1-gateway network=217.66.55.240


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 24 Января 2017, 18:38:35
Ну  я так понимаю, вы не ищете легких путей. А договориться с провайдером, чтобы оно выдало вам интерфейсную сеть с маской /30 или /31 и отдельно зароутить за интерфейс еще какую-то сеть это никак? Ну ладно, ща такие провайдеры жмоты пошли им адресов жалко даже на интерфейсы клиентам... ну фейковые вешайте на интерфейсы и сеть просто зароутите. Какие проблемы?
Я даже на знаю что показать нужно правильно ))))
между провайдером и тобой должна быть пара типа такой 1.1.1.1/31-1.1.1.2/31
У провайдера должна быть зароучена на тебя реальная сеть типа так:
route add -net 2.2.2.0/25 gw 1.1.1.2
тогда ты сможешь у себя на внутреннем интерфейсе (в сторону юзеров) поднять ип 2.2.2.1/25 и раздавать эту сеть юзерам.
Можно ее откусить с другого конца и заюзать ипы на нат.
Как еще объяснить надо?


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 25 Января 2017, 02:07:10
Ситуация такова:
Получил от провайдера сетку 217.66.55.240/28. Микротику выдал 217.66.55.250(интернет работает).
Делаем Bridge между внешним портом и локальной сети.
Вешаем DHCP на Bridge. Запрещаю ДХЦП запросы с порта провайдера:
/interface bridge filter add action=drop chain=input comment="DROP DHCP v provayderskuu set" dst-port=67 in-interface=ether1 ip-protocol=udp mac-protocol=ip
Назначаем статический внешний адрес на странице клиента.
Клиент получает внешний адрес,шлюз,ДНС.

Вроде клиента должно пустить в интернет, но нет.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 25 Января 2017, 14:59:08
Ну если там о 28 сетке идет речь, то проще через netmap в файрволе микротика сделать.
что-то типа такого https://www.google.ru/search?rls=ru&q=mikrotik+netmap (https://www.google.ru/search?rls=ru&q=mikrotik+netmap)


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 26 Января 2017, 02:01:15
/28 это как пример.
NAT я описывал выше "Способ 2: при помощи NAT", в этом случае клиенты могут возмущаться, что они получаю серый адрес и уже не посмотрят, что их в интернете определяет по своему внешнему адресу. + если клиенту в билинге статически назначить внешний адрес, по он его получит, а интернет работать не будет. Если не выдавать внешний адрес, то потом будешь гадать, какие свободные адреса у тебя еще остались.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 26 Января 2017, 02:27:40
Реальным адресам надо было выдавать шлюз IP адрес назначенный на интерфейсе локальной сети.
----------------------------------------------------------------------------------
Рабочий вариант по посту h_ttp://forum.nodeny.com.ua/index.php?topic=2919.msg30697#msg30697:

Для выдачи реальных IP адресов за микротиком через bridge:
1) В билинге создаем статический pool с пометкой "реальный?" и заполняем ТЕГ(должен быть такойже как название dhcp сервера в микротике).
1.1) На странице клиента, статически назначаем реальный адрес.

 В микротике создаем сеть:
2) Так как у нас за микротиком в локальной сети также будут серые адреса, на интерфейс вешаем внутренний IP:
Код:
/ip address add interface=ether8 address=10.0.0.1/24 netmask=10.0.0.0
ether8 - локальная сеть
10.0.0.1/24 - сеть серых адресов, равная созданному pool`у в билинге.

Дальше надо разрешить трафик в Mikrotik`е для реальных адресов:
3) Способ 1: при помощи создания моста между интерфейсами (Bridge).
Код:
/interface bridge
add name=Bridge1
/interface bridge port
add bridge=Bridge1 interface=ether1-gateway
add bridge=Bridge1 interface=ether2-local
ether1-gateway - порт провайдера
ether2-local - порт клиентской сети

3.1) Создаем DHCP внешних адресов:
Код:
/ip dhcp-server network add address=217.66.55.240/28 gateway=10.0.0.1 netmask=28 dns-server=8.8.8.8 interface=Bridge1
gateway - равен IP адресу назначенному на локальном интерфейсе
interface=Bridge1 - соединяем внешний и локальный порт.
PS: сервер с Н+ выдает только IP адрес. Маску, шлюз и DNS выдает Mikrotik.

3.2) Добавляем сеть внешний адресов:
Код:
 /ip dhcp-server network add address=217.66.55.240/28 gateway=10.0.0.1 netmas
k=28 dns-server=8.8.8.8
address - pool созданный в билинге
gateway - адрес порта назначенный на локальном порту


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 02 Февраля 2017, 19:16:29
Запуская Radius, в роли NAS`a Mikrotik RB2111UiAS-2HnD. Клиенты заведены в билинг.
3-и клиента нормально получают адреса, интернет работает.
У 4-го клиента в Leases: МАС Address 00:00:00:00:00:00, в логах "dhcp,warning dhcp client 00:00:00:00:00:00 declines IP address". Если МАС убрать из билнга, в Leases отображается МАС клиента.
У 5-го клиента в Leases отображается МАС  на 30 секунд со статусом offered. Сколько бы порт не передергивали и не перезагружали клиентское оборудование.

Стоит включить DHCP без связки с Nodeny, всем клиентам нормально выдается адреса.
Может чтото в процедуре?


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 04 Февраля 2017, 05:00:05
Схема работает не так как надо.
Микротик от радиуса(с сервера с H+) выдает IP адреса, но не всем. Из 86 клиентов, примерно 70. Через не определенное время, количество IP адресов сокращается. Напротив IP адресов МАС меняется на 00:00:00:00:00:00,время аренды адреса берется с DHCP(5минут) микротика, Status меняется на busy. Прилагаю скриншот.

DHCP модуль запускал с ядром и отдельно вручную.
/nokernel.pl -m=dhcp -v ошибок не выдает. Показывает Строк: 73 из 86 возможных и 64 адресов в Микротике.
/etc/init.d/isc-dhcp-server restart - DHCP перезагружал.

В фаерволе сервера микротику все разрешено:
iptables -A INPUT -s 217.66.55.250/32 -j ACCEPT
iptables -A OUTPUT -s 217.66.55.250/32 -j ACCEPT

Что может быть не так? Как то странно. Пробовал на своем компе, проблем не было, а как запустил на одном доме с 86 клиентами, так некоторые не могут получить адрес или получают, но на время.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 04 Февраля 2017, 08:32:46
что пишет лог микротика?
По картинке видно, что адреса интересующих случаев получены динамически без использования радиуса. Я бы сделал для начала таймаут у радиуса чуток побольше до 2000 мс. это раз и в качестве эксперимента выставил бы в дхцп режим "статик онли" без указания пула дхцп.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 05 Февраля 2017, 05:43:17
Поставил как сказали. В Leases(в микротике) стабильно светится 66-68 МАСов. Но их должно быть примерно 75.
10.0.1.6 постоянно выдает ошибку, напротив адреса светится МАС 00:00:00:00:00:00.
Адрес 10.0.1.71 получил 2-й микротик, но в списке Leases его нет. В билинге не появляется зеленый ключик, IP адрес не попадает в группу goodboy и соответственно у 10.0.1.71 нет интернета.

PS: Все же, в группу goodboy надо отправлять все IP адреса которые имеют доступ, не зависимо от того, авторизован ли он или нет.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 05 Февраля 2017, 05:58:39
10.0.1.6 в данный момент заблокирован(на счету долг), роутер в сети. Выдал кредит, проблему с авторизацией не решило. Также в логах ошибка ".... declines IP address 10.0.1.6"
Может быть проблема в линке? Но при получении адреса от DHCP во FreeBSD проблем нет.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 05 Февраля 2017, 06:07:46
У данного клиента добавлено несколько МАС адресов в личном кабинете:
Цитировать
Мак e8:94:f6:b0:f4:41
Искать мак в сети
Мак 00:11:05:51:24:4b
Искать мак в сети
Мак 00:11:05:e7:f4:b2
Искать мак в сети
Мак fc:4b:bc:12:7b:76
Искать мак в сети
В микротике в /ip arp  видно как напротив 10.0.1.6 периодически меняются МАСи(причем только первый в списке и последний). То есть, микротик(через Радиус) выдает 1-н IP адрес на одну учетную запись. В случае с FreeBSD, такой проблемы нет, каждому МАСу выдается свой IP адрес, сколько бы МАСо не было в 1-й учетной записи.
Надо процедуру править?


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 05 Февраля 2017, 11:13:21
видимо да


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 05 Февраля 2017, 11:23:36
видимо да
Можешь посмотреть что не так.
Всем клиентам у которых несколько МАСов в учетке, не может выдать адрес. Точней в Leasese адрес есть, но постоянно светится МАС 00:00:00:00:00:00 и периодически мигает МАС клиента.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 05 Февраля 2017, 15:27:48

Всем клиентам у которых несколько МАСов в учетке
Правильнее ликвидировать это безобразие. Хочешь много устройств? - ставь роутер и не трахай  мозг провайдеру. Так поступает большинство крупных провайдеров и я в том числе стремлюсь к этому.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 05 Февраля 2017, 17:03:05
Есть клиенты у которых стоят несколько телевизионных ТВ приставок(U2C) на которые можно удаленно зайти, подправить список каналов и т.д. Доступ к приставкам по одному порту, роутер не сможет пробросить порт на несколько адресов. Для таких клиентов приходится добавлять несколько МАСов в учетку.
Если заводить несколько учеток, то клиенту придется оплачивать по каджой отдельно,что добавит неудобств.
В веду выше сказанного, прошу добавить возможность выдачи адресов всем МАС`ам в учетной записи.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 05 Февраля 2017, 21:44:26
Есть клиенты у которых стоят несколько телевизионных ТВ приставок(U2C) на которые можно удаленно зайти, подправить список каналов и т.д. Доступ к приставкам по одному порту, роутер не сможет пробросить порт на несколько адресов. Для таких клиентов приходится добавлять несколько МАСов в учетку.
Если заводить несколько учеток, то клиенту придется оплачивать по каджой отдельно,что добавит неудобств.
Да это все бред и галимые отмазки.
делаете 8081 -> 80 ип 1, 8082 -> 80 ип2, 8083-> 80 ип3. Если какой-то гомно-роутер этого не умеет, то проще поменять роутер - они сейчас уже не роскошь и стоят копейки.
Цитировать
В веду выше сказанного, прошу добавить возможность выдачи адресов всем МАС`ам в учетной записи.
Это вам в "Спорт-лото" нужно обратиться или взять себя в руки и исправить процедуры под ваши персональные требования. Автор биллинга неоднократно заявлял, что ушел от понятия "алиас" и больше не будет их поддерживать.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 06 Февраля 2017, 19:24:38
Цитировать
Автор биллинга неоднократно заявлял, что ушел от понятия "алиас" и больше не будет их поддерживать.
Понятно,что в "алиасах" есть свои нюансы, но "алиас" работает из коробки, или его вообще убрать или дайте возможность создавать суб аккаунт с общим счетом. Уверен, что из за отсутствия суб аккаунтов, многим приходится добавлять несколько МАСов в учетку. Тем более, после массового внедрения IPTV, возможности новых приставок удаленно корректировать настройки(требует IP на устройсво) и необходимости отключать IPTV по окончанию средств на счету. И как бы они не хотели перейте на Микротики(или т.п.) они этого сделать не смогут.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 07 Февраля 2017, 00:53:54
Вот только не надо драматизировать. Корректировать настройки тв приставок вообще не входит в задачу провайдеров. На себя это может взять только провайдер с очень маленькой абонентской базой да и то до поры до времени. Никакой проблемы нет с иптв через роутер ))) ну вообще никакой ))) даже мультикасты прекрасно настраиваются, не говоря о юникастовых потоках.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 07 Февраля 2017, 17:10:30
Конечно можно и через роутер, но идея больше в мониторинге, в сети тюнер или нет. pingserver и добавление всех МАСов в учетку идеально подходило. Теперь:
а) Создавать кучу учеток и разбрасывать все МАС`и. На каждую добавлять новую платную услугу. А клиенту платить по каждому счету отдельно. Пока клиент не пошлет.
а.а) Создавать кучу учеток и разбрасывать все МАС`и. На каждую добавлять БЕСплатную услугу с авто продлением за 0грн. Клиент будет платить по основному счету. Завтра клиент перестанет платить, а интернет на тюнера не перестанет работать. И устанешь следить за всеми.
б) Идти по всем клиентам или им звонить, говорить,чтобы все тюнера включали через роутеры, убирали мосты на роутерах. И если какиета проблемы с ТВ, идти к клиенту.
По поводу редактирования списка каналов, это очень редкий случай. Я ставлю приставки U2C M2(спутниковое ТВ),iptv второстепенное,если надо клиент сам плейлист добавляет. Например сейчас куча каналов меняют частоту. Можно конечно каждого ждать когда они принесут тюнера и на каждого потом тратить по 20минут, а можно не ждать и за 2е минуты обновить список удаленно.

Хоть дайте возможность создавать доп учетку,чтобы клиент мог платить по одному счету.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 07 Февраля 2017, 18:16:35
Сейчас по одному дому/Микротику, разделил все МАСи по отдельным учеткам.
Включаю DHCP на микротике+радиус, большинство клиентов работают нормально. Но есть проблемы:
1) у некоторых(хаотично) в Leases появляется IP и МАС адрес со статусом offered. В логах "offering lease 10.0.1.2 for 01:02:03:04:05:06 without". В /ip arp, MAC светится 00:00:00:00:00:00. Сегодня тестирую целый день, интернет у клиента ни разу не заработал.
2) Получают время(Expires After) от микротика в MAC Address 00:00:00:00:00:00, Status "busy". В логах не чего не пишет.
Во всех случаях IP появляется в кабинете клиента с зеленым ключиком. В /ip arp, MAC светится правильный.

3) Реальные адреса в кабинете прописаны статически. У некоторых светится зеленый ключик у некоторых нет. Но все они в сети и у всех работает интернет.

По п.1,2, много раз перезагружали клиентские роутеры, не помогает. Адреса постоянно появляются снова. В DHCP выключаю радиус и включаю прозрачный NAT, всем нормально выдает адреса и у всех работает интернет.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 19 Февраля 2017, 22:49:29
Опишу пару нюансов возникшие во время работы.
1) Назначил клиенту статический серый адрес, он не выдался клиенту. Назначил реальный адрес, через пару минут клиент его получил. Удалил реальный адрес, клиент опять получил динамический IP.
Клиенту не назначается статический IP из серого пулла.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 19 Февраля 2017, 23:17:24
2) У некоторых клиентов, которым статически назначен реальный адрес, не появляется зеленый ключик или появляется но через время пропадает. Или дело в "Авторизация" "Включена" или "Всегда онлайн"?
PS: главное не у всех. Пару клиентов с Микротиком с зеленым ключиком. Камеры, видео регистратор без зеленого ключика. Телевизор SmartLG некоторое время с ключиком потом без, но адрес по DHCP не меняется. У всех МАСов своя учетная запись.
Это довольно частая проблема : 3) 1-й клиент получил 10.0.1.48. Через некоторое время, у него пропадает зеленый ключ. Еще через время, 2-й клиент получает 10.0.1.48(в виду того,что билинг считает,что адрес свободен). У обоих клиентов начинает глючить инет.
В Микротике в DHCP Leases 10.0.1.48 со статусом busy. В IP > ARP напротив 10.0.1.48 периодически меняется МАС адрес(1-го и 2-го клиента).
Приходится просить 2-х клиентов отключить роутеры на 10минут. После этого они получают разные адреса.
Фото ниже.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 19 Февраля 2017, 23:47:34
4) Если в учетной записи клиента несколько МАСов, то инет у клиента работать не будет.
5) У клиента роутер Tp-Link 841N v9, если включаешь мост на любых портах, то роутер перестает получать IP адрес на WAN порту. Устройства которые подключены в мост в локальных портах, также не получают адреса. Убираю мост, роутер получает адрес.
В случае с DHCP сервером на FreeBSD таких проблем нет.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: k291 от 20 Февраля 2017, 00:15:59
Чтобы избежать проблему №3, надо сделать как реализовано в dhcp в FreeBSD. Клиент получает IP адрес, и сколько бы он не перезагружал свое устройство, он будет получать один и тот же IP.

Для повышения отказоустойчивости:
1) в микротик в IP>Firewall>Address Lists необходимо отправлять все IP адреса у которых в личном кабинете в поле "Доступ" стоит "Да", а не те которые с зеленым ключиком.
2) увеличить время аренды(назначается в процедуре в первых постах) выдаваемого IP адреса на 10 дней.
В этом случае, если сервер с билингом упал, то клиент будет продолжать работать.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Cell от 24 Февраля 2017, 23:48:01
Феерично.
Считаю что тема со 2й страницы перешла злостный офтоп по мотивам частных мрий одного из админов.
Закрыто.


Название: Re: mikrotik+dhcp+динамика+radius+много вланов
Отправлено: Efendy от 28 Февраля 2017, 16:27:27
Записал в доку:

http://nodeny.com.ua:8080/wiki/index.php/%D0%92%D1%8B%D0%B4%D0%B0%D1%87%D0%B0_ip_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D1%82%D0%BE%D0%B3%D0%BE,_%D0%BA_%D0%BA%D0%B0%D0%BA%D0%BE%D0%BC%D1%83_NAS_%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD_%D0%B0%D0%B1%D0%BE%D0%BD%D0%B5%D0%BD%D1%82

(есть мелкие отличия)