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

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Динамические реальные адреса через PPPoE  (Прочитано 2607 раз)
BobroCoder
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 8


Просмотр профиля Email
« : 23 Сентября 2015, 09:59:27 »

Доброго времени суток.
При настройке биллинга возникла проблема. Что то по видимому упустил.
Подскажите, что необходимо для динамической выдачи реальных адресов по PPPoE.

Я создал "IP пул", указал в "Сети" необходимую подсеть.
Если задаю адрес статический - по PPPoE выдается адрес, клиент работает.
Для динамического адреса понял не надо клиенту прописывать никокой адрес, только подключить услугу?
Пробую так - PPPoE подключается, но без IP адреса.
Прошу помощи/объявнения.

Конфиг mpd
Цитировать
[root@coolerng /usr/home/intel]# cat /usr/local/etc/mpd5/mpd.conf
startup:
        set user admin deletempd
        set console self 127.0.0.1 5005
        set console open
        set web self 0.0.0.0 5006
        set web open

default:
        load pppoe_server

pppoe_server:

        create bundle template B
        set ipcp ranges 93.171.209.6/32 127.0.0.2/32
        set ipcp dns 93.171.209.1
        set ccp yes mppc
        set mppc yes e40
        set mppc yes e56
        set mppc yes e128
        set mppc yes stateless
        set ecp disable dese-bis dese-old

        create link template common pppoe
        set link enable multilink
        set link action bundle B
        set link disable chap pap eap
        set link enable pap
        load radius
        set pppoe service "*"

        create link template igb1 common
        set link max-children 1000
        set pppoe iface igb1
        set link enable incoming
radius:
        set radius server localhost hardpass5 1812 1813
        set radius retries 3
        set radius timeout 3
        set radius me 127.0.0.1
        set auth acct-update 45
        set auth enable radius-auth
        set auth enable radius-acct
        set radius enable message-authentic
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4782



Просмотр профиля
« Ответ #1 : 23 Сентября 2015, 10:33:59 »

Ты все правильно сделал. Есть просто один нюанс, который я почему-то не описал в документации (исправлюсь).

1) К абоненту не должен быть привязан никакой ip
2) Необходимо создать пул ip адресов типа "динамический" с флагом "реальный"
3) В параметрах услуги в поле "теги" необходимо вписать слово: realip
   В этом случае, всем абонентам, имеющим эту услугу будет выдаваться белый ip. Если необходимо выдавать только избранным, то необходимо поступить иначе: создать услугу типа basic нулевой стоимости и с тегом realip
4) Необходимо изменить процедуру get_ip в mysql:

Код:
DROP FUNCTION IF EXISTS `get_ip`;
DELIMITER $$
CREATE FUNCTION `get_ip` ( user_id INTEGER UNSIGNED )  RETURNS VARCHAR(15) NO SQL
BEGIN
    DECLARE user_ip VARCHAR(15);
    DECLARE real_ip VARCHAR(15);

    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id AND type='static' LIMIT 1;
    IF( user_ip IS NOT NULL ) THEN RETURN user_ip; END IF;

    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)
        LIMIT 1)
            UNION
        (SELECT id, uid FROM ip_pool
        WHERE uid = user_id
            AND type = 'dynamic'
            AND realip = IF(real_ip>0,1,0)
        LIMIT 1)
    ) AS tbl ORDER BY uid DESC LIMIT 1);

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

- добавлена строчка "SELECT 1 INTO real_ip FROM users_services WHERE uid = user_id AND tags LIKE '%,realip,%';"
Записан
BobroCoder
Пользователь
**

Карма: 0
Offline Offline

Сообщений: 8


Просмотр профиля Email
« Ответ #2 : 23 Сентября 2015, 12:33:26 »

Спасибо! Исправил процедуру в БД и все сразу заработало.
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

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