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

Главная категория => Nodeny Plus => Тема начата: Efendy от 29 Сентября 2017, 00:35:43



Название: freeradius 3
Отправлено: Efendy от 29 Сентября 2017, 00:35:43
Сегодня ночью решил посмотреть что там у вас не получается с freeradius-ом версии 3.

По шагам, что я сделал:

  • sql.conf из поставки биллинга нам не нужен. копируем только clients.conf
  • грохаем все в папке /usr/local/etc/raddb/sites-enabled/ - у меня там было 2 файла: inner-tunnel и default
  • в этой же папке создаем файлик nodeny с таким содержимым:
Код:
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    authorize {
            sql
            chap
            pap
    }
    authenticate {
            Auth-Type PAP {
                pap
            }
    }
    preacct {
            acct_unique
            preprocess
    }
    accounting {
            sql
            exec
    }
    session {
            radutmp
            sql
    }
    post-auth {
            sql
    }
    Post-Auth-Type REJECT {
            sql
    }
}

В папке /usr/local/etc/raddb/mods-enabled/ создаем файл sql:
Код:
# -*- text -*-

sql {
driver = "rlm_sql_mysql"
mysql {
warnings = auto
}
dialect = "sqlite"

server = "localhost"
port = 3306
login = "nodeny"
password = "hardpass"
radius_db = "nodeny"

        authorize_check_query = "call radcheck('%{User-Name}')"                              
        authorize_reply_query = "call radreply('%{User-Name}')"
        postauth_query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
        accounting_update_query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
}

mysql-процедуры надо слегка подправить: Password заменить на Cleartext-Password, == заменить на :=
Код:
DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Cleartext-Password' AS Attribute,AES_DECRYPT(passwd,'hardpass') AS Value,':='
    FROM users WHERE name=login;
END$$
DELIMITER ;
    Обратите внимание, что у вас могут отличаться процедуры ибо они слегка разные для pppoe, dhcp + различные фичи в них вставляли

    При тестировании радиус ругался на eap, поэтому я вообще грохнул файл /usr/local/etc/raddb/mods-enabled/eap


Название: Re: freeradius 3
Отправлено: Tooreagen от 29 Сентября 2017, 18:15:21
Отлично! Пригодится. Просьба сразу перенести в инструкции.


Название: Re: freeradius 3
Отправлено: Efendy от 30 Сентября 2017, 09:25:51
Я специально сюда написал, чтобы протестировали, а потому уже в документацию


Название: Re: freeradius 3
Отправлено: Cell от 07 Октября 2017, 18:50:05
не работает ( в любом случае выдает реджект (

Код:
(0) ERROR: No Auth-Type found: rejecting the user via Post-Auth-Type = Reject

Процедуры выполняются правильно и ип находит как положено. Но выдает все равно реждект.


Название: Re: freeradius 3
Отправлено: Cell от 08 Октября 2017, 10:11:30
В общем эта нездоровая хрень под названием фрирадиус3 имеет свой прибабах ))) не понимает он пустые пароли и считает что пароль не передан. После долгого траха на тему юзанья этого дела для DHCP конфиг был изменен вот так, чтобы всегда был ответ в виде ACСEPT т.к нам выдает или свой ип либо динамический. Т.е. в любом случае ответ положительный.
Код:
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    authorize {
            sql
             update control {
                             Auth-Type := "Accept"
                            }
    }
authenticate {
            Auth-Type PAP {
                pap
            }
          }
    preacct {
            acct_unique
            preprocess
    }
accounting {
            detail
            sql
            exec
    }
   session {
            radutmp
            sql
    }
  post-auth {
            sql
            }
 Post-Auth-Type REJECT {
            sql
    }
}


Название: Re: freeradius 3
Отправлено: Efendy от 08 Октября 2017, 13:57:02
Т.е. все работает и можно добавить в документацию? Файл (ссылку) /usr/local/etc/raddb/mods-enabled/eap пришлось удалить или итак работает?


Название: Re: freeradius 3
Отправлено: Cell от 08 Октября 2017, 17:13:44
Т.е. все работает и можно добавить в документацию? Файл (ссылку) /usr/local/etc/raddb/mods-enabled/eap пришлось удалить или итак работает?
Да, это симлинк, его нужно удалять. У меня с вышеуказанными изменениями в режиме RADIUS+DHCP(Mikrotik) работает на ура


Название: Re: freeradius 3
Отправлено: Pa4ka от 08 Октября 2017, 19:35:01
если кому пригодиться, аля используют вместе с dhcp паралельно pppoe авторизации то лучше делать проверку хотя бы по нас-иденти и для микротиков или иных по dhcp обнулять пароль
Цитировать
authorize {
            if (NAS-Identifier == accel-nas-3) {
                                    update request {
                                                User-Password = ""
                                                }
                                     sql
                                    }
                    }
            else {
                                    sql
                                }

}


Название: Re: freeradius 3
Отправлено: elite от 08 Октября 2017, 21:25:57
если кому пригодиться, аля используют вместе с dhcp паралельно pppoe авторизации то лучше делать проверку хотя бы по нас-иденти и для микротиков или иных по dhcp обнулять пароль
Зачем?


Название: Re: freeradius 3
Отправлено: Pa4ka от 09 Октября 2017, 11:52:45
если кому пригодиться, аля используют вместе с dhcp паралельно pppoe авторизации то лучше делать проверку хотя бы по нас-иденти и для микротиков или иных по dhcp обнулять пароль
Зачем?
да и действительно, лучше бы ничего я и не писал на виходных)
просто была у меня беда с пустыми паролями вот вспомнил, думал будет лучше а оказалось как всегда))

Кстати затестил freeradius 3(на чистую), добавил еще секцию аккаунтинг, иначе у меня почему то не слушался аккаунтинг порт 1813
Цитировать
listen {
        type = acct
        ipaddr = *
        port = 1813
    }


Название: Re: freeradius 3
Отправлено: Efendy от 14 Октября 2017, 18:39:44
Кстати, аккаунтинг у вас заработал? Фишка в том, что по логам радиуса запросы идут, но процедура rudupdate не запускается. Поковырял я и у меня вот что вышло:

Код:
sql {
driver = "rlm_sql_mysql"
mysql {
warnings = auto
}
server = "localhost"
port = 3306
login = "nodeny"
password = "hardpass"
radius_db = "nodeny"
        authorize_check_query = "call radcheck('%{User-Name}')"                             
        authorize_reply_query = "call radreply('%{User-Name}')"
        accounting {
            query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                    'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
            type {
                start {
                    query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                            'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
                }
            }
        }
        post-auth {
        query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
        }
}

Здесь как бы 3 одинаковых запроса. По идее post-auth и start выполнятся в одно время, но я помню в radius-е 2й версии аккаунтинг не сразу начинался, а через период аккаунтинга, поэтому там я заюзал post-auth - он запускается сразу после успешной авторизации. В общем, для подстраховки лучше оставить и post-auth и start


Название: Re: freeradius 3
Отправлено: sedo26 от 17 Октября 2017, 18:00:21
Сегодня установил радиус3, обновились пакеты:
        perl5: 5.20.3_15 -> 5.24.3
        p5-Net-SSLeay: 1.78 -> 1.81
        p5-Socket: 2.021 -> 2.024
        p5-List-MoreUtils: 0.416 -> 0.425
        p5-List-SomeUtils-XS: 0.52 -> 0.55
        p5-Params-Validate: 1.24 -> 1.29
        p5-Variable-Magic: 0.59 -> 0.61
        p5-Package-Stash-XS: 0.28_1 -> 0.28_2
        p5-Sub-Identify: 0.12 -> 0.14
        p5-DateTime: 1.39 -> 1.44
        p5-JSON-XS: 3.02 -> 3.04
        p5-DBD-mysql: 4.037 -> 4.043
        p5-DBI: 1.636 -> 1.637

После этого перестал работать поиск ни по началу, ни по фрагменту.... В дебаге - пусто.

в логе апача

Код:
[cgi:error] [pid 62084] [client 192.168.108.26:65068] AH01215: Wide character in print at /usr/local/nodeny/web/calls.pm line 498


на
Код:
sub ajRender
{
    $ses::debug && push @$ses::cmd, {
        id     => 'debug',
        data   => Debug->show,
        action => 'insert',
    };
    eval 'use JSON';
    $@ && die $@;
    print join( "\n",
          'Content-type: text/html; charset=utf-8',
          'Cache-Control: no-store, no-cache, must-revalidate'
        ).
         "\n\n".
         to_json($ses::cmd);
    exit;
}


Название: Re: freeradius 3
Отправлено: Efendy от 17 Октября 2017, 20:53:50
Это частая проблема. Нужно удалить p5-JSON-XS и p5-common-sense, затем установить заново

P.S. Это относилось к тексту, который был до редактирования. Ну попробуй, мож поможет


Название: Re: freeradius 3
Отправлено: sedo26 от 18 Октября 2017, 08:08:28
Это частая проблема. Нужно удалить p5-JSON-XS и p5-common-sense, затем установить заново

P.S. Это относилось к тексту, который был до редактирования. Ну попробуй, мож поможет

Помогло, спасибо.


Название: Re: freeradius 3
Отправлено: sedo26 от 18 Октября 2017, 18:38:19
Но клиент так пока ИП не получает

Использовал:
nodeny
Код:
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    authorize {
            sql
             update control {
                             Auth-Type := "Accept"
                            }
    }
authenticate {
            Auth-Type PAP {
                pap
            }
          }
    preacct {
            acct_unique
            preprocess
    }
accounting {
            detail
            sql
            exec
    }
   session {
            radutmp
            sql
    }
  post-auth {
            sql
            }
 Post-Auth-Type REJECT {
            sql
    }
}

файл sql:

Код:
sql {
driver = "rlm_sql_mysql"
mysql {
warnings = auto
}
server = "localhost"
port = 3306
login = "nodeny"
password = "hardpass"
radius_db = "nodeny"
        authorize_check_query = "call radcheck('%{User-Name}')"                             
        authorize_reply_query = "call radreply('%{User-Name}')"
        accounting {
            query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                    'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
            type {
                start {
                    query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                            'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
                }
            }
        }
        post-auth {
        query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
        }
}

Mysql процедуры
Код:
ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci;

DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Cleartext-Password' AS Attribute,AES_DECRYPT(passwd,'hardpass') AS Value,':='
    FROM users WHERE name=login;
END$$
DELIMITER ;

DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$

CREATE PROCEDURE `radreply`(IN login VARCHAR(64))
BEGIN
    DECLARE usr_mac VARCHAR(12);
    DECLARE usr_ip VARCHAR(15);
    DECLARE usr_id INT;
    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(usr_id) 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
        UPDATE mac_uid SET ip=0 WHERE uid=0 AND time<(UNIX_TIMESTAMP()-3600);
        START TRANSACTION;
        SELECT INET_NTOA(ip) INTO usr_ip FROM ip_pool p WHERE uid=0 AND type='dynamic'
            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 ;

/usr/local/etc/raddb/mods-enabled/eap удалил

Лог радиуса при получении IP клиентом

(0) sql: EXPAND .query
(0) sql:    --> .query
(0) sql: Using query template 'query'
rlm_sql (sql): Reserved connection (1)
(0) sql: EXPAND call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')
(0) sql:    --> call radupdate('B8:70:F4:73:95:78','',                'user=1:b8:70:f4:73:95:78;nas=10.20.30.40')
(0) sql: Executing query: call radupdate('B8:70:F4:73:95:78','',                'user=1:b8:70:f4:73:95:78;nas=10.20.30.40')
(0) sql: ERROR: rlm_sql_mysql: ERROR 1318 (Incorrect number of arguments for PROCEDURE nodeny.radupdate; expected 4, got 3): 42000
(0) sql: SQL query returned: server error
rlm_sql (sql): Released connection (1)
(0)     [sql] = fail
(0)   } # post-auth = fail
(0) Using Post-Auth-Type Reject
(0) Post-Auth-Type sub-section not found.  Ignoring.

и так по кругу

Мак в биллинге не прописан(свежий клиент DHCP), ИП не получает никакой.

Микрот отвечает что:

radius authentication failed for B8:70:F4:73:95:78 radius server is not responding



Название: Re: freeradius 3
Отправлено: Efendy от 18 Октября 2017, 22:47:04
Твоя процедура radupdate принимает 4 параметра, а передается 3. Возможно ты намудрил с процедурами (доступы, под каким пользователем были созданы и тд)


Название: Re: freeradius 3
Отправлено: sedo26 от 19 Октября 2017, 09:48:10
Твоя процедура radupdate принимает 4 параметра, а передается 3. Возможно ты намудрил с процедурами (доступы, под каким пользователем были созданы и тд)

Когда убрал
Код:
post-auth {
        query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
        }

- всё запустилось без ошибок, и адрес получил.

Есть ещё вопросы по заглушке. Дабы не ставить насом фряху, решили установить микрот.
Сервер с биллингом является одновременно и сервером доступа, на нём отлично проходит через заглушку регистрация маков.
Но через микрот пока не удалось добиться. При заворачивании
Код:
/ip firewall nat
add action=dst-nat chain=dstnat dst-address=!10.30.40.50 src-address=!10.30.40.50 dst-port=80 fragment=no protocol=tcp src-address-list=!goodboys to-addresses=10.30.40.50 to-ports=8080

Перебрасывает на заглушку по реальному IP, а она в свою очередь на 1.1.1.1/cgi-bin/cap.pl
(но микрот 1.1.1.1 не знает где, и опять перебрасывает на заглушку по реальному IP)
при входе на 10.30.40.50/cgi-bin/cap.pl  - биллинг говорит что мы зашли с реального IP.

Получается биллинг не видит мак и ИП клиента подключенного к микроту.
Куда копать?


Название: Re: freeradius 3
Отправлено: Efendy от 19 Октября 2017, 10:32:41
А ну правильно, что не работает, то не надо чинить, надо просто убрать. Ну ок, ждем твоего следующего вопроса "почему зеленый ключик пропадает через несколько минут"


Название: Re: freeradius 3
Отправлено: Cell от 19 Октября 2017, 11:07:18
А ну правильно, что не работает, то не надо чинить, надо просто убрать. Ну ок, ждем твоего следующего вопроса "почему зеленый ключик пропадает через несколько минут"
это просто жесть какая то )))
и ничего что нужно радиус для дхцп просто по инструкции настроить )))



Название: Re: freeradius 3
Отправлено: NoDeny support от 21 Октября 2017, 21:49:34
для dhcp
cat /usr/local/etc/raddb/sites-enabled/nodeny

Цитировать
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    listen {
        type = acct
        ipaddr = *
        port = 0
    }
    authorize {
            sql
            pap
            update control {
                             Auth-Type := "Accept"
                            }
    }
    authenticate {
            Auth-Type PAP {
                pap
            }
    }
    preacct {
            acct_unique
            preprocess
    }
    accounting {
            detail
            sql
            exec
    }
    session {
            radutmp
            sql
    }
    post-auth {
            sql
    }
}

cat /usr/local/etc/raddb/mods-enabled/sql
Цитировать
sql {
    driver = "rlm_sql_mysql"
    mysql {
warnings = auto
    }
    server = "localhost"
    port = 3306
    login = "nodeny"
    password = "hardpass"
    radius_db = "nodeny"
        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}')"
        accounting {
            query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                    'nas=%{NAS-IP-Address}')"
            type {
                start {
                    query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                            'nas=%{NAS-IP-Address}')"
                }
            }
        }
        post-auth {
        query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'nas=%{NAS-IP-Address}')"
        }
}
Mysql процедуры
Цитировать
ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci;

DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT Null, login, 'Cleartext-Password' AS Attribute, '' AS Value,':=';
END$$
DELIMITER ;

DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply`(IN login VARCHAR(64))
BEGIN
    DECLARE usr_mac VARCHAR(12);
    DECLARE usr_ip VARCHAR(15);
    DECLARE usr_id INT;
    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(usr_id) 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
        UPDATE mac_uid SET ip=0 WHERE uid=0 AND time<(UNIX_TIMESTAMP()-3600);
        START TRANSACTION;
        SELECT INET_NTOA(ip) INTO usr_ip FROM ip_pool p WHERE uid=0 AND type='dynamic'
            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 ;


Название: Re: freeradius 3
Отправлено: NoDeny support от 21 Октября 2017, 21:54:49
для pppoe
cat /usr/local/etc/raddb/sites-enabled/nodeny
Цитировать
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    listen {
        type = acct
        ipaddr = *
        port = 0
    }
    authorize {
            sql
            pap
    }
    authenticate {
            Auth-Type PAP {
                pap
            }
    }
    preacct {
            acct_unique
            preprocess
    }
    accounting {
            detail
            sql
            exec
    }
    session {
            radutmp
            sql
    }
    post-auth {
            sql
    }
}
cat /usr/local/etc/raddb/mods-enabled/sql
Цитировать
sql {
        driver = "rlm_sql_mysql"
        mysql {
                warnings = auto
        }
        server = "localhost"
        port = 3306
        login = "nodeny"
        password = "hardpass"
        radius_db = "nodeny"
        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}')"
        accounting {
            query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                    'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
            type {
                start {
                    query = "call radupdate('%{User-Name}','%{Framed-IP-Address}',\
                            'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
                }
            }
        }
        post-auth {
            query = "call radupdate('%{User-Name}','%{reply:Framed-IP-Address}',\
                'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')"
        }
}
Mysql процедуры
Цитировать
ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci;

DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  SELECT id,name,'Cleartext-Password' AS Attribute,AES_DECRYPT(passwd,'hardpass') AS Value,':='
    FROM users WHERE name=login;
END$$
DELIMITER ;

DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply`(IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT;
  DECLARE usr_ip VARCHAR(15) DEFAULT NULL;

  SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
  SELECT get_ip(usr_id) INTO usr_ip;

  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Framed-Protocol','PPP','=';
END$$
DELIMITER ;

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 usr_ip VARCHAR(15) DEFAULT NULL;
  SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
  SELECT get_ip(usr_id) INTO usr_ip;
  CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':','')));
END$$
DELIMITER ;

DROP PROCEDURE IF EXISTS `radstop`;
DELIMITER $$
CREATE PROCEDURE `radstop`(IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT;
  SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
  DELETE FROM auth_now WHERE ip = get_ip(usr_id) LIMIT 1;
END$$
DELIMITER ;


Название: Re: freeradius 3
Отправлено: smollmd от 29 Ноября 2017, 09:25:26
Привет всем.
Немного не в ту тему, но надеюсь кто-то поможет.

Пробую Nodeny 50.32+ freeradius3 согласно вашим советам:

        authorize_check_query = "call radcheck('%{User-Name}')"
        authorize_reply_query = "call radreply('%{User-Name}')"
        accounting {
            query = "call radupdate('%{User-Name}')"
            type {
                start {
                    query = "call radupdate('%{User-Name}')"
                }
            }
        }
        post-auth {
            query = "call radupdate('%{User-Name}')"
        }

на первый взгляд все работает, но нету информации в базе о том, что клиент отключал сессию(только те что по таймауту)

На первом фрирадиусе  для моей версии биллинга использовалась функция
accounting_stop_query = "call radstop('%{User-Name}')"
тут все попытки ее подключить не дают результатов

Возможно я не совсем понимаю принципа работы, по сколько с ним до этого не работал. Буду рад любой помощи.


Название: Re: freeradius 3
Отправлено: Efendy от 29 Ноября 2017, 10:07:59
я в н+ отключение по команде stop не использую, честно говоря я забыл почему, возможно чтобы риконнекты не забивали таблицу авторизаций или не высасывали пул ip. Пусть авторизация пропадает по таймауту, 2 минуты таймаута - это разве много?


Название: Re: freeradius 3
Отправлено: smollmd от 29 Ноября 2017, 18:31:54
А где именно можно глянуть/сменить таймауты, по которым ядро принимает решение что клиент отключен? Бо по факту больше 10 мин.


Название: Re: freeradius 3
Отправлено: Efendy от 29 Ноября 2017, 18:41:28
/usr/local/nodeny/kernel/auth.cfg


Название: Re: freeradius 3
Отправлено: smollmd от 29 Ноября 2017, 19:48:13
это я так понимаю для nodeny+
на старой версии не нахожу, и не могу понять где в конфиге может быть этот параметр


Название: Re: freeradius 3
Отправлено: NoDeny support от 29 Ноября 2017, 22:17:11
Ну вы же читали ветку, здесь обсуждается все касательно Nodeny plus)


Название: Re: freeradius 3
Отправлено: Efendy от 30 Ноября 2017, 00:52:19
Вероятно $Kern_t_to_deny


Название: Re: freeradius 3
Отправлено: smollmd от 30 Ноября 2017, 10:45:45
$Kern_t_to_deny = 150;
$Kern_t_chk_auth = 5;
$Kern_t_traf = 30;
$Kern_t_usr_reload = 60;

если так, то это 2,5 минуты, а сессию закрывает минут через 10 после дисконекта pppoe.

В mpd5 -> acct-update 45


Название: Re: freeradius 3
Отправлено: Efendy от 30 Ноября 2017, 12:17:24
Блин, тему засорили, людям понадобится узнать как настроить 3й радиус на н+, а получат историю борьбы в н50


Название: Re: freeradius 3
Отправлено: Cell от 13 Декабря 2017, 13:45:58
Поправьте для PPPoE и PPTP иначе приходится извращенные методы авторизации использовать с дополнительной настройкой клиента.
Код:
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    listen {
        type = acct
        ipaddr = *
        port = 0
    }
    authorize {
            sql
           pap
            chap
            mschap
    }
    authenticate {
            Auth-Type PAP {
                pap
            }
            Auth-Type CHAP {
                chap
            }
            Auth-Type MSCHAP {
                mschap
            }
    }
   preacct {
            acct_unique
            preprocess
    }
    accounting {
            detail
            sql
            exec
    }
    session {
            radutmp
            sql
    }
    post-auth {
            sql
    }
}


Название: Re: freeradius 3
Отправлено: NoDeny support от 13 Декабря 2017, 18:18:40
Поправьте для PPPoE и PPTP иначе приходится извращенные методы авторизации использовать с дополнительной настройкой клиента.
Код:
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    listen {
        type = acct
        ipaddr = *
        port = 0
    }
    authorize {
            sql
           pap
            chap
            mschap
    }
    authenticate {
            Auth-Type PAP {
                pap
            }
            Auth-Type CHAP {
                chap
            }
            Auth-Type MSCHAP {
                mschap
            }
    }
   preacct {
            acct_unique
            preprocess
    }
    accounting {
            detail
            sql
            exec
    }
    session {
            radutmp
            sql
    }
    post-auth {
            sql
    }
}
Ок спасибо проверим и поправим, может кому пригодиться)


Название: Re: freeradius 3
Отправлено: Redmen от 15 Декабря 2017, 21:33:40
я в н+ отключение по команде stop не использую, честно говоря я забыл почему, возможно чтобы риконнекты не забивали таблицу авторизаций или не высасывали пул ip. Пусть авторизация пропадает по таймауту, 2 минуты таймаута - это разве много?
Я думаю, процедуру radstop нужно вернуть в коробку, а ее использовать, каждый решает сам.
Лично меня ТП замучили уже, ибо звонит абон с некой проблемой, оператор ему помогает и просит перезагрузить свое обоудование,
а в логах авторизаций либо нечего не поменялось, либо затерлись параметры последней сессии(ип, мак, нас, сервис-нейм и.т.п.)
и даже если будет засорятся бд реконнектами, будет локализирована проблема с оборудованием Прова либо Абона.


Название: Re: freeradius 3
Отправлено: Efendy от 17 Декабря 2017, 20:12:15
Блин, надо вспомнить почему я ее выключал.... не спроста ж...


Название: Re: freeradius 3
Отправлено: kosmich от 18 Декабря 2017, 15:13:32
я в н+ отключение по команде stop не использую, честно говоря я забыл почему, возможно чтобы риконнекты не забивали таблицу авторизаций или не высасывали пул ip. Пусть авторизация пропадает по таймауту, 2 минуты таймаута - это разве много?
Я думаю, процедуру radstop нужно вернуть в коробку, а ее использовать, каждый решает сам.
Лично меня ТП замучили уже, ибо звонит абон с некой проблемой, оператор ему помогает и просит перезагрузить свое обоудование,
а в логах авторизаций либо нечего не поменялось, либо затерлись параметры последней сессии(ип, мак, нас, сервис-нейм и.т.п.)
и даже если будет засорятся бд реконнектами, будет локализирована проблема с оборудованием Прова либо Абона.
Поддержу, radstop нужен.
Обнаглею и предложу, было бы очень полезно, как в Абиллсе, возможность видеть лог "ошибок авторизаций", общий и по абоненту.
Лог "ошибок авторизации" решает сходу много вопросов, экономя время и нервы, ТП и абоненту.


Название: Re: freeradius 3
Отправлено: Redmen от 18 Декабря 2017, 22:37:00
Я пока что использую связку freeradius 3 и rlm_perl на сервере с +- 500 абонов (на тесте около двух месяцев),
хочу запилить его на подобии  Абиллс-овского но по круче и ООПэшным.

 + при  инициализации трида радиуса, экземпляр rlm_perl скрипта подтягивает список БРАСов(НАСов) (для уменьшения к-ва запросов к базе) с их параметрами (Bras.pm), в перспективе из БД, а пока из  хеша.
    в процесе разработки (мееедленно):
 - при авторизации, проверяется тип браса (mpd/mikrotik) по ИПу, далее в зависимости от типа - выполняются соответствующие процедуры (в процесе разработки (мееедленно))
 - планируется проверка типа авторизации (pppoe/dhcp/l2tp/etc) - и работа с ними по аналогии с брас

пример алгоритма работы:
freeradius>rlm_perl-threed>radius.pl(max 64 requests)>Bras::Mikrotik::PPPoE::radauth();

если всё стандартизировать, то с таким подходом можно наплодить туеву хучу всевозможных БРАСов типа
(Bras::bsd::mpd::radauth();)
(Bras::linux::accel::radauth();)
и.т.д.

кроме того, в перле легче сформулировать запросы к базе с предворительными проверками чем в мускуле


п.с.: Я бы много чего перевел на ООП но тогда придется создавать  Nodeny Plus Plus (ND++)   ;D ;D ;D


Название: Re: freeradius 3
Отправлено: goletsa от 23 Января 2018, 12:28:07
Блин, тему засорили, людям понадобится узнать как настроить 3й радиус на н+, а получат историю борьбы в н50
Логичнее было бы в ветке 50 версии тоже такую тему создать. Вчера мельком пробежался - не увидел эту.
Перетаскивал вчера свою связку с mx на 3 freeradius, нарвался на грабельки с Cleartext-Password и заменой == на :=.
В целом заработало. Но заняло довольно много времени разобраться самому.


Название: Re: freeradius 3
Отправлено: NoDeny support от 23 Января 2018, 16:00:13
Блин, тему засорили, людям понадобится узнать как настроить 3й радиус на н+, а получат историю борьбы в н50
Логичнее было бы в ветке 50 версии тоже такую тему создать. Вчера мельком пробежался - не увидел эту.
Перетаскивал вчера свою связку с mx на 3 freeradius, нарвался на грабельки с Cleartext-Password и заменой == на :=.
В целом заработало. Но заняло довольно много времени разобраться самому.
Если хотите создайте ветку в Nodeny 50 и опишите там все


Название: Re: freeradius 3
Отправлено: Cell от 23 Января 2018, 23:22:20
Поправьте для PPPoE и PPTP иначе приходится извращенные методы авторизации использовать с дополнительной настройкой клиента.
Код:
server default {
    listen {
        type = auth
        ipaddr = *
        port = 1812
    }
    listen {
        type = acct
        ipaddr = *
        port = 0
    }
    authorize {
            sql
           pap
            chap
            mschap
    }
    authenticate {
            Auth-Type PAP {
                pap
            }
            Auth-Type CHAP {
                chap
            }
            Auth-Type MSCHAP {
                mschap
            }
    }
   preacct {
            acct_unique
            preprocess
    }
    accounting {
            detail
            sql
            exec
    }
    session {
            radutmp
            sql
    }
    post-auth {
            sql
    }
}
Ок спасибо проверим и поправим, может кому пригодиться)

И уж если пошла такая кухня обобщите все в одном месте.

Цитировать
  accounting {
            detail
            sql
            exec
    }
Выделенная хрень вообще никому не нужна т.к. отвечает за сохранение детальных логов аккаунтинга и только засирает место на диске, причем в сетях с 3-4 тысячи абонентов это может до гига в сутки достигать.


Название: Re: freeradius 3
Отправлено: Efendy от 24 Января 2018, 00:27:36
удалил в исходном сообщении. Похоже таки мне придется доку делать...


Название: Re: freeradius 3
Отправлено: kosmich от 26 Января 2018, 16:46:46
h t t p ://nodeny.com.ua/wiki/index.php/Freebsd_%2B_Freeradius3_%2B_Nodeny_Plus


Название: Re: freeradius 3
Отправлено: kosmich от 19 Февраля 2018, 11:31:22
Настроил согласно мануала выше, получил глюк авторизации PPPoE, со статическими айпи, ревизия 460.
Выражается в следующем, сессия поднимается и секунд через 10 падает и так по кругу.
Меняю "тип" на "динамический", сессия перестает падать.
В логе радиуса ошибок нет.
В логе мпд:
Код:
RADIUS: rad_send_request for user 'ррр_test' failed: No valid RADIUS responses received
ACCT: Close link due to accounting start error
ACCT: Link close requested by the accounting


 


Название: Re: freeradius 3
Отправлено: Efendy от 19 Февраля 2018, 13:03:29
Цитировать
No valid RADIUS responses received
надо запустить радиус с ключом -X и смотреть что он посылает


Название: Re: freeradius 3
Отправлено: kosmich от 19 Февраля 2018, 16:48:55
Цитировать
No valid RADIUS responses received
надо запустить радиус с ключом -X и смотреть что он посылает
И так по кругу.
Код:
(0) Received Access-Request Id 193 from 127.0.0.1:16095 to 
127.0.0.1:1812 length 202
(0)   NAS-Identifier = "nas01"
(0)   NAS-IP-Address = 127.0.0.1
(0)   Message-Authenticator = 0x33f5d6356e107891187069d3851ef48e
(0)   Acct-Session-Id = "9049131-vlan254-41"
(0)   NAS-Port = 41
(0)   NAS-Port-Type = Ethernet
(0)   Service-Type = Framed-User
(0)   Framed-Protocol = PPP
(0)   Calling-Station-Id = "d4da7687a4f5"
(0)   NAS-Port-Id = "vlan254"
(0)   Attr-26.12341.12 = 0x766c616e36302d3431
(0)   Tunnel-Medium-Type:0 = IEEE-802
(0)   Tunnel-Client-Endpoint:0 = "d4:da:76:87:a4:f5"
(0)   User-Name = "ppp_test"
(0)   User-Password = "ppp_test"
(0) # Executing section authorize from file
/usr/local/etc/raddb/sites-enabled/nodeny
(0)   authorize {
rlm_sql (sql): Reserved connection (0)
(0) sql: EXPAND call radcheck('%{User-Name}')
(0) sql:    --> call radcheck('ppp_test')
(0) sql: Executing select query: call radcheck('ppp_test')
(0) sql: User found in radcheck table
(0) sql: Conditional check items matched, merging assignment check items
(0) sql:   Cleartext-Password := "ppp_test"
(0) sql: EXPAND call radreply('%{User-Name}')
(0) sql:    --> call radreply('ppp_test')
(0) sql: Executing select query: call radreply('ppp_test')
(0) sql: User found in radreply table, merging reply items
(0) sql:   Framed-IP-Address = 10.0.0.3
(0) sql:   Framed-IP-Netmask = 255.255.255.255
(0) sql:   Framed-Protocol = PPP
rlm_sql (sql): Released connection (0)
(0)     [sql] = ok
(0)     [pap] = updated
(0)     [chap] = noop
(0)     [mschap] = noop
(0)   } # authorize = updated
(0) Found Auth-Type = PAP
(0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny
(0)   Auth-Type PAP {
(0) pap: Login attempt with password
(0) pap: Comparing with "known good" Cleartext-Password
(0) pap: User authenticated successfully
(0)     [pap] = ok
(0)   } # Auth-Type PAP = ok
(0) # Executing section post-auth from file
/usr/local/etc/raddb/sites-enabled/nodeny
(0)   post-auth {
(0) sql: EXPAND .query
(0) sql:    --> .query
(0) sql: Using query template 'query'
rlm_sql (sql): Reserved connection (1)
(0) sql: EXPAND call
radupdate('%{User-Name}','%{reply:Framed-IP-Address}',
'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')
(0) sql:    --> call radupdate('ppp_test','10.0.0.3',
'user=d4da7687a4f5;nas=127.0.0.1')
(0) sql: Executing query: call radupdate('ppp_test','10.0.0.3',
'user=d4da7687a4f5;nas=127.0.0.1')
(0) sql: SQL query returned: success
(0) sql: 0 record(s) updated
(0) sql: No additional queries configured
rlm_sql (sql): Released connection (1)
(0)     [sql] = noop
(0)   } # post-auth = noop
(0) Sent Access-Accept Id 193 from 127.0.0.1:1812 to 127.0.0.1:16095
length 0
(0)   Framed-IP-Address = 10.0.0.3
(0)   Framed-IP-Netmask = 255.255.255.255
(0)   Framed-Protocol = PPP
(0) Finished request
Waking up in 4.9 seconds.



Название: Re: freeradius 3
Отправлено: Efendy от 19 Февраля 2018, 18:36:22
я вроде не вижу тут проблем. Ты показал лог радиуса именно в тот момент, когда pppoe сервер выдал ошибку "от радиуса получен некорректный ответ"?


Название: Re: freeradius 3
Отправлено: kosmich от 19 Февраля 2018, 20:42:41
Ты показал лог радиуса именно в тот момент, когда pppoe сервер выдал ошибку "от радиуса получен некорректный ответ"?
Да, именно так. И так по кругу.

А вот так завершается "неправильная" сессия и начинается "правильная" с динамическим айпи.

Код:
Ready to process requests
(0) Received Access-Request Id 253 from 127.0.0.1:25058 to
127.0.0.1:1812 length 202
(0)   NAS-Identifier = "nas01"
(0)   NAS-IP-Address = 127.0.0.1
(0)   Message-Authenticator = 0x45c07bd2558b1de9d637f95b1d249178
(0)   Acct-Session-Id = "9051986-vlan254-41"
(0)   NAS-Port = 41
(0)   NAS-Port-Type = Ethernet
(0)   Service-Type = Framed-User
(0)   Framed-Protocol = PPP
(0)   Calling-Station-Id = "d4da7687a4f5"
(0)   NAS-Port-Id = "vlan254"
(0)   Attr-26.12341.12 = 0x766c616e36302d3431
(0)   Tunnel-Medium-Type:0 = IEEE-802
(0)   Tunnel-Client-Endpoint:0 = "d4:da:76:87:a4:f5"
(0)   User-Name = "ppp_test"
(0)   User-Password = "ppp_test"
(0) # Executing section authorize from file
/usr/local/etc/raddb/sites-enabled/nodeny
(0)   authorize {
rlm_sql (sql): Closing connection (0): Hit idle_timeout, was idle for 77
seconds
rlm_sql (sql): You probably need to lower "min"
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql): Closing connection (1): Hit idle_timeout, was idle for 77
seconds
rlm_sql (sql): You probably need to lower "min"
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql): Closing connection (2): Hit idle_timeout, was idle for 77
seconds
rlm_sql (sql): You probably need to lower "min"
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql): Closing connection (3): Hit idle_timeout, was idle for 77
seconds
rlm_sql (sql): You probably need to lower "min"
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql): Closing connection (4): Hit idle_timeout, was idle for 77
seconds
rlm_sql (sql): You probably need to lower "min"
rlm_sql_mysql: Socket destructor called, closing socket
rlm_sql (sql): 0 of 0 connections in use.  You  may need to increase "spare"
rlm_sql (sql): Opening additional connection (5), 1 of 10 pending slots used
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Connected to database 'nodeny' on Localhost via UNIX
socket, server version 5.6.39, protocol version 10
rlm_sql (sql): Reserved connection (5)
(0) sql: EXPAND call radcheck('%{User-Name}')
(0) sql:    --> call radcheck('ppp_test')
(0) sql: Executing select query: call radcheck('ppp_test')
(0) sql: User found in radcheck table
(0) sql: Conditional check items matched, merging assignment check items
(0) sql:   Cleartext-Password := "ppp_test"
(0) sql: EXPAND call radreply('%{User-Name}')
(0) sql:    --> call radreply('ppp_test')
(0) sql: Executing select query: call radreply('ppp_test')
(0) sql: User found in radreply table, merging reply items
(0) sql:   Framed-IP-Address = 10.0.0.3
(0) sql:   Framed-IP-Netmask = 255.255.255.255
(0) sql:   Framed-Protocol = PPP
rlm_sql (sql): Released connection (5)
Need 4 more connections to reach min connections (5)
rlm_sql (sql): Opening additional connection (6), 1 of 9 pending slots used
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Connected to database 'nodeny' on Localhost via UNIX
socket, server version 5.6.39, protocol version 10
(0)     [sql] = ok
(0)     [pap] = updated
(0)     [chap] = noop
(0)     [mschap] = noop
(0)   } # authorize = updated
(0) Found Auth-Type = PAP
(0) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny
(0)   Auth-Type PAP {
(0) pap: Login attempt with password
(0) pap: Comparing with "known good" Cleartext-Password
(0) pap: User authenticated successfully
(0)     [pap] = ok
(0)   } # Auth-Type PAP = ok
(0) # Executing section post-auth from file
/usr/local/etc/raddb/sites-enabled/nodeny
(0)   post-auth {
(0) sql: EXPAND .query
(0) sql:    --> .query
(0) sql: Using query template 'query'
rlm_sql (sql): Reserved connection (5)
(0) sql: EXPAND call
radupdate('%{User-Name}','%{reply:Framed-IP-Address}',
'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')
(0) sql:    --> call radupdate('ppp_test','10.0.0.3',
'user=d4da7687a4f5;nas=127.0.0.1')
(0) sql: Executing query: call radupdate('ppp_test','10.0.0.3',
'user=d4da7687a4f5;nas=127.0.0.1')
(0) sql: SQL query returned: success
(0) sql: 1 record(s) updated
rlm_sql (sql): Released connection (5)
(0)     [sql] = ok
(0)   } # post-auth = ok
(0) Sent Access-Accept Id 253 from 127.0.0.1:1812 to 127.0.0.1:25058
length 0
(0)   Framed-IP-Address = 10.0.0.3
(0)   Framed-IP-Netmask = 255.255.255.255
(0)   Framed-Protocol = PPP
(0) Finished request
Waking up in 4.9 seconds.
(1) Received Accounting-Request Id 248 from 127.0.0.1:54567 to
127.0.0.1:1813 length 297
(1)   NAS-Identifier = "nas01"
(1)   NAS-IP-Address = 127.0.0.1
(1)   Acct-Session-Id = "9051986-vlan254-41"
(1)   NAS-Port = 41
(1)   NAS-Port-Type = Ethernet
(1)   Service-Type = Framed-User
(1)   Framed-Protocol = PPP
(1)   Calling-Station-Id = "d4da7687a4f5"
(1)   NAS-Port-Id = "vlan254"
(1)   Attr-26.12341.12 = 0x766c616e36302d3431
(1)   Attr-26.12341.19 = 0x4d535241532d302d303661346537
(1)   Tunnel-Medium-Type:0 = IEEE-802
(1)   Tunnel-Client-Endpoint:0 = "d4:da:76:87:a4:f5"
(1)   Acct-Status-Type = Start
(1)   Framed-IP-Address = 10.0.0.3
(1)   Framed-IP-Netmask = 255.255.255.255
(1)   Framed-IPv6-Address = ::
(1)   User-Name = "ppp_test"
(1)   Acct-Multi-Session-Id = "9051987-B-1"
(1)   Attr-26.12341.13 = 0x422d31
(1)   Attr-26.12341.14 = 0x6e6730
(1)   Attr-26.12341.15 = 0x0000000b
(1)   Attr-26.12341.19 = 0x4d535241532d302d303661346537
(1)   Acct-Link-Count = 1
(1)   Acct-Authentic = RADIUS
(1) # Executing section preacct from file
/usr/local/etc/raddb/sites-enabled/nodeny
(1)   preacct {
(1)     policy acct_unique {
(1)       update request {
(1)         &Tmp-String-9 := "ai:"
(1)       } # update request = noop
(1)       if (("%{hex:&Class}" =~ /^%{hex:&Tmp-String-9}/) &&        
("%{string:&Class}" =~ /^ai:([0-9a-f]{32})/i)) {
(1)       EXPAND %{hex:&Class}
(1)          -->
(1)       EXPAND ^%{hex:&Tmp-String-9}
(1)          --> ^61693a
(1)       if (("%{hex:&Class}" =~ /^%{hex:&Tmp-String-9}/) &&        
("%{string:&Class}" =~ /^ai:([0-9a-f]{32})/i))  -> FALSE
(1)       else {
(1)         update request {
(1)           EXPAND
%{md5:%{User-Name},%{Acct-Session-ID},%{%{NAS-IPv6-Address}:-%{NAS-IP-Address}},%{NAS-Identifier},%{NAS-Port-ID},%{NAS-Port}}
(1)              --> 6aa8f750d3c9e22993188729cd4bb391
(1)           &Acct-Unique-Session-Id := 6aa8f750d3c9e22993188729cd4bb391
(1)         } # update request = noop
(1)       } # else = noop
(1)     } # policy acct_unique = noop
(1)     [preprocess] = ok
(1)   } # preacct = ok
(1) # Executing section accounting from file
/usr/local/etc/raddb/sites-enabled/nodeny
(1)   accounting {
(1) sql: EXPAND .query
(1) sql:    --> .query
(1) sql: Using query template 'query'
rlm_sql (sql): Reserved connection (6)
(1) sql: EXPAND call radupdate('%{User-Name}','%{Framed-IP-Address}',
'user=%{Calling-Station-Id};nas=%{NAS-IP-Address}')
(1) sql:    --> call radupdate('ppp_test','10.0.0.3',
'user=d4da7687a4f5;nas=127.0.0.1')
(1) sql: Executing query: call radupdate('ppp_test','10.0.0.3',
'user=d4da7687a4f5;nas=127.0.0.1')
(1) sql: SQL query returned: success
(1) sql: 1 record(s) updated
rlm_sql (sql): Released connection (6)
Need 3 more connections to reach min connections (5)
rlm_sql (sql): Opening additional connection (7), 1 of 8 pending slots used
rlm_sql_mysql: Starting connect to MySQL server
rlm_sql_mysql: Connected to database 'nodeny' on Localhost via UNIX
socket, server version 5.6.39, protocol version 10
(1)     [sql] = ok
(1)     [exec] = noop
(1)   } # accounting = ok
(1) Sent Accounting-Response Id 248 from 127.0.0.1:1813 to
127.0.0.1:54567 length 0
(1) Finished request
(1) Cleaning up request packet ID 248 with timestamp +78
Waking up in 4.9 seconds.

(0) Cleaning up request packet ID 253 with timestamp +77
Ready to process requests


Название: Re: freeradius 3
Отправлено: fet4 от 20 Февраля 2018, 14:37:44
У меня с freeradius 3 проблем нет.

У вас тоже вроде правильный лог но меня насторожило то что у вас NAS-Port-Type = Ethernet, а вы говорите что у вас pppoe, при тоннелях должно быть NAS-Port-Type = Virtual. Проверьте конфигурацию еще раз.


Название: Re: freeradius 3
Отправлено: kosmich от 20 Февраля 2018, 17:43:31
У меня с freeradius 3 проблем нет.
Вы точно поняли что именно у меня происходит ? Если тип айпи "динамический", у меня "проблем" нет.



У вас тоже вроде правильный лог но меня насторожило то что у вас NAS-Port-Type = Ethernet, а вы говорите что у вас pppoe, при тоннелях должно быть NAS-Port-Type = Virtual. Проверьте конфигурацию еще раз.
Конфигурацию чего именно проверить ? Да, авторизация сейчас только PPPoE.
Почему с типом айпи "динамический" проблема не наблюдается ? нас-порт-тип тот же, лог успешной авторизации, без падения сесии через 10 секунд, в сообщении выше.
Сессия в обоих случаях поднимается. Но с типом айпи адреса "статический" падает через 10 секунд.


Название: Re: freeradius 3
Отправлено: Efendy от 22 Февраля 2018, 12:17:05
Раз по логу радиуса нет никаких ошибок, могу предложить вариант сравнить ответы радиуса при статическом и динамическом ip


Название: Re: freeradius 3
Отправлено: fet4 от 23 Февраля 2018, 06:47:34
kosmich извиняюсь, ты был прав!

При статике у клиента, сессия дропается/подымается и так по кругу! Давайте разбираться!
Позже пришлю ответы радиуса при  статическом и динамическом ip


Название: Re: freeradius 3
Отправлено: fet4 от 23 Февраля 2018, 21:20:59
Ответы идентичны

это динамика

Код:
[2018-02-23 21:14:47]:  info: vlan108: send [RADIUS(1) Access-Request id=1 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <MS-CHAP-Challenge> <MS-CHAP2-Response>]
[2018-02-23 21:14:47]:  info: vlan108: recv [RADIUS(1) Access-Accept id=1 <Framed-IP-Address 10.194.0.212> <Framed-IP-Netmask 255.255.255.255> <Framed-Protocol PPP> <MS-CHAP2-Success> <MS-MPPE-Recv-Key> <MS-MPPE-Send-Key> <MS-MPPE-Encryption-Policy 1> <MS-MPPE-Encryption-Type 6>]

статика

Код:
[2018-02-23 21:12:50]:  info: vlan108: send [RADIUS(1) Access-Request id=1 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <MS-CHAP-Challenge> <MS-CHAP2-Response>]
[2018-02-23 21:12:50]:  info: vlan108: recv [RADIUS(1) Access-Accept id=1 <Framed-IP-Address 10.194.31.154> <Framed-IP-Netmask 255.255.255.255> <Framed-Protocol PPP> <MS-CHAP2-Success> <MS-MPPE-Recv-Key> <MS-MPPE-Send-Key> <MS-MPPE-Encryption-Policy 1> <MS-MPPE-Encryption-Type 6>]

И что же делать?


Название: Re: freeradius 3
Отправлено: Efendy от 23 Февраля 2018, 22:32:21
У тебя тоже ошибка "RADIUS: rad_send_request for user 'ррр_test' failed: No valid RADIUS responses received"? Чтоб мы не искали ошибку kosmich по твоим логам.

Также ты привел один ответ, а может быть некорректным последующий. Ты сравнивал ответы радиуса в момент когда сессия дропается?


Название: Re: freeradius 3
Отправлено: fet4 от 23 Февраля 2018, 22:48:50
Цитировать
У тебя тоже ошибка "RADIUS: rad_send_request for user 'ррр_test' failed: No valid RADIUS responses received"? Чтоб мы не искали ошибку kosmich по твоим логам.
Нет такого не было все чисто.

Здесь вот полный лог с разрывом. Вроде ж как для радиуса непонятно какой Ip ответила база, статика или диниамика. А по факту статика не работает. что за хрень


Код:
[2018-02-23 22:43:08]:  info: vlan108: recv [PPPoE PADI ec:08:6b:d9:96:e7 => ff:ff:ff:ff:ff:ff sid=0000 <Service-Name > <Host-Uniq 000007e9>]
[2018-02-23 22:43:08]:  info: vlan108: send [PPPoE PADO 00:1b:21:d0:16:5c => ec:08:6b:d9:96:e7 sid=0000 <AC-Name fibernet-bras1> <Service-Name > <AC-Cookie a6ba67c815ee5b55246f76f5674c69aecdd98fa3890f9776> <Host-Uniq 000007e9>]
[2018-02-23 22:43:08]:  info: vlan108: recv [PPPoE PADR ec:08:6b:d9:96:e7 => 00:1b:21:d0:16:5c sid=0000 <Service-Name > <Host-Uniq 000007e9> <AC-Cookie a6ba67c815ee5b55246f76f5674c69aecdd98fa3890f9776>]
[2018-02-23 22:43:08]:  info: vlan108: send [PPPoE PADS 00:1b:21:d0:16:5c => ec:08:6b:d9:96:e7 sid=9180 <AC-Name fibernet-bras1> <Service-Name > <Host-Uniq 000007e9>]
[2018-02-23 22:43:11]:  info: vlan108: recv [MSCHAP-v2 Response id=1 <497679a216f9dc1ce4826d8c46b93cd4>, <d5e5e32d8e2d2784ffd6e35f44bb448e1931a7f04e66885c>, F=0, name="maxinet"]
[2018-02-23 22:43:11]:  info: vlan108: send [RADIUS(1) Access-Request id=1 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <MS-CHAP-Challenge> <MS-CHAP2-Response>]
[2018-02-23 22:43:12]:  info: vlan108: recv [RADIUS(1) Access-Accept id=1 <Framed-IP-Address 10.194.31.154> <Framed-IP-Netmask 255.255.255.255> <Framed-Protocol PPP> <MS-CHAP2-Success> <MS-MPPE-Recv-Key> <MS-MPPE-Send-Key> <MS-MPPE-Encryption-Policy 1> <MS-MPPE-Encryption-Type 6>]
[2018-02-23 22:43:12]:  info: ppp81: connect: ppp81 <--> pppoe(ec:08:6b:d9:96:e7)
[2018-02-23 22:43:12]: debug: ppp81: ppp connected
[2018-02-23 22:43:12]:  info: ppp81: send [MSCHAP-v2 Success id=1 "S=93355E2CD19DA5DDCD61F9D4B763885EDA50CD81 M=Authentication succeeded"]
[2018-02-23 22:43:12]: debug: ppp81: auth_layer_started
[2018-02-23 22:43:12]: debug: ppp81: ccp_layer_start
[2018-02-23 22:43:12]: debug: ppp81: ipcp_layer_start
[2018-02-23 22:43:12]:  info: ppp81: send [IPCP ConfReq id=1 <addr 10.194.0.2>]
[2018-02-23 22:43:12]: debug: ppp81: ipv6cp_layer_start
[2018-02-23 22:43:12]:  info: ppp81: maxinet: authentication succeeded
[2018-02-23 22:43:12]:  info: ppp81: recv [IPCP ConfReq id=1 <addr 0.0.0.0> <dns1 0.0.0.0> <dns2 0.0.0.0>]
[2018-02-23 22:43:12]:  info: ppp81: send [IPCP ConfNak id=1 <addr 10.194.31.154> <dns1 172.19.0.5> <dns2 8.8.8.8>]
[2018-02-23 22:43:12]:  info: ppp81: recv [IPCP ConfAck id=1 <addr 10.194.0.2>]
[2018-02-23 22:43:12]:  info: ppp81: recv [IPCP ConfReq id=2 <addr 10.194.31.154> <dns1 172.19.0.5> <dns2 8.8.8.8>]
[2018-02-23 22:43:12]:  info: ppp81: send [IPCP ConfAck id=2]
[2018-02-23 22:43:12]: debug: ppp81: ipcp_layer_started
[2018-02-23 22:43:12]:  info: ppp81: send [RADIUS(1) Accounting-Request id=1 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port 81> <NAS-Port-Id "ppp81"> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <Acct-Status-Type Start> <Acct-Authentic RADIUS> <Acct-Session-Id "586929edd888dfa8"> <Acct-Session-Time 0> <Acct-Input-Octets 0> <Acct-Output-Octets 0> <Acct-Input-Packets 0> <Acct-Output-Packets 0> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 10.194.31.154>]
[2018-02-23 22:45:12]:  info: ppp81: send [RADIUS(1) Accounting-Request id=1 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port 81> <NAS-Port-Id "ppp81"> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <Acct-Status-Type Start> <Acct-Authentic RADIUS> <Acct-Session-Id "586929edd888dfa8"> <Acct-Session-Time 0> <Acct-Input-Octets 0> <Acct-Output-Octets 0> <Acct-Input-Packets 0> <Acct-Output-Packets 0> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 10.194.31.154>]
[2018-02-23 22:46:08]:  info: ppp81: recv [LCP TermReq id=2]
[2018-02-23 22:46:08]:  info: ppp81: send [LCP TermAck id=2]
[2018-02-23 22:46:08]: debug: ppp81: terminate
[2018-02-23 22:46:08]: debug: ppp81: lcp_layer_finish
[2018-02-23 22:46:08]: debug: ppp81: auth_layer_finish
[2018-02-23 22:46:08]: debug: ppp81: auth_layer_finished
[2018-02-23 22:46:08]: debug: ppp81: ccp_layer_finish
[2018-02-23 22:46:08]: debug: ppp81: ccp_layer_finished
[2018-02-23 22:46:08]: debug: ppp81: ipcp_layer_finish
[2018-02-23 22:46:08]: debug: ppp81: ipcp_layer_finished
[2018-02-23 22:46:08]: debug: ppp81: ipv6cp_layer_finish
[2018-02-23 22:46:08]: debug: ppp81: ipv6cp_layer_finished
[2018-02-23 22:46:08]:  info: ppp81: send [RADIUS(1) Accounting-Request id=1 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port 81> <NAS-Port-Id "ppp81"> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <Acct-Status-Type Stop> <Acct-Authentic RADIUS> <Acct-Session-Id "586929edd888dfa8"> <Acct-Session-Time 179> <Acct-Input-Octets 15880> <Acct-Output-Octets 54> <Acct-Input-Packets 194> <Acct-Output-Packets 3> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 10.194.31.154> <Acct-Terminate-Cause User-Request>]
[2018-02-23 22:46:09]:  info: vlan108: recv [PPPoE PADT ec:08:6b:d9:96:e7 => 00:1b:21:d0:16:5c sid=9180 <Host-Uniq 000007e9> <AC-Cookie a6ba67c815ee5b55246f76f5674c69aecdd98fa3890f9776>]
[2018-02-23 22:46:09]: debug: ppp81: pppoe: ppp finished
[2018-02-23 22:46:09]: debug: ppp81: lcp_layer_free
[2018-02-23 22:46:09]: debug: ppp81: auth_layer_free
[2018-02-23 22:46:09]: debug: ppp81: ccp_layer_free
[2018-02-23 22:46:09]: debug: ppp81: ipcp_layer_free
[2018-02-23 22:46:09]: debug: ppp81: ipv6cp_layer_free
[2018-02-23 22:46:09]: debug: ppp81: ppp destablished
[2018-02-23 22:46:09]:  info: vlan108: send [PPPoE PADT 00:1b:21:d0:16:5c => ec:08:6b:d9:96:e7 sid=9180 <AC-Name fibernet-bras1> <Service-Name >]
[2018-02-23 22:46:09]:  info: ppp81: disconnected
[2018-02-23 22:46:23]:  info: vlan108: recv [PPPoE PADI ec:08:6b:d9:96:e7 => ff:ff:ff:ff:ff:ff sid=0000 <Service-Name > <Host-Uniq 00000906>]
[2018-02-23 22:46:23]:  info: vlan108: send [PPPoE PADO 00:1b:21:d0:16:5c => ec:08:6b:d9:96:e7 sid=0000 <AC-Name fibernet-bras1> <Service-Name > <AC-Cookie a6ba67c815ee5b55246f76f5674c69ae89223d35f1a2bf87> <Host-Uniq 00000906>]
[2018-02-23 22:46:23]:  info: vlan108: recv [PPPoE PADR ec:08:6b:d9:96:e7 => 00:1b:21:d0:16:5c sid=0000 <Service-Name > <Host-Uniq 00000906> <AC-Cookie a6ba67c815ee5b55246f76f5674c69ae89223d35f1a2bf87>]
[2018-02-23 22:46:23]:  info: vlan108: send [PPPoE PADS 00:1b:21:d0:16:5c => ec:08:6b:d9:96:e7 sid=9b00 <AC-Name fibernet-bras1> <Service-Name > <Host-Uniq 00000906>]
[2018-02-23 22:46:26]:  info: vlan108: recv [MSCHAP-v2 Response id=1 <cb6cc144b6c1404ccbecfba3d53d554f>, <b0824a12806e676d199cf6a30968159c17ab7b816869a>, F=0, name="maxinet"]
[2018-02-23 22:46:26]:  info: vlan108: send [RADIUS(1) Access-Request id=1 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <MS-CHAP-Challenge> <MS-CHAP2-Response>]
[2018-02-23 22:46:26]:  info: vlan108: recv [RADIUS(1) Access-Accept id=1 <Framed-IP-Address 10.194.31.154> <Framed-IP-Netmask 255.255.255.255> <Framed-Protocol PPP> <MS-CHAP2-Success> <MS-MPPE-Recv-Key> <MS-MPPE-Send-Key> <MS-MPPE-Encryption-Policy 1> <MS-MPPE-Encryption-Type 6>]
[2018-02-23 22:46:26]:  info: ppp81: connect: ppp81 <--> pppoe(ec:08:6b:d9:96:e7)
[2018-02-23 22:46:26]: debug: ppp81: ppp connected
[2018-02-23 22:46:26]:  info: ppp81: send [MSCHAP-v2 Success id=1 "S=051926628E72DD1212CC4791BAF6DA4EA0DA799A M=Authentication succeeded"]
[2018-02-23 22:46:26]: debug: ppp81: auth_layer_started
[2018-02-23 22:46:26]: debug: ppp81: ccp_layer_start
[2018-02-23 22:46:26]: debug: ppp81: ipcp_layer_start
[2018-02-23 22:46:26]:  info: ppp81: send [IPCP ConfReq id=1 <addr 10.194.0.2>]
[2018-02-23 22:46:26]: debug: ppp81: ipv6cp_layer_start
[2018-02-23 22:46:26]:  info: ppp81: maxinet: authentication succeeded
[2018-02-23 22:46:26]:  info: ppp81: recv [IPCP ConfReq id=1 <addr 0.0.0.0> <dns1 0.0.0.0> <dns2 0.0.0.0>]
[2018-02-23 22:46:26]:  info: ppp81: send [IPCP ConfNak id=1 <addr 10.194.31.154> <dns1 172.19.0.5> <dns2 8.8.8.8>]
[2018-02-23 22:46:26]:  info: ppp81: recv [IPCP ConfAck id=1 <addr 10.194.0.2>]
[2018-02-23 22:46:26]:  info: ppp81: recv [IPCP ConfReq id=2 <addr 10.194.31.154> <dns1 172.19.0.5> <dns2 8.8.8.8>]
[2018-02-23 22:46:26]:  info: ppp81: send [IPCP ConfAck id=2]
[2018-02-23 22:46:26]: debug: ppp81: ipcp_layer_started
[2018-02-23 22:46:26]:  info: ppp81: send [RADIUS(1) Accounting-Request id=1 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port 81> <NAS-Port-Id "ppp81"> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <Acct-Status-Type Start> <Acct-Authentic RADIUS> <Acct-Session-Id "586929edd888dfce"> <Acct-Session-Time 0> <Acct-Input-Octets 0> <Acct-Output-Octets 0> <Acct-Input-Packets 0> <Acct-Output-Packets 0> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 10.194.31.154>]


Название: Re: freeradius 3
Отправлено: fet4 от 23 Февраля 2018, 23:39:51
Исходя с логов с динамикой, когда static то не приходит ответ в момент interim update

Это динамика
Код:
[2018-02-23 23:19:49]:  info: ppp81: recv [RADIUS(1) Accounting-Response id=

Код:
[2018-02-23 23:19:39]:  info: vlan108: send [PPPoE PADT 00:1b:21:d0:16:5c => ec:08:6b:d9:96:e7 sid=ff00 <AC-Name fibernet-bras1> <Service-Name >]
[2018-02-23 23:19:39]:  info: ppp81: disconnected
[2018-02-23 23:19:46]:  info: vlan108: recv [PPPoE PADI ec:08:6b:d9:96:e7 => ff:ff:ff:ff:ff:ff sid=0000 <Service-Name > <Host-Uniq 000009fd>]
[2018-02-23 23:19:46]:  info: vlan108: send [PPPoE PADO 00:1b:21:d0:16:5c => ec:08:6b:d9:96:e7 sid=0000 <AC-Name fibernet-bras1> <Service-Name > <AC-Cookie a6ba67c815ee5b55246f76f5674c69aeeb3146d44748aeab> <Host-Uniq 000009fd>]
[2018-02-23 23:19:46]:  info: vlan108: recv [PPPoE PADR ec:08:6b:d9:96:e7 => 00:1b:21:d0:16:5c sid=0000 <Service-Name > <Host-Uniq 000009fd> <AC-Cookie a6ba67c815ee5b55246f76f5674c69aeeb3146d44748aeab>]
[2018-02-23 23:19:46]:  info: vlan108: send [PPPoE PADS 00:1b:21:d0:16:5c => ec:08:6b:d9:96:e7 sid=01c0 <AC-Name fibernet-bras1> <Service-Name > <Host-Uniq 000009fd>]
[2018-02-23 23:19:49]:  info: vlan108: recv [MSCHAP-v2 Response id=1 <cf3929592c94622f4b8b93d4195c10>, <fd5af7e13bce908e4dd7fa31fe1527fe60da21196f4c6ea>, F=0, name="maxinet"]
[2018-02-23 23:19:49]:  info: vlan108: send [RADIUS(1) Access-Request id=1 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <MS-CHAP-Challenge> <MS-CHAP2-Response>]
[2018-02-23 23:19:49]:  info: vlan108: recv [RADIUS(1) Access-Accept id=1 <Framed-IP-Address 10.194.11.51> <Framed-IP-Netmask 255.255.255.255> <Framed-Protocol PPP> <MS-CHAP2-Success> <MS-MPPE-Recv-Key> <MS-MPPE-Send-Key> <MS-MPPE-Encryption-Policy 1> <MS-MPPE-Encryption-Type 6>]
[2018-02-23 23:19:49]:  info: ppp81: connect: ppp81 <--> pppoe(ec:08:6b:d9:96:e7)
[2018-02-23 23:19:49]: debug: ppp81: ppp connected
[2018-02-23 23:19:49]:  info: ppp81: send [MSCHAP-v2 Success id=1 "S=8F41350BE390F0D90688B32A8A8DFF85EFDE58D4 M=Authentication succeeded"]
[2018-02-23 23:19:49]: debug: ppp81: auth_layer_started
[2018-02-23 23:19:49]: debug: ppp81: ccp_layer_start
[2018-02-23 23:19:49]: debug: ppp81: ipcp_layer_start
[2018-02-23 23:19:49]:  info: ppp81: send [IPCP ConfReq id=1 <addr 10.194.0.2>]
[2018-02-23 23:19:49]: debug: ppp81: ipv6cp_layer_start
[2018-02-23 23:19:49]:  info: ppp81: maxinet: authentication succeeded
[2018-02-23 23:19:49]:  info: ppp81: recv [IPCP ConfReq id=1 <addr 0.0.0.0> <dns1 0.0.0.0> <dns2 0.0.0.0>]
[2018-02-23 23:19:49]:  info: ppp81: send [IPCP ConfNak id=1 <addr 10.194.11.51> <dns1 172.19.0.5> <dns2 8.8.8.8>]
[2018-02-23 23:19:49]:  info: ppp81: recv [IPCP ConfAck id=1 <addr 10.194.0.2>]
[2018-02-23 23:19:49]:  info: ppp81: recv [IPCP ConfReq id=2 <addr 10.194.11.51> <dns1 172.19.0.5> <dns2 8.8.8.8>]
[2018-02-23 23:19:49]:  info: ppp81: send [IPCP ConfAck id=2]
[2018-02-23 23:19:49]: debug: ppp81: ipcp_layer_started
[2018-02-23 23:19:49]:  info: ppp81: send [RADIUS(1) Accounting-Request id=1 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port 81> <NAS-Port-Id "ppp81"> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <Acct-Status-Type Start> <Acct-Authentic RADIUS> <Acct-Session-Id "586929edd888e19d"> <Acct-Session-Time 0> <Acct-Input-Octets 0> <Acct-Output-Octets 0> <Acct-Input-Packets 0> <Acct-Output-Packets 0> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 10.194.11.51>]
[2018-02-23 23:19:49]:  info: ppp81: recv [RADIUS(1) Accounting-Response id=1]
[2018-02-23 23:19:49]: debug: ppp81: pppoe: ppp started
[2018-02-23 23:21:49]:  info: ppp81: send [RADIUS(1) Accounting-Request id=2 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port 81> <NAS-Port-Id "ppp81"> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <Acct-Status-Type Alive> <Acct-Authentic RADIUS> <Acct-Session-Id "586929edd888e19d"> <Acct-Session-Time 123> <Acct-Input-Octets 41642> <Acct-Output-Octets 16094> <Acct-Input-Packets 103> <Acct-Output-Packets 76> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 10.194.11.51>]
[2018-02-23 23:21:49]:  info: ppp81: recv [RADIUS(1) Accounting-Response id=2]
[2018-02-23 23:23:49]:  info: ppp81: send [RADIUS(1) Accounting-Request id=3 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port 81> <NAS-Port-Id "ppp81"> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <Acct-Status-Type Alive> <Acct-Authentic RADIUS> <Acct-Session-Id "586929edd888e19d"> <Acct-Session-Time 243> <Acct-Input-Octets 55780> <Acct-Output-Octets 19439> <Acct-Input-Packets 170> <Acct-Output-Packets 93> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 10.194.11.51>]
[2018-02-23 23:23:49]:  info: ppp81: recv [RADIUS(1) Accounting-Response id=3]
[2018-02-23 23:25:49]:  info: ppp81: send [RADIUS(1) Accounting-Request id=4 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port 81> <NAS-Port-Id "ppp81"> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <Acct-Status-Type Alive> <Acct-Authentic RADIUS> <Acct-Session-Id "586929edd888e19d"> <Acct-Session-Time 363> <Acct-Input-Octets 58790> <Acct-Output-Octets 34210> <Acct-Input-Packets 204> <Acct-Output-Packets 130> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 10.194.11.51>]
[2018-02-23 23:25:49]:  info: ppp81: recv [RADIUS(1) Accounting-Response id=4]
[2018-02-23 23:27:49]:  info: ppp81: send [RADIUS(1) Accounting-Request id=5 <User-Name "maxinet"> <NAS-Identifier "accel-ppp-bras1"> <NAS-IP-Address 172.19.0.12> <NAS-Port 81> <NAS-Port-Id "ppp81"> <NAS-Port-Type Virtual> <Service-Type Framed-User> <Framed-Protocol PPP> <Calling-Station-Id "ec:08:6b:d9:96:e7"> <Called-Station-Id "00:1b:21:d0:16:5c"> <Acct-Status-Type Alive> <Acct-Authentic RADIUS> <Acct-Session-Id "586929edd888e19d"> <Acct-Session-Time 483> <Acct-Input-Octets 96181> <Acct-Output-Octets 37226> <Acct-Input-Packets 450> <Acct-Output-Packets 141> <Acct-Input-Gigawords 0> <Acct-Output-Gigawords 0> <Framed-IP-Address 10.194.11.51>]
[2018-02-23 23:27:49]:  info: ppp81: recv [RADIUS(1) Accounting-Response id=5]



Название: Re: freeradius 3
Отправлено: fet4 от 24 Февраля 2018, 00:14:04
radupdate по статике обновляет 0 строк


Название: Re: freeradius 3
Отправлено: fet4 от 24 Февраля 2018, 00:16:55
При динамике
Код:
Ready to process requests
(3243) Received Accounting-Request Id 5 from 172.19.0.12:35457 to 172.19.0.12:1813 length 203
(3243)   User-Name = "novostep16"
(3243)   NAS-Identifier = "accel-ppp-bras1"
(3243)   NAS-IP-Address = 172.19.0.12
(3243)   NAS-Port = 136
(3243)   NAS-Port-Id = "ppp136"
(3243)   NAS-Port-Type = Virtual
(3243)   Service-Type = Framed-User
(3243)   Framed-Protocol = PPP
(3243)   Calling-Station-Id = "d8:50:e6:ae:63:a8"
(3243)   Called-Station-Id = "00:1b:21:d0:16:5c"
(3243)   Acct-Status-Type = Interim-Update
(3243)   Acct-Authentic = RADIUS
(3243)   Acct-Session-Id = "586929edd888e53d"
(3243)   Acct-Session-Time = 483
(3243)   Acct-Input-Octets = 20543488
(3243)   Acct-Output-Octets = 132665416
(3243)   Acct-Input-Packets = 108396
(3243)   Acct-Output-Packets = 142405
(3243)   Acct-Input-Gigawords = 0
(3243)   Acct-Output-Gigawords = 0
(3243)   Framed-IP-Address = 10.194.7.12
(3243) # Executing section accounting from file /etc/freeradius/3.0/sites-enabled/default
(3243)   accounting {
(3243)     if (&NAS-Port-Type == "Ethernet") {
(3243)     if (&NAS-Port-Type == "Ethernet")  -> FALSE
(3243)     elsif (&NAS-Port-Type == "Virtual") {
(3243)     elsif (&NAS-Port-Type == "Virtual")  -> TRUE
(3243)     elsif (&NAS-Port-Type == "Virtual")  {
(3243) sql_pppoe: EXPAND .query
(3243) sql_pppoe:    --> .query
(3243) sql_pppoe: Using query template 'query'
rlm_sql (sql_pppoe): Reserved connection (9)
(3243) sql_pppoe: EXPAND call radupdate_pppoe('%{User-Name}','%{Framed-IP-Address}','user=%{Calling-Station-Id};nas=%{NAS-IP-Address}','%{NAS-Identifier}','%{Acct-Session-Id}')
(3243) sql_pppoe:    --> call radupdate_pppoe('novostep16','10.194.7.12','user=d8:50:e6:ae:63:a8;nas=172.19.0.12','accel-ppp-bras1','586929edd888e53d')
(3243) sql_pppoe: Executing query: call radupdate_pppoe('novostep16','10.194.7.12','user=d8:50:e6:ae:63:a8;nas=172.19.0.12','accel-ppp-bras1','586929edd888e53d')
(3243) sql_pppoe: SQL query returned: success
(3243) sql_pppoe: 1 record(s) updated
rlm_sql (sql_pppoe): Released connection (9)
(3243)       [sql_pppoe] = ok
(3243)     } # elsif (&NAS-Port-Type == "Virtual")  = ok
(3243)   } # accounting = ok
(3243) Sent Accounting-Response Id 5 from 172.19.0.12:1813 to 172.19.0.12:35457 length 0
(3243) Finished request
(3243) Cleaning up request packet ID 5 with timestamp +576
Ready to process requests


Название: Re: freeradius 3
Отправлено: Efendy от 24 Февраля 2018, 00:20:37
 Видимо в этом и проблема. Значит pppoe-сервер ожидает ответ на аккаунтинг. Кстати, это плюс ибо скорее всего в ответе можно будет послать атрибуты для изменения скорости или подобного без модуля coa. Покажи тогда процедуру radupdate_pppoe


Название: Re: freeradius 3
Отправлено: fet4 от 24 Февраля 2018, 00:25:10
Видимо в этом и проблема. Значит pppoe-сервер ожидает ответ на аккаунтинг. Кстати, это плюс ибо скорее всего в ответе можно будет послать атрибуты для изменения скорости или подобного без модуля coa. Покажи тогда процедуру radupdate_pppoe

Код:
DELIMITER $$
CREATE DEFINER=`nodeny`@`%` PROCEDURE `radupdate_pppoe`(IN login VARCHAR(64), IN ip VARCHAR(16), IN properties VARCHAR(255), IN `tag` VARCHAR(64), IN `ses` VARCHAR(64))
BEGIN
  DECLARE usr_id INT;
  DECLARE usr_ip VARCHAR(15) DEFAULT NULL;
  SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
  SELECT get_ip_by_tag(usr_id, tag) INTO usr_ip;
  CALL set_auth(usr_ip, CONCAT('mod=pppoe;','ses=',ses,';',REPLACE(properties,':','')));
END$$
DELIMITER ;

Код:
DELIMITER $$
CREATE DEFINER=`nodeny`@`%` FUNCTION `get_ip_by_tag`( user_id INTEGER UNSIGNED, tag VARCHAR(64) ) RETURNS varchar(15) CHARSET utf8
    NO SQL
BEGIN
    DECLARE user_ip VARCHAR(15);
    DECLARE real_ip VARCHAR(15) DEFAULT 0;
    DECLARE row_cnt INTEGER;
    DECLARE ip_id INTEGER;
    DECLARE tries INTEGER DEFAULT 30;
    DECLARE id_min INTEGER;
    DECLARE id_max INTEGER;

    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,%';

    SELECT id, INET_NTOA(ip) INTO ip_id, user_ip 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;

    IF( ip_id IS NOT NULL) THEN
        UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 3600
            WHERE id = ip_id AND uid = user_id;
        SELECT ROW_COUNT() INTO row_cnt;
        IF( row_cnt > 0 ) THEN RETURN user_ip; END IF;
    END IF;

    SELECT MAX(id), MIN(id) INTO id_max, id_min
        FROM ip_pool
        WHERE type = 'dynamic' AND realip = IF(real_ip>0,1,0)
            AND tags LIKE CONCAT('%,', tag, ',%');

    sel_ip: WHILE tries > 0 DO
        SELECT id, INET_NTOA(ip) INTO ip_id, user_ip
            FROM ip_pool
            WHERE uid = 0
                AND id >= (CEIL(RAND() * (id_max - id_min)) + id_min)
                AND id <= id_max
                LIMIT 1;
        IF( user_ip IS NOT NULL) THEN
            UPDATE ip_pool SET uid = user_id, `release` = UNIX_TIMESTAMP() + 3600
                WHERE id = ip_id AND uid = 0;
            SELECT ROW_COUNT() INTO row_cnt;
            IF( row_cnt > 0 ) THEN RETURN user_ip; END IF;
            SET tries = tries - 5;
        END IF;
        SET tries = tries - 1;
    END WHILE;

END$$
DELIMITER ;

Код:
DELIMITER $$
CREATE DEFINER=`nodeny`@`%` PROCEDURE `set_auth`(IN usr_ip VARCHAR(15), IN auth_properties VARCHAR(255))
BEGIN
  DECLARE usr_id INT;
  SELECT uid INTO usr_id FROM ip_pool WHERE INET_ATON(usr_ip) = ip LIMIT 1;

  IF( usr_id > 0 ) THEN

    INSERT INTO auth_now SET
        ip = usr_ip,
        properties = auth_properties,
        start = UNIX_TIMESTAMP(),
        last = UNIX_TIMESTAMP()
    ON DUPLICATE KEY UPDATE
        properties = IF(auth_properties!='',auth_properties,properties),
        last = UNIX_TIMESTAMP();

    UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 3600
        WHERE ip = INET_ATON(usr_ip) AND type = 'dynamic' LIMIT 1;
  END IF;
END$$
DELIMITER ;



Название: Re: freeradius 3
Отправлено: Efendy от 24 Февраля 2018, 00:34:51
Наверное во фрирадиусе что-то не договаривают. В общем последней вызывается set_auth. Для динамики она делает апдейт в базе чтобы обновить время освобождения ip. Это и есть сообщение, что обновлена 1 запись. Видимо на нее и ориентируется фрирадиус версии, бля, три. Для статики, ессно, никакие апдейты не делаются. Если радиусу нужно чтоб была одна запись, ну, давай попробуй после CALL set_auth(usr_ip, CONCAT('mod=pppoe;','ses=',ses,';',REPLACE(properties,':',''))); добавить код:
Код:
UPDATE users SET id=user_id WHERE id=user_id LIMIT 1;

P.S. Короче, посмотрел я в исходный код фрирадиуса, да там есть такая хуйня - оно смотрит на количество заапдейченных (или "заселекченных") записей и если 0 - возвращает ошибку. Походу можно просто
Код:
SELECT 1;


Название: Re: freeradius 3
Отправлено: fet4 от 24 Февраля 2018, 00:46:17
Дааа :P сука. Добавил
Код:
UPDATE users SET id=usr_id WHERE id=usr_id LIMIT 1;

и sql update query 1 и понеслась.

так может тогда проще
Код:
UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 3600
        WHERE ip = INET_ATON(usr_ip) AND (type = 'dynamic' OR type = 'static') LIMIT 1;


Название: Re: freeradius 3
Отправлено: Efendy от 24 Февраля 2018, 00:49:57
Не надо апдейтить статические айпи, нахрена впустую ресурсы тратить (запись на диск). Попробуй select 1;


Название: Re: freeradius 3
Отправлено: fet4 от 24 Февраля 2018, 00:55:34
Не, пишет    -1 sql
No additional quires

и не работает


Название: Re: freeradius 3
Отправлено: Efendy от 24 Февраля 2018, 09:56:07
Ну тогда просто убери AND type = 'dynamic' - пусть апдейтит и статические


Название: Re: freeradius 3
Отправлено: kosmich от 24 Февраля 2018, 11:15:35
У тебя тоже ошибка "RADIUS: rad_send_request for user 'ррр_test' failed: No valid RADIUS responses received"? Чтоб мы не искали ошибку kosmich по твоим логам.
Нет такого не было все чисто.
Так у меня mpd а не аксель.

Стас какое мне решение применить ?
Проверю на мпд сегодня.


Название: Re: freeradius 3
Отправлено: Efendy от 24 Февраля 2018, 12:34:46
Та суть не в pppoe-сервере, а в радиусе.  Попробуй убрать AND type = 'dynamic'


Название: Re: freeradius 3
Отправлено: sergey104 от 24 Февраля 2018, 14:03:55
изменил процедуру

Код:
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 usr_ip VARCHAR(15) DEFAULT NULL;
  SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
  SELECT get_ip(usr_id) INTO usr_ip;
  CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':','')));
  UPDATE users SET id=usr_id WHERE id=usr_id LIMIT 1;
END$$
DELIMITER ;

пока работает


Название: Re: freeradius 3
Отправлено: kosmich от 24 Февраля 2018, 14:06:15
Процедура в сообщении выше, статика работает.

Та суть не в pppoe-сервере, а в радиусе.  Попробуй убрать AND type = 'dynamic'
Суть в том что только мпд матерился, на ответы от радиуса.

Эта строка есть только в процедуре для ДХЦП. Если ее убрать, выдает левый айпи, а в биллинге отображается "старый".
Код:
AND type = 'dynamic'

5-я страница, что только двое-трое столкнулись с этой проблемой на PPPoE статике ?




Название: Re: freeradius 3
Отправлено: fet4 от 24 Февраля 2018, 14:51:57
Да. В set_auth в конце есть UPDATE. Приводим его к виду.
Код:
    UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 3600
        WHERE ip = INET_ATON(usr_ip) LIMIT 1;

И статика начинает работать.

radupdate менять не нужно, тем более если он у Вас свой. И это проблема не сервера доступа, а походу новая логика freeradius 3, которая не дает поднять сессию без должного ответа мускула.


Название: Re: freeradius 3
Отправлено: kosmich от 24 Февраля 2018, 20:30:58
Да. В set_auth в конце есть UPDATE. Приводим его к виду.
Код:
    UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 3600
        WHERE ip = INET_ATON(usr_ip) LIMIT 1;

И статика начинает работать.

radupdate менять не нужно, тем более если он у Вас свой. И это проблема не сервера доступа, а походу новая логика freeradius 3, которая не дает поднять сессию без должного ответа мускула.
Пока у нас все общее, процедуры из документации тоже.
Стас указал, где поменять, там и поменял. Указанная строка есть только в процедурах для PPPoE.
Не понял только, что можно с вариантом
Код:
SELECT 1;
его вместо предложенной строки UPDATE users SET id=user_id WHERE id=user_id LIMIT 1; можно использовать ?

Лучше пусть Стас внесет ясность, можно и нужно ли менять там, где ты предлагаешь, с точки зрения производительности, на достаточно высоких нагрузках, или какие еще варианты можно и нужно ли проверить ?



Название: Re: freeradius 3
Отправлено: Efendy от 25 Февраля 2018, 00:22:16
  • Эта проблема связана только с аккаунтингом, если он у тебя используется, то значит используется процедура  radupdate.
  • Для третьего радиуса необходимо, чтобы эта процедура сказала радиусу, что она затронула несколько строк в базе
  • Поскольку в этой процедуре последним вызывается set_auth, то инфа по затронутым строкам берется из последнего действия set_auth, а там идет изменение времени релиза ip, но только для динамики. Поэтому мы пришли к варианту, что ладно, пусть апдейтятся не только динамические - для статических нет смысла апдейдить, но зато просто радиус будет видеть, что есть какой-то результат по затронутым строкам
  • Сперва я хотел предложить использовать SELECT 1 для сообщения о количестве строк - это легкая операция, но она не привела ни к чему хорошему - 3й радиус считает, что select должен вернуть имя sql. Вопрос "какого хера?" Просто так захотелось? Ладно. Вариант с SELECT отпал. Не юзаем его!
  • UPDATE users SET id=user_id WHERE id=user_id LIMIT 1 я предложил использовать в самом конце radupdate поскольку не факт, что во всех radupdate, что тут встречались последним будет CALL set_auth, поэтому лучше точно быть уверенным, что radupdate вернет "затронутое количество строк". Последний sql бессмысленный, он говорит измени поле так, чтобы оно стало точно таким же как и было. Т.е. по факту ничего в базе не меняется (хотя вот щас подумал, что мускул тупой может и лочить в этот момент таблицу, я уже на воду дую, так что может стоит апдейтить совершенно левую таблицу)


Название: Re: freeradius 3
Отправлено: tom от 01 Марта 2018, 02:45:27
Так до чого в решті решт прийшли? Ставим UPDATE?


Название: Re: freeradius 3
Отправлено: kosmich от 22 Марта 2018, 16:34:13
Так до чого в решті решт прийшли? Ставим UPDATE?
Да. Проверил на стендах и в бою.

Код:
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 usr_ip VARCHAR(15) DEFAULT NULL;
  SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
  SELECT get_ip(usr_id) INTO usr_ip;
  CALL set_auth(usr_ip, CONCAT('mod=pppoe;',REPLACE(properties,':','')));
  UPDATE users SET id=usr_id WHERE id=usr_id LIMIT 1;
END$$
DELIMITER ;


h t t p://nodeny.com.ua/wiki/index.php/Freebsd_%2B_Freeradius3_%2B_Nodeny_Plus
Стас, может необходимо и в документации поправить ?


Название: Re: freeradius 3
Отправлено: Efendy от 23 Марта 2018, 12:27:53
h t t p://nodeny.com.ua/wiki/index.php/Freebsd_%2B_Freeradius3_%2B_Nodeny_Plus
Стас, может необходимо и в документации поправить ?
Уже забыл о чем мы тут спорили, нужно для пппое добавить строку UPDATE users SET id=usr_id WHERE id=usr_id LIMIT 1;? Добавил


Название: Re: freeradius 3
Отправлено: Cell от 11 Мая 2018, 10:20:34
Столкнулся с вот такой фигней на на этом долбаном фрирадиус3
Ума не приложу с чем это может быть связано. Вроде перекликается с последней темой но как-то не очень.
При всем при этом  нужно добавить, что сессия на сервере висит 17 суток и не отваливалась ни разу.
Скрин прилагается.


Название: Re: freeradius 3
Отправлено: Cell от 19 Июля 2018, 22:01:11
я в н+ отключение по команде stop не использую, честно говоря я забыл почему, возможно чтобы риконнекты не забивали таблицу авторизаций или не высасывали пул ip. Пусть авторизация пропадает по таймауту, 2 минуты таймаута - это разве много?
Я думаю, процедуру radstop нужно вернуть в коробку, а ее использовать, каждый решает сам.
Лично меня ТП замучили уже, ибо звонит абон с некой проблемой, оператор ему помогает и просит перезагрузить свое обоудование,
а в логах авторизаций либо нечего не поменялось, либо затерлись параметры последней сессии(ип, мак, нас, сервис-нейм и.т.п.)
и даже если будет засорятся бд реконнектами, будет локализирована проблема с оборудованием Прова либо Абона.
Короче не знаю где лучше разместить это дело. Процедура radstop для pppoe со статическим пулом адресов. Удаляет авторизациию, заносит данные о закончившейся сессии в таблицу логов авторизаций. Мне, как и 90% админов этого будет достаточно чтобы не сводить с ума ТП.
Код:
DROP PROCEDURE IF EXISTS `radstop`;
DELIMITER $$
CREATE PROCEDURE `radstop`(IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT;
  DECLARE ipt INT;
  DECLARE st INT;
  DECLARE prop TEXT;
  SELECT id INTO usr_id FROM users WHERE name=login LIMIT 1;
  SELECT ipn,start,properties INTO ipt,st,prop FROM v_ips WHERE ip=get_ip(usr_id) LIMIT 1;
  INSERT into auth_log (id,uid,ip,start,end,properties) VALUES (NULL,usr_id,ipt,st,unix_timestamp(),prop);
  DELETE FROM auth_now WHERE ip = get_ip(usr_id) LIMIT 1;
END$$
DELIMITER ;

Что же касается поста выше - то причина понятна и проста: freeradius3 - синоним слова ГОВНО. На пока отказываюсь от него в пользу старой версии. (собираю из исходников)


Название: Re: freeradius 3
Отправлено: tom от 01 Августа 2018, 11:52:05
Вітаю, хто може підказати. Ось частина коду з radreply де авторизується невідомий клієнт
IF usr_id IS NULL OR usr_id=0 THEN
            UPDATE mac_uid SET ip=0 WHERE uid=0 AND time<(UNIX_TIMESTAMP()-3600);
            UPDATE mac_uid SET mac=NULL WHERE mac=usr_mac AND oneconnect>0;
            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(), dev_mac, port, 2)
            ON DUPLICATE KEY
                UPDATE ip=IF(ip>0 AND device_mac=dev_mac AND device_port=port, ip, INET_ATON(usr_ip)),
                    uid=0, device_mac=dev_mac, device_port=port, oneconnect=2, time=UNIX_TIMESTAMP();
            COMMIT;
            SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid
                WHERE mac=usr_mac AND device_mac=dev_mac AND device_port=port;
       ELSE


Я так розумію призначеня цих рядків
            UPDATE mac_uid SET ip=0 WHERE uid=0 AND time<(UNIX_TIMESTAMP()-3600);
            UPDATE mac_uid SET mac=NULL WHERE mac=usr_mac AND oneconnect>0;
переписати всим невідомим клієнта ір=0 які оновлювали данні більше ніж 3600с, тобто скоріш за все не активним клієнтам. Та обнуляєм мак, попереднім записами в таблиці з таким же маком, і коли один на порту.

Тепер питання, невідомий клієнт довгийчас не авторизується і вже вдруге чи втретє проходить авторизацію. Оськільки кожного разу його відправляє в цю частину коду то плодяться записи типу
+-------+--------------+-----------+-----+------------+------------+-------------+------------+
| id    | mac          | ip        | uid | time       | device_mac | device_port | oneconnect |
+-------+--------------+-----------+-----+------------+------------+-------------+------------+
| 22242 | NULL         | 168362220 |   0 | 1533109938 | 735        |           2 |          2 |
| 22244 | 64d154751691 | 168393556 |   0 | 1533113804 | 735        |           2 |          2 |
+-------+--------------+-----------+-----+------------+------------+-------------+------------+
Які після привязки клієнт до учотки, можуть викликати трудності.

Питання, чи варто переживати за це, чи хай ці дублі живуть і їх періодично чистити?
 



Название: Re: freeradius 3
Отправлено: tom от 01 Августа 2018, 11:54:08
Питання два.
Ситуація accel-radius-bill
йде аккаунтінг, все гуд. По якимось причинам пропадає звязок з радіусом у нас більше часу аккаунтінга в білінгу і він вважає клієнта не авторизованим. Відновився звязок і accel продовжує слати аккаунтінг. Питання - як на це відреагує білінг?


Название: Re: freeradius 3
Отправлено: Efendy от 01 Августа 2018, 16:10:59
Для динамических адресов отреагирует плохо. Но час отсутсвия инета - это уже чп и такое бывает крайне редко. Можно мониторить такие ситуации и раз в год и при ее возникновении отребутать сервер или сервис


Название: Re: freeradius 3
Отправлено: tom от 01 Августа 2018, 23:35:07
Ну в сезон гроз це ЧП стає досить частим випадком.


Название: Re: freeradius 3
Отправлено: Efendy от 02 Августа 2018, 11:26:16
Можно отлавливать такие ситуации и пытаться как-то исправить, но я не хочу усложнять процедуры, потому что их итак зоопарк из-за разных требований разных сетей


Название: Re: freeradius 3
Отправлено: tom от 03 Августа 2018, 01:43:20
Потреби мереж може й бути різні, але способів авторизації не так вже й багато. Можливо варто зробити різні гілки? Хоча, це впринципі залежить від бачення і бажання розробника. Я мабуть не прошу переробити, просто хочу розібратися і зрозуміти чому відбуваються деякі процеси, що впливають на роботу системи. І відповідно відреагувати - а) змінити систему б) змінити взаємодію з білінгом. Навіть ті радіус процедури, під ірое прийшлось збирати з різних джерел по частинам і тулити вкучу.

А по віджеранню памяті модулем СОА, так і не можу його подолати ((


Название: Re: freeradius 3
Отправлено: Efendy от 04 Августа 2018, 10:53:40
Можно попробовать сделать чтоб, если биллинг после долгого разрыва обнаруживает некорректность, посылал по COA сигнал разъединения. В твоем случае абонент заново соединится после такого?


Название: Re: freeradius 3
Отправлено: tom от 04 Августа 2018, 12:39:16
Сесія підніметься після чергового дхцп запиту


Название: Re: freeradius 3
Отправлено: tom от 21 Августа 2018, 15:28:03
Для динамических адресов отреагирует плохо. Но час отсутсвия инета - это уже чп и такое бывает крайне редко. Можно мониторить такие ситуации и раз в год и при ее возникновении отребутать сервер или сервис
Ось приклади ЧП
Були проблеми з БД (можливо ще залишилися), лочилась база і не оновлювалося поле release. Відповідно полізли дублі, для відновлення тре бутати весь сервак, а так би при відновленні - по аккаунтінгу відновився би релізтайм.


Название: Re: freeradius 3
Отправлено: Efendy от 16 Сентября 2019, 23:40:57
Покопался я в очередной раз с FreeRadius-ом версии 3 - голова болит, протрахался хз сколько часов, даже в исходники лез. И вот какие замечания:

1) Хочу сначала отметить, что в конфиге Cell-а авторизация принимается всегда, даже если неправильный пароль. У него такая схема, но я думаю большинству это не подходит. Я нашел причину, почему не получилось проверить пароль - новый радиус в ответе процедуры radcheck требует :=, а не ==

2) В процедуре атрибут Password меняется на Cleartext-Password - это уже упоминалось, просто отмечу еще раз

3) Обнаружилось идиотское поведение freeradius3: он делает radcheck, затем radreply и потом проверяет пароль. Никуда не годится проверять пароль после того, как для учетки будет запрошен динамический ip, а в итоге выдан чужаку не будет. Поэтому пришлось проверять пароль и в radreply (добавлен параметр "пароль" - слава богу, он есть в параметрах радиуса)

4) Чтобы mpd5 получил корректные ответы радиуса на эккаунтинг нужно чтобы radupdate заапдейтило как минимум одну строку в базе. Лол. Мы делаем тупой запрос: UPDATE users SET id=usr_id WHERE id=usr_id LIMIT 1, который по сути ничего не делает, но без него mpd5 будет постоянно рвать сессии.

5) Чтобы в accounting секции шло разделение на start и stop запросы - нужно вставить строку:
        reference = "%{tolower:type.%{Acct-Status-Type}.query}"

6) По ходу выяснилось, что mpd уже (ура) может принимать кое-какие атрибуты в аккаунтинге. Теперь можно, например скорость менять (для NoDeny это не нужно, он фаерволом режет) прямо на ходу. Но главное мы можем кильнуть юзера без COA. Зачем килять? А например, если мы видим, что юзеру поменяли ip. Тогда он переконнектится и получит новый. Собственно из-за этой проблемы смены ip и была немного долюанутая схема, что в radupdate NoDeny игнорит ip от радиуса и вычисляет свой. Теперь все будет проще и надежней

7) Я голову сломал, но так и не понял как можно в радиусе через sql модуль передать атрибуты из radreply (думаю никак). Поэтому в самом конфиге делаю проверку if( %{sql: проверяем привязан ли еще ip к юзеру}) { дропаем сессию }. Для дропа сессии надо атрибуты в словарь радиуса добавить (в доке отразил это)

8 ) Заюзал radstop чтоб авторизация удалялась сразу после дисконнекта, а не по таймауту как раньше (сделано было из-за того, что в этом случае не велся лог авторизаций). Сразу удалять авторизации нужно для того чтобы контролить параллельные сессии (не давать двум юзерам сидеть под одним логином). Кстати я уже получил более-менее рабочий вариант, но надо еще тестить. Да и radstop под конец изменилась и у меня уже нет сил ее тестить (возможно в доке не рабочая), завтра.


Дока (http://nodeny.com.ua/wiki/index.php/Pppoe_(mpd5_%2B_freeradius_3))


Название: Re: freeradius 3
Отправлено: goletsa от 17 Сентября 2019, 10:41:11
1,2 - Помню сталкивался. Про принудительное прохождение авторизации в любом случае - некоторые биллиги так делают, потом пихая клиентов в отдельный пул для неизвестных. Тогда имеет смысл пускать всех, а потом сортировать по пулам.

Цитировать
3) Обнаружилось идиотское поведение freeradius3
Разве это особенность именно 3 версии? Вроде сталкивался с этим раньше еще и думал что это нормальное поведение.
То есть если клиент даже не прошел авторизацию то все равно reply отрабатывал.
Но у меня статические адреса, динамики нет от слова совсем потому не критично если ответ будет. Причем я логирую в этом месте попытки конектов в базу. Правда как пароль сверять, он разве открытым текстом приходит?


Название: Re: freeradius 3
Отправлено: elite от 17 Сентября 2019, 10:53:50
Ось приклади ЧП
Були проблеми з БД (можливо ще залишилися), лочилась база і не оновлювалося поле release. Відповідно полізли дублі, для відновлення тре бутати весь сервак, а так би при відновленні - по аккаунтінгу відновився би релізтайм.
А разве не должен Accel-ppp дропать сессии при отсутствии ответа аккаутинга от радиуса продолжительное время?


Название: Re: freeradius 3
Отправлено: Efendy от 17 Сентября 2019, 13:22:13
Но у меня статические адреса, динамики нет от слова совсем потому не критично если ответ будет. Причем я логирую в этом месте попытки конектов в базу. Правда как пароль сверять, он разве открытым текстом приходит?
Да.

Кстати допилял я. Сейчас с нуля ставлю и перепроверяю. Добавил еще одну фичу: Блокирование одновременного подключения нескольких абонентов с одним логином. Самое прикольное как она включается (процедуры не надо менять!): Вам необходимо в /usr/local/etc/raddb/mods-enabled/sql в конце строки authorize_check_query заменить ноль на единицу.


Название: Re: freeradius 3
Отправлено: FlySky11 от 17 Сентября 2019, 14:19:54
Покопался я в очередной раз с FreeRadius-ом версии 3 - голова болит, протрахался хз сколько часов, даже в исходники лез. И вот какие замечания:

Стас, добавь в доку, с моей статти ошибку и устранение по радиусу будет полезно знать
    
Код:
FreeBSD + FreeRadius 3 + проблема установки с портов

И кое что добавлю от себя

В строчке процедури radcheck:

Код:
  SELECT id,name,'Cleartext-Password' AS Attribute,AES_DECRYPT(passwd,'htpew7') AS Value,':=' 

Пароль (passwd,'htpew7') должен быть одинаковым, как в файле /usr/local/nodeny/sat.cfg

При создании процедур смотрите внимательно!!!!)
В доке  там hardpass
Код:
    SELECT id, name, 'Cleartext-Password' AS Attribute, AES_DECRYPT(passwd, 'hardpass') AS Value,':=' 
А в стоковом файле sat.cfg там  htpew7


Название: Re: freeradius 3
Отправлено: Efendy от 17 Сентября 2019, 20:35:48
ок


Название: Re: freeradius 3
Отправлено: FlySky11 от 17 Сентября 2019, 21:35:37
Раз начали обсуждать тему 3 радиуса то у меня тоже есть пару вопросов

Есть проблема с отображением авторизации по DHCP

Схема:
Микротик(дхцп на влан) - радиус - билинг - сателит

абон изначально получает гостевой ип попадает на заглушку автоизируеться и потом получает статический ип.

Загвоздка вот в чем
Модуль дхцп не запущен с автозагрузки убран
Авторизация с гостевим ип отображаеться нормально и ип по истичению вемени пропадает
А вот авторизация со статическим ип не появляеться вообще(при етом еще и нета нет)
(роути и прочее прописано)
при запуске модуля дхцп авторизация появляеться но не отображаеться каким методом, инет тоже есть, НО при физическом оключении соединение больше не пропадает вообще



Конфиги все с доки по FreeRadius3 с изменьонной процедурой radreply для функции get_ip_by_tag (тоже сделано по доке)

Помогите пожалуйста, работает вся схема кроме етого =((((


Я подпарвил symlink файла sql на следующий
Код:
        authorize_check_query = "call radcheck_dhcp('%{User-Name}')"
        authorize_reply_query = "call radreply_dhcp('%{User-Name}', '%{Called-Station-Id}')"
        accounting {
            query = "call radupdate_dhcp('%{User-Name}','%{Framed-IP-Address}', 'nas=%{Called-Station-Id}')"
            type {
                start {
                    query = "call radupdate_dhcp('%{User-Name}','%{Framed-IP-Address}', 'nas=%{Called-Station-Id}')"
                }
            }
        }
        post-auth {
        query = "call radupdate_dhcp('%{User-Name}','%{reply:Framed-IP-Address}', 'nas=%{Called-Station-Id}')"
        }
}

*****Если не перепутал файлик, то ето оно
*****Если перепутал скину рабочий завтра вечером

'nas=%{Called-Station-Id}')" - в место отображения ипа в "Последняя авторизация" отображает тег дхцпнейма
было: nas=10.20.20.1
стало: nas=10.20.20.1

НО есть одно НО
Автоизация слетает и возобновляеться через 5 минут

Связано это с  процедурой radreply
а именно строчка
Код:
    SELECT NULL, login, 'Session-Timeout', '600', '=';
Тобиж 10 минут
Но запрос идет ровно в половину т.е. 5 минут(т.к. ето дхцп)

сменил в процедуре radreply
* c 10 мин
Код:
    SELECT NULL, login, 'Session-Timeout', '600', '='; 
* на 3 мин
Код:
    SELECT NULL, login, 'Session-Timeout', '180', '='; 

получаеться следуещее

при достижении 1:30 (90 с) идет резапрос на продление аренды и авторизация обновляеться
И не слетает по тому что удаление авторизации происходит в срок через 2:30(150 с) мин  в неактивности

Очень хороший человек которий мне очень много помог(Cell) посоветовал сделать так:
'''Лучше сделать как было 600 и сделать в ядре поменять настроечку "Через какое время в секундах учетная запись переводится в состояние «не авторизована»" на 350 секунд. И счастье непременно вас посетит.'''

Но у меня там есть проблема и так с большим временем розрива авторизации при падении линка или других трабл

Да и модуль не запущен
И в учетке авторизация не всегда онлайн а включена (при всегда онлайн тоже работает)
Заметил влияние зависимости поля состояния : а точнее пока не виставиш Все ОК при первой авторизации через заглушку мак  не привязуеться к учетке

Курю тему ДХЦП

Буду благодарен за любие подсказки

Рабочий конфиг после полной боевой готовности виложу с полним описанием проведенних робот

SSL зло для заглушки)) гиии


Название: Re: freeradius 3
Отправлено: Cell от 17 Сентября 2019, 22:48:26
Но у меня там есть проблема и так с большим временем розрива авторизации при падении линка или других трабл
Нет у тебя никаких трабл ))) кроме желания смотреть кто отвалился когда связь пропадает. Но, дружище, для этого не биллинг нужно использовать а другие средства. Если бы у тебя там было PPPoE  то сразу бы видно было кто и где отвалился а когда ты заведомо используешь авторизацию - завязанную на лизинге ip адреса так чего ты ждешь? Конечно можно выставить время аренды полторы минуты но это не очень правильно.
Если уж очень хочется по зеленым ключикам смотреть отвалы - так проще сделать это по потребленному трафику. Если я не ошибаюсь есть даже модулек специальный для этого. Да всякие патчи к нему тут на форуме описывались. Правда все это подходит больше для пионернета чем для серьезного провайдера.
Провайдеры не по ключикам сеть мониторят )


Название: Re: freeradius 3
Отправлено: FlySky11 от 18 Сентября 2019, 08:42:13
Правда все это подходит больше для пионернета чем для серьезного провайдера.
Провайдеры не по ключикам сеть мониторят )
Cell, Дружище, у меня то нет я по другому всю сеть мониторю)
Это нужно для ТП и монтьоров, у них там есть свои приколы с этим когда заявки делают)
Я по их просьбе настроил и занимаюсь другими делами)
Переезжали с железа на виртуализацию много новых костылей было, есть своя дока собраная по всех форумах, после полной отладки и боевого теста выложу))

У меня загруженость под 200% заббикс юзверьсайт(UserSide) ;D написание доки, виртуализациия  переезды ;)


Название: Re: freeradius 3
Отправлено: NoDeny support от 18 Сентября 2019, 10:04:48
По поводу ssl можно попробовать через прокси все гонять. Сейчас тестирую. Тут где-то на форуме Cell выкладывал настройки по поводу этого.


Название: Re: freeradius 3
Отправлено: FlySky11 от 18 Сентября 2019, 10:12:21
По поводу ssl можно попробовать через прокси все гонять. Сейчас тестирую. Тут где-то на форуме Cell выкладывал настройки по поводу этого.

Буду очень благодарен за помощь в этом)


Название: Re: freeradius 3
Отправлено: FlySky11 от 18 Сентября 2019, 10:15:29
Знаю что сюда не относиться но для чего создана даная функция
normalize_ippool
Код:
DROP FUNCTION IF EXISTS `normalize_ippool`;
DELIMITER $$
CREATE FUNCTION `normalize_ippool` ()
    RETURNS TINYINT NO SQL
BEGIN
    DECLARE mid INTEGER UNSIGNED;

    CREATE TEMPORARY TABLE temp_ip_pool(
        id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
        ip_id BIGINT UNSIGNED NOT NULL,
        PRIMARY KEY (id)
    );

    SELECT MAX(id) into mid FROM ip_pool;
    UPDATE ip_pool SET id = id + mid;
    INSERT temp_ip_pool (SELECT NULL, id FROM ip_pool ORDER BY realip, type, tags);
    UPDATE ip_pool i JOIN temp_ip_pool t ON i.id = t.ip_id SET i.id = t.id;
    DROP TEMPORARY TABLE IF EXISTS temp_ip_pool;

    RETURN 1;
END$$
DELIMITER ;


Название: Re: freeradius 3
Отправлено: FlySky11 от 18 Сентября 2019, 14:18:56
Я подпарвил symlink файла sql на следующий
Код:
        authorize_check_query = "call radcheck_dhcp('%{User-Name}')"
        authorize_reply_query = "call radreply_dhcp('%{User-Name}', '%{Called-Station-Id}')"
        accounting {
            query = "call radupdate_dhcp('%{User-Name}','%{Framed-IP-Address}', 'nas=%{Called-Station-Id}')"
            type {
                start {
                    query = "call radupdate_dhcp('%{User-Name}','%{Framed-IP-Address}', 'nas=%{Called-Station-Id}')"
                }
            }
        }
        post-auth {
        query = "call radupdate_dhcp('%{User-Name}','%{reply:Framed-IP-Address}', 'nas=%{Called-Station-Id}')"
        }
}

*****Если не перепутал файлик, то ето оно
*****Если перепутал скину рабочий завтра вечером


Все таки немного перепутал
Есть маленькие изменения
Код:
        authorize_check_query = "call radcheck_dhcp('%{User-Name}')"
        authorize_reply_query = "call radreply_dhcp('%{User-Name}', '%{Called-Station-Id}')"
        accounting {
            query = "call radupdate_dhcp('%{User-Name}','%{reply:Framed-IP-Address}', 'nas=%{Called-Station-Id}')"
            type {
                start {
                    query = "call radupdate_dhcp('%{User-Name}','%{reply:Framed-IP-Address}', 'nas=%{Called-Station-Id}')"
                }
            }
        }
        post-auth {
        query = "call radupdate_dhcp('%{User-Name}','%{reply:Framed-IP-Address}', 'nas=%{Called-Station-Id}')"
        }
}


Название: Re: freeradius 3
Отправлено: Efendy от 18 Сентября 2019, 17:41:19
Знаю что сюда не относиться но для чего создана даная функция
normalize_ippool
Код:
DROP FUNCTION IF EXISTS `normalize_ippool`;
DELIMITER $$
CREATE FUNCTION `normalize_ippool` ()
    RETURNS TINYINT NO SQL
BEGIN
    DECLARE mid INTEGER UNSIGNED;

    CREATE TEMPORARY TABLE temp_ip_pool(
        id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
        ip_id BIGINT UNSIGNED NOT NULL,
        PRIMARY KEY (id)
    );

    SELECT MAX(id) into mid FROM ip_pool;
    UPDATE ip_pool SET id = id + mid;
    INSERT temp_ip_pool (SELECT NULL, id FROM ip_pool ORDER BY realip, type, tags);
    UPDATE ip_pool i JOIN temp_ip_pool t ON i.id = t.ip_id SET i.id = t.id;
    DROP TEMPORARY TABLE IF EXISTS temp_ip_pool;

    RETURN 1;
END$$
DELIMITER ;

Группирует ip по типу и тегам чтобы можно было сказать: выбери любой свободный ip в диапазоне от такого до такого номера - это гораздо быстрее работает, чем раньше, а раньше это приводило даже к дедлокам


Название: Re: freeradius 3
Отправлено: FlySky11 от 19 Сентября 2019, 08:27:40
Группирует ip по типу и тегам чтобы можно было сказать: выбери любой свободный ip в диапазоне от такого до такого номера - это гораздо быстрее работает, чем раньше, а раньше это приводило даже к дедлокам

Понял, спасибо за информацию)


Название: Re: freeradius 3
Отправлено: Jovani от 04 Марта 2020, 11:25:02
Зравствуйте.
Подскажите, если в логах такие ошибки, как их исправить?
Где и что нужно исправить?
Всем буду очень благодарен.
Код:

WARNING: (372904) WARNING: Module rlm_sql became unblocked

Error: rlm_sql (sql): No connections available and at max connection limit ( этим лог заполнен на 80 %)

 Error: rlm_sql (sql): Cannot open new connection, already at max

Error: Received conflicting packet from client irsh1 port 52387 - ID: 158 due to unfinished request in module sql.  Giving up on old request.


Код:
root@localhost [(none)]> show processlist;
+------+--------+-----------+------------+---------+-------+--------------+------------------------------------------------------------------------------------------------------+
| Id   | User   | Host      | db         | Command | Time  | State        | Info                                                                                                 |
+------+--------+-----------+------------+---------+-------+--------------+------------------------------------------------------------------------------------------------------+
|    2 | nodeny | localhost | 3newnodeny | Sleep   |     8 |              | NULL                                                                                                 |
|    3 | nodeny | localhost | 3newnodeny | Query   |     1 | Sending data | SELECT id, cash FROM pays WHERE cash>0 AND category NOT IN(2,3,51) AND id NOT IN (SELECT reason FROM |
|    4 | nodeny | localhost | 3newnodeny | Sleep   |     2 |              | NULL                                                                                                 |
|    5 | nodeny | localhost | 3newnodeny | Sleep   | 11975 |              | NULL                                                                                                 |
| 4930 | root   | localhost | 3newnodeny | Sleep   |     0 |              | NULL                                                                                                 |
| 4959 | root   | localhost | 3newnodeny | Sleep   |     0 |              | NULL                                                                                                 |
| 5006 | root   | localhost | 3newnodeny | Sleep   |     0 |              | NULL                                                                                                 |
| 5019 | root   | localhost | 3newnodeny | Sleep   |     0 |              | NULL                                                                                                 |
| 5023 | root   | localhost | 3newnodeny | Sleep   |     0 |              | NULL                                                                                                 |
| 5029 | root   | localhost | 3newnodeny | Sleep   |     0 |              | NULL                                                                                                 |
| 5044 | root   | localhost | 3newnodeny | Sleep   |     0 |              | NULL                                                                                                 |
| 5051 | root   | localhost | 3newnodeny | Sleep   |     0 |              | NULL                                                                                                 |
| 5052 | root   | localhost | 3newnodeny | Sleep   |     0 |              | NULL                                                                                                 |
| 5053 | root   | localhost | 3newnodeny | Sleep   |     0 |              | NULL                                                                                                 |
| 5054 | root   | localhost | NULL       | Query   |     0 | starting     | show processlist                                                                                     |
+------+--------+-----------+------------+---------+-------+--------------+------------------------------------------------------------------------------------------------------+
15 rows in set (0.00 sec)


Название: Re: freeradius 3
Отправлено: Efendy от 04 Марта 2020, 12:01:24
Возможно запросы попадают в дедлок (грубо говоря зависают) и долго висят пока не отвалятся.

Процедуры и функции для радиуса соответствуют тем, что в документации? Они менялись - оптимизировались. Функция get_ip такая же как в bill.sql?

Проверь есть ли дедлоки по базе:

Код:
SHOW ENGINE INNODB STATUS;

сколько у тебя в онлайне клиентов?


Название: Re: freeradius 3
Отправлено: Jovani от 04 Марта 2020, 12:16:04
Онлайн сейчас 4к
Функция get_ip такая
Процедуры
Код:
DROP PROCEDURE IF EXISTS `radcheck`;
DELIMITER $$
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))
BEGIN
  DECLARE real_login VARCHAR(64) DEFAULT NULL;
  SELECT SUBSTRING_INDEX(login, '=2B', 1) INTO real_login;
  SELECT id, name, 'Cleartext-Password' AS Attribute, AES_DECRYPT(passwd,'3654') AS Value,':='
    FROM users WHERE name=real_login;
END$$
DELIMITER ;


DROP PROCEDURE IF EXISTS `radreply`;
DELIMITER $$
CREATE PROCEDURE `radreply`(IN login VARCHAR(64))
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, '=2B', 1) INTO real_login;
 
  IF login REGEXP '[=2B][0-9]+$' THEN
  SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'=2B','') AS UNSIGNED) INTO ip_index;
  ELSE SET ip_index=0;END IF;
 
  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;

  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';
  SELECT NULL,login,'Framed-Protocol','PPP','=';
END$$
DELIMITER ;


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 usr_ip VARCHAR(15) DEFAULT NULL;
  DECLARE real_login VARCHAR(64) DEFAULT NULL;
  DECLARE ip_index INT ;
 
  SELECT SUBSTRING_INDEX(login, '=2b', 1) INTO real_login;
  IF login REGEXP '[=2B][0-9]+$' THEN
  SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'=2B','') AS UNSIGNED) INTO ip_index;
  ELSE SET ip_index=0;END IF;
 
  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(ip, CONCAT('mod=pppoe;',REPLACE(properties,':','')));
END$$
DELIMITER ;

DROP PROCEDURE IF EXISTS `radstop`;
DELIMITER $$
CREATE PROCEDURE `radstop`(IN login VARCHAR(64))
BEGIN
  DECLARE usr_id INT;
  DECLARE ip_index INT ;
  DECLARE real_login VARCHAR(64) DEFAULT NULL;

  SELECT SUBSTRING_INDEX(login, '=2B', 1) INTO real_login;
 
  IF login REGEXP '[=2B][0-9]+$' THEN
  SELECT CAST(REPLACE(REPLACE(login, real_login, ''),'=2B','') AS UNSIGNED) INTO ip_index;
  ELSE SET ip_index=0;END IF;
 
  SELECT id INTO usr_id FROM users WHERE name=real_login LIMIT 1;
  DELETE FROM auth_now WHERE ip = get_ip_by_num(usr_id, ip_index) LIMIT 1;
END$$
DELIMITER ;



DROP FUNCTION IF EXISTS `get_ip_by_num`;
DELIMITER $$
CREATE FUNCTION `get_ip_by_num` ( user_id INTEGER UNSIGNED, num INTEGER )
    RETURNS VARCHAR(15) NO SQL
BEGIN
    DECLARE user_ip VARCHAR(15);
    DECLARE real_ip VARCHAR(15);
   
    IF( num IS NULL ) THEN SET num=0; END IF;
    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id AND type='static' ORDER BY ip LIMIT num, 1;
    IF( user_ip IS NOT NULL ) THEN RETURN user_ip; END IF;

    SELECT INET_NTOA(ip) INTO user_ip FROM ip_pool
        WHERE uid = user_id AND type='static' ORDER BY ip 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 (uid = 0 OR uid = user_id)
            AND type = 'dynamic'
            AND realip = IF(real_ip>0,1,0)
        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 ;

######################

Код:
| InnoDB |      |
=====================================
2020-03-04 12:11:12 0x86943bb00 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 10 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 14058 srv_active, 0 srv_shutdown, 284 srv_idle
srv_master_thread log flush and writes: 14342
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 1947495
OS WAIT ARRAY INFO: signal count 1993120
RW-shared spins 0, rounds 983441, OS waits 271438
RW-excl spins 0, rounds 42995796, OS waits 539013
RW-sx spins 581754, rounds 14993381, OS waits 315719
Spin rounds per wait: 983441.00 RW-shared, 42995796.00 RW-excl, 25.77 RW-sx
------------
TRANSACTIONS
------------
Trx id counter 3337318567
Purge done for trx's n:o < 3337318096 undo n:o < 0 state: running but idle
History list length 150
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 281509854459160, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854453736, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854458256, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854450120, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854456448, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854454640, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854451928, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854455544, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854457352, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854452832, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854451024, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854449216, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 281509854448312, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
--------
FILE I/O
--------
I/O thread 0 state: waiting for i/o request (insert buffer thread)
I/O thread 1 state: waiting for i/o request (log thread)
I/O thread 2 state: waiting for i/o request (read thread)
I/O thread 3 state: waiting for i/o request (read thread)
I/O thread 4 state: waiting for i/o request (read thread)
I/O thread 5 state: waiting for i/o request (read thread)
I/O thread 6 state: waiting for i/o request (read thread)
I/O thread 7 state: waiting for i/o request (read thread)
I/O thread 8 state: waiting for i/o request (read thread)
I/O thread 9 state: waiting for i/o request (read thread)
I/O thread 10 state: waiting for i/o request (write thread)
I/O thread 11 state: waiting for i/o request (write thread)
I/O thread 12 state: waiting for i/o request (write thread)
I/O thread 13 state: waiting for i/o request (write thread)
I/O thread 14 state: waiting for i/o request (write thread)
I/O thread 15 state: waiting for i/o request (write thread)
I/O thread 16 state: waiting for i/o request (write thread)
I/O thread 17 state: waiting for i/o request (write thread)
Pending normal aio reads: [0, 0, 0, 0, 0, 0, 0, 0] , aio writes: [0, 0, 0, 0, 0, 0, 0, 0] ,
 ibuf aio reads:, log i/o's:, sync i/o's:
Pending flushes (fsync) log: 0; buffer pool: 0
31920 OS file reads, 1290320 OS file writes, 1256365 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 88.09 writes/s, 88.09 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 9779, seg size 9781, 824 merges
merged operations:
 insert 1664, delete mark 69, delete 1
discarded operations:
 insert 0, delete mark 0, delete 0
Hash table size 276707, node heap has 209 buffer(s)
Hash table size 276707, node heap has 34 buffer(s)
Hash table size 276707, node heap has 66 buffer(s)
Hash table size 276707, node heap has 1631 buffer(s)
Hash table size 276707, node heap has 2 buffer(s)
Hash table size 276707, node heap has 561 buffer(s)
Hash table size 276707, node heap has 13 buffer(s)
Hash table size 276707, node heap has 18 buffer(s)
398065.59 hash searches/s, 4249.98 non-hash searches/s
---
LOG
---
Log sequence number 1044016110674
Log flushed up to   1044016110311
Pages flushed up to 1043973315355
Last checkpoint at  1043973315355
0 pending log flushes, 0 pending chkp writes
1248104 log i/o's done, 88.10 log i/o's/second
----------------------
BUFFER POOL AND MEMORY
----------------------
Total large memory allocated 1099431936
Dictionary memory allocated 583256
Buffer pool size   65536
Free buffers       30959
Database pages     32043
Old database pages 11985
Modified db pages  556
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 31, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 31840, created 203, written 38488
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 32043, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
----------------------
INDIVIDUAL BUFFER POOL INFO
----------------------
---BUFFER POOL 0
Buffer pool size   8192
Free buffers       3830
Database pages     4049
Old database pages 1514
Modified db pages  121
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 2, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 4013, created 36, written 6017
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4049, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 1
Buffer pool size   8192
Free buffers       4256
Database pages     3612
Old database pages 1353
Modified db pages  2
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 2, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3593, created 19, written 522
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 3612, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 2
Buffer pool size   8192
Free buffers       3854
Database pages     4014
Old database pages 1501
Modified db pages  44
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 8, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3995, created 19, written 4054
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4014, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 3
Buffer pool size   8192
Free buffers       3997
Database pages     3882
Old database pages 1453
Modified db pages  66
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 1, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3882, created 0, written 6569
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 3882, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 4
Buffer pool size   8192
Free buffers       3647
Database pages     4237
Old database pages 1584
Modified db pages  45
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 4233, created 4, written 4123
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4237, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 5
Buffer pool size   8192
Free buffers       3795
Database pages     4072
Old database pages 1523
Modified db pages  84
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 1, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 4045, created 27, written 4700
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4072, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 6
Buffer pool size   8192
Free buffers       3702
Database pages     4188
Old database pages 1565
Modified db pages  121
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 17, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 4121, created 67, written 8047
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 4188, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
---BUFFER POOL 7
Buffer pool size   8192
Free buffers       3878
Database pages     3989
Old database pages 1492
Modified db pages  73
Pending reads      0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 3958, created 31, written 4456
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 3989, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]
--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
1 read views open inside InnoDB
Process ID=1898, Main thread ID=36116434944, state: sleeping
Number of rows inserted 8301170, updated 1259977, deleted 4343, read 6342986786
0.00 inserts/s, 96.29 updates/s, 0.00 deletes/s, 399286.27 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================



Название: Re: freeradius 3
Отправлено: Efendy от 04 Марта 2020, 18:40:42
Дедлоков нет. А ты show processlist делал в момент проблемы?


Название: Re: freeradius 3
Отправлено: Jovani от 05 Марта 2020, 09:19:15
Спасибо за помощь.
Вчера обновил мускул, радиус, и изменил некоторые настройки в радиусе, и все сейчас в норме.


Название: Re: freeradius 3
Отправлено: md5 от 25 Мая 2020, 20:29:08
Всем привет!

Может кому то покажаться глупым вопрос, я использую радиус со статическими ip адресами.
Вопрос такого рода. Если клиент сменил mac, каким образом ему получить от радиуса с другого пула адрес  ?

Может кто то использует уже такую схему, может процедуры есть у кого уже ?
Спасибо!


Название: Re: freeradius 3
Отправлено: md5 от 02 Июня 2020, 21:22:49
Привет всем!

Хотелось бы узнать про процедуру radupdate

Код:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` 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 ;

Она вызывает  CALL set_auth(ipa, CONCAT('mod=dhcp;user=', usr_mac, ';', REPLACE(properties,';','')));
В которой присутсвует тоже обновление таблички ip_pool

Код:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `set_auth`(IN usr_ip VARCHAR(15), IN auth_properties VARCHAR(255))
BEGIN
  DECLARE usr_id INT;
  SELECT uid INTO usr_id FROM ip_pool WHERE INET_ATON(usr_ip) = ip LIMIT 1;

  IF( usr_id > 0 ) THEN

    INSERT INTO auth_now SET
        ip = usr_ip,
        properties = auth_properties,
        start = UNIX_TIMESTAMP(),
        last = UNIX_TIMESTAMP()
    ON DUPLICATE KEY UPDATE
        properties = IF(auth_properties!='',auth_properties,properties),
        last = UNIX_TIMESTAMP();

    UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 3600
        WHERE ip = INET_ATON(usr_ip) AND type = 'dynamic' LIMIT 1;
  END IF;
END$$
DELIMITER ;


UPDATE mac_uid SET time=UNIX_TIMESTAMP() WHERE ip=INET_ATON(ipa) LIMIT 1;

А зачем 2 раза апдейтить таблицу ?  Я пару часов ковырял это пока не выяснил из-за чего дедлоки и остальные ошибки лезут



Название: Re: freeradius 3
Отправлено: Efendy от 02 Июня 2020, 22:22:50
я минуту пытался найти 2й апдейт. Затем сделал поиск по "mac_uid" и было всего 2 совпадения: одно в процедуре, другое ты цитируешь. Где дважды апдейтится таблица?

Всего в твоих процедурах апдейтятся 3 таблицы и все по разу:
mac_uid
auth_now
ip_pool


Название: Re: freeradius 3
Отправлено: md5 от 02 Июня 2020, 22:48:58
 ;D у меня в глазах наверное уже повылазило. я с этим радиусом 4й день т....сь

Кто то где то писал что можно как то передавать название dhcp сервера, что бы выдавать абонам айпишники в зависимотсти от влана.
т.е. в данной конфигурации для dhcp абоны по маку авторизируться, тобишь нет мака в базе абон вообще ничего не выхватить.

Вопрос назревает. Как сделать так что бы "абон заменил железку, мака в бд нет, и получил левый айпи" который на заглушку ушел ?

Код:
Tue Jun  2 22:41:19 2020 : Error: Unresponsive child for request 13520, in component post-auth module sql
Tue Jun  2 22:41:20 2020 : Error: Unresponsive child for request 13521, in component post-auth module sql
Tue Jun  2 22:41:20 2020 : Error: Unresponsive child for request 13522, in component post-auth module sql
Tue Jun  2 22:41:21 2020 : Error: Unresponsive child for request 13523, in component authorize module sql
Tue Jun  2 22:41:21 2020 : Error: Unresponsive child for request 13524, in component post-auth module sql
Tue Jun  2 22:41:21 2020 : Error: Unresponsive child for request 13525, in component authorize module sql
Tue Jun  2 22:41:22 2020 : Error: Unresponsive child for request 13527, in component post-auth module sql
Tue Jun  2 22:41:22 2020 : Error: Unresponsive child for request 13528, in component post-auth module sql
Tue Jun  2 22:41:23 2020 : Error: Unresponsive child for request 13531, in component post-auth module sql
Tue Jun  2 22:41:33 2020 : ERROR: (13520) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:33 2020 : WARNING: (13520) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:34 2020 : ERROR: (13521) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:34 2020 : ERROR: (13524) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:34 2020 : WARNING: (13521) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:34 2020 : ERROR: (13523) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:34 2020 : ERROR: (13522) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:34 2020 : WARNING: (13524) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:34 2020 : WARNING: (13522) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:34 2020 : WARNING: (13523) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:34 2020 : Auth: (13523) Invalid user (sql: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000): [14:4D:67:C2:D8:91] (from client Mikrotik port 2208901782 cli 1:14:4d:67:c2:d8:91)
Tue Jun  2 22:41:35 2020 : ERROR: (13527) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:35 2020 : ERROR: (13525) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:35 2020 : WARNING: (13527) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:35 2020 : WARNING: (13525) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:35 2020 : Auth: (13525) Invalid user (sql: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000): [D8:0D:17:F0:FA:24] (from client Mikrotik port 2208901783 cli 1:d8:d:17:f0:fa:24)
Tue Jun  2 22:41:36 2020 : ERROR: (13528) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:36 2020 : WARNING: (13528) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:37 2020 : ERROR: (13531) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:37 2020 : WARNING: (13531) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:38 2020 : Error: (13828) Ignoring duplicate packet from client Mikrotik port 48377 - ID: 130 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:39 2020 : Error: (13835) Ignoring duplicate packet from client Mikrotik port 42869 - ID: 137 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:40 2020 : Error: (13836) Ignoring duplicate packet from client Mikrotik port 45976 - ID: 138 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:41 2020 : Error: (13837) Ignoring duplicate packet from client Mikrotik port 52971 - ID: 139 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:41 2020 : Error: (13838) Ignoring duplicate packet from client Mikrotik port 39702 - ID: 140 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:41 2020 : Error: (13839) Ignoring duplicate packet from client Mikrotik port 36590 - ID: 141 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:43 2020 : Error: (13828) Ignoring duplicate packet from client Mikrotik port 48377 - ID: 130 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:43 2020 : Error: (13841) Ignoring duplicate packet from client Mikrotik port 39991 - ID: 143 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:44 2020 : Error: (13835) Ignoring duplicate packet from client Mikrotik port 42869 - ID: 137 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:44 2020 : Error: (13842) Ignoring duplicate packet from client Mikrotik port 48782 - ID: 144 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:45 2020 : Error: (13836) Ignoring duplicate packet from client Mikrotik port 45976 - ID: 138 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:46 2020 : Error: (13843) Ignoring duplicate packet from client Mikrotik port 54814 - ID: 145 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:46 2020 : Error: (13837) Ignoring duplicate packet from client Mikrotik port 52971 - ID: 139 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:46 2020 : Error: (13838) Ignoring duplicate packet from client Mikrotik port 39702 - ID: 140 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:46 2020 : Error: (13839) Ignoring duplicate packet from client Mikrotik port 36590 - ID: 141 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:48 2020 : Error: (13841) Ignoring duplicate packet from client Mikrotik port 39991 - ID: 143 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:49 2020 : Error: (13842) Ignoring duplicate packet from client Mikrotik port 48782 - ID: 144 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:51 2020 : Error: (13843) Ignoring duplicate packet from client Mikrotik port 54814 - ID: 145 due to unfinished request in component post-auth module sql



Название: Re: freeradius 3
Отправлено: md5 от 04 Июня 2020, 18:37:33
Ответа видимо не от кого ждать


Название: Re: freeradius 3
Отправлено: FlySky11 от 05 Июня 2020, 11:17:03
Ответа видимо не от кого ждать
процедура get_ip_by_tag
htt_p://nodeny.com.ua/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


Название: Re: freeradius 3
Отправлено: FlySky11 от 05 Июня 2020, 11:25:05
;D у меня в глазах наверное уже повылазило. я с этим радиусом 4й день т....сь

Кто то где то писал что можно как то передавать название dhcp сервера, что бы выдавать абонам айпишники в зависимотсти от влана.
т.е. в данной конфигурации для dhcp абоны по маку авторизируться, тобишь нет мака в базе абон вообще ничего не выхватить.

Вопрос назревает. Как сделать так что бы "абон заменил железку, мака в бд нет, и получил левый айпи" который на заглушку ушел ?

Код:
Tue Jun  2 22:41:19 2020 : Error: Unresponsive child for request 13520, in component post-auth module sql
Tue Jun  2 22:41:20 2020 : Error: Unresponsive child for request 13521, in component post-auth module sql
Tue Jun  2 22:41:20 2020 : Error: Unresponsive child for request 13522, in component post-auth module sql
Tue Jun  2 22:41:21 2020 : Error: Unresponsive child for request 13523, in component authorize module sql
Tue Jun  2 22:41:21 2020 : Error: Unresponsive child for request 13524, in component post-auth module sql
Tue Jun  2 22:41:21 2020 : Error: Unresponsive child for request 13525, in component authorize module sql
Tue Jun  2 22:41:22 2020 : Error: Unresponsive child for request 13527, in component post-auth module sql
Tue Jun  2 22:41:22 2020 : Error: Unresponsive child for request 13528, in component post-auth module sql
Tue Jun  2 22:41:23 2020 : Error: Unresponsive child for request 13531, in component post-auth module sql
Tue Jun  2 22:41:33 2020 : ERROR: (13520) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:33 2020 : WARNING: (13520) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:34 2020 : ERROR: (13521) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:34 2020 : ERROR: (13524) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:34 2020 : WARNING: (13521) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:34 2020 : ERROR: (13523) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:34 2020 : ERROR: (13522) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:34 2020 : WARNING: (13524) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:34 2020 : WARNING: (13522) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:34 2020 : WARNING: (13523) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:34 2020 : Auth: (13523) Invalid user (sql: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000): [14:4D:67:C2:D8:91] (from client Mikrotik port 2208901782 cli 1:14:4d:67:c2:d8:91)
Tue Jun  2 22:41:35 2020 : ERROR: (13527) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:35 2020 : ERROR: (13525) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:35 2020 : WARNING: (13527) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:35 2020 : WARNING: (13525) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:35 2020 : Auth: (13525) Invalid user (sql: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000): [D8:0D:17:F0:FA:24] (from client Mikrotik port 2208901783 cli 1:d8:d:17:f0:fa:24)
Tue Jun  2 22:41:36 2020 : ERROR: (13528) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:36 2020 : WARNING: (13528) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:37 2020 : ERROR: (13531) sql: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
Tue Jun  2 22:41:37 2020 : WARNING: (13531) WARNING: Module rlm_sql became unblocked
Tue Jun  2 22:41:38 2020 : Error: (13828) Ignoring duplicate packet from client Mikrotik port 48377 - ID: 130 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:39 2020 : Error: (13835) Ignoring duplicate packet from client Mikrotik port 42869 - ID: 137 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:40 2020 : Error: (13836) Ignoring duplicate packet from client Mikrotik port 45976 - ID: 138 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:41 2020 : Error: (13837) Ignoring duplicate packet from client Mikrotik port 52971 - ID: 139 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:41 2020 : Error: (13838) Ignoring duplicate packet from client Mikrotik port 39702 - ID: 140 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:41 2020 : Error: (13839) Ignoring duplicate packet from client Mikrotik port 36590 - ID: 141 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:43 2020 : Error: (13828) Ignoring duplicate packet from client Mikrotik port 48377 - ID: 130 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:43 2020 : Error: (13841) Ignoring duplicate packet from client Mikrotik port 39991 - ID: 143 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:44 2020 : Error: (13835) Ignoring duplicate packet from client Mikrotik port 42869 - ID: 137 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:44 2020 : Error: (13842) Ignoring duplicate packet from client Mikrotik port 48782 - ID: 144 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:45 2020 : Error: (13836) Ignoring duplicate packet from client Mikrotik port 45976 - ID: 138 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:46 2020 : Error: (13843) Ignoring duplicate packet from client Mikrotik port 54814 - ID: 145 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:46 2020 : Error: (13837) Ignoring duplicate packet from client Mikrotik port 52971 - ID: 139 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:46 2020 : Error: (13838) Ignoring duplicate packet from client Mikrotik port 39702 - ID: 140 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:46 2020 : Error: (13839) Ignoring duplicate packet from client Mikrotik port 36590 - ID: 141 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:48 2020 : Error: (13841) Ignoring duplicate packet from client Mikrotik port 39991 - ID: 143 due to unfinished request in component authorize module sql
Tue Jun  2 22:41:49 2020 : Error: (13842) Ignoring duplicate packet from client Mikrotik port 48782 - ID: 144 due to unfinished request in component post-auth module sql
Tue Jun  2 22:41:51 2020 : Error: (13843) Ignoring duplicate packet from client Mikrotik port 54814 - ID: 145 due to unfinished request in component post-auth module sql



Многоуважаемый Cell где-то описовал это

У меня реализовано на микротике
Делаешь динамический гостевой IP pool в админке
на микротике подымаешь в том же пуле dhcp
Делаешь чтобы с гостевово пула можно было достучаться до заглушки(если она на админке то соответсенно к ней)
С гостевово пула доступ только на заглушку (только http)
абон попадает на заглушку дале логин пароль дале интернет
У меня ипи для роботи статичиские
по дхцп направлялкой работает микрот (реализирована некая схема ipunambered) которий после авторизации и получения ипа с админки направляет на сателит(НАС)


Название: Re: freeradius 3
Отправлено: md5 от 05 Июня 2020, 19:14:16
сделал как хотел
кому интересно

https://github.com/meklis/docker-radius-nodeny


Название: Re: freeradius 3
Отправлено: dimia от 16 Июля 2020, 17:45:05
Покопался я в очередной раз с FreeRadius-ом версии 3 - голова болит, протрахался хз сколько часов, даже в исходники лез. И вот какие замечания:
3) Обнаружилось идиотское поведение freeradius3: он делает radcheck, затем radreply и потом проверяет пароль. Никуда не годится проверять пароль после того, как для учетки будет запрошен динамический ip, а в итоге выдан чужаку не будет. Поэтому пришлось проверять пароль и в radreply (добавлен параметр "пароль" - слава богу, он есть в параметрах радиуса)
да вроде у версии 2 такое же поведение:
Код:
[root@billing111 /home/ruhost]# radtest -x  -d /usr/local/etc/raddb2 test301 pass33 localhost 0 hardpass50
Sending Access-Request of id 54 to 127.0.0.1 port 1812
        User-Name = "test301"
        User-Password = "pass33"
        NAS-IP-Address = 172.17.0.121
        NAS-Port = 0
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=54, length=38
        Framed-IP-Address = 172.16.67.10
        Framed-IP-Netmask = 255.255.255.255
        Framed-Protocol = PPP
        Framed-Protocol = PPP
[root@billing111 /home/ruhost]# radclient -v
radclient version 2.2.10, built on Jul 16 2020 at 15:25:36

исправить можно с помощью:
Код:
post-auth {
        sql
        Post-Auth-Type REJECT {
                attr_filter.access_reject
        }
}

результат:
Код:
[root@billing111 /home/ruhost]# radtest -x  -d /usr/local/etc/raddb2 test301 pass33 localhost 0 hardpass50
Sending Access-Request of id 76 to 127.0.0.1 port 1812
        User-Name = "test301"
        User-Password = "pass33"
        NAS-IP-Address = 172.17.0.121
        NAS-Port = 0
        Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=76, length=20
вдогонку:
Код:
[root@billing111 /home/ruhost]# radtest -x  -d /usr/local/etc/raddb3 test301 pass33 localhost 0 hardpass50
Sent Access-Request Id 103 from 0.0.0.0:41137 to 127.0.0.1:1812 length 77
        User-Name = "test301"
        User-Password = "pass33"
        NAS-IP-Address = 172.17.0.121
        NAS-Port = 0
        Message-Authenticator = 0x00
        Cleartext-Password = "pass33"
Received Access-Reject Id 103 from 127.0.0.1:1812 to 0.0.0.0:41137 length 20
(0) -: Expected Access-Accept got Access-Reject
[root@billing111 /home/ruhost]# radclient -v
radclient version 3.0.21, built on Jul 16 2020 at 19:06:45


Название: Re: freeradius 3
Отправлено: goletsa от 20 Июля 2020, 15:10:56
Интересное решение. А можно ли например вызывать другую sql процедуру?
Например стоит задача все таки логировать неудачные попытки, но например складывать их в другую таблицу.


Название: Re: freeradius 3
Отправлено: DezZ от 27 Мая 2021, 15:14:15
Добрый день. Собираю н+ на новом железе. Естественно freeradius3 (старый еще на 2 работает). Застрял с авторизацией РРРоЕ пользователя, в логах получаю проблему с MS-CHAPv2.

Код:
(1981) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny
(1981)   Auth-Type MSCHAP {
(1981) mschap: Found Cleartext-Password, hashing to create NT-Password
(1981) mschap: Creating challenge hash with username: Kar6-17
(1981) mschap: Client is using MS-CHAPv2
(1981) mschap: ERROR: MS-CHAP2-Response is incorrect
(1981)     [mschap] = reject
(1981)   } # Auth-Type MSCHAP = reject
(1981) Failed to authenticate the user
(1981) Using Post-Auth-Type Reject
(1981) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny

как это лечиться?


Название: Re: freeradius 3
Отправлено: DezZ от 28 Мая 2021, 14:43:35
Добрый день. Собираю н+ на новом железе. Естественно freeradius3 (старый еще на 2 работает). Застрял с авторизацией РРРоЕ пользователя, в логах получаю проблему с MS-CHAPv2.

Код:
(1981) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny
(1981)   Auth-Type MSCHAP {
(1981) mschap: Found Cleartext-Password, hashing to create NT-Password
(1981) mschap: Creating challenge hash with username: Kar6-17
(1981) mschap: Client is using MS-CHAPv2
(1981) mschap: ERROR: MS-CHAP2-Response is incorrect
(1981)     [mschap] = reject
(1981)   } # Auth-Type MSCHAP = reject
(1981) Failed to authenticate the user
(1981) Using Post-Auth-Type Reject
(1981) # Executing group from file /usr/local/etc/raddb/sites-enabled/nodeny

как это лечиться?

Вопрос снят. Не заменил в процедуре 'hardpass' на свой.