<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https:///index.php?action=history&amp;feed=atom&amp;title=Radius_%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D1%8B</id>
	<title>Radius атрибуты - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https:///index.php?action=history&amp;feed=atom&amp;title=Radius_%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D1%8B"/>
	<link rel="alternate" type="text/html" href=""/>
	<updated>2026-05-05T13:31:47Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id></id>
		<title>Sv в 07:03, 29 червня 2023</title>
		<link rel="alternate" type="text/html" href=""/>
		<updated>2023-06-29T07:03:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Модуль позволяет добавлять произвольные атрибуты в radreply пакет radius-сервера в зависимости от тарифа абонента. Это может быть альтернативой скрипту noserver, который управляет фаерволом или скоростями на mikrotik. В этом случае правила скорости (либо иные другие) будет устанавливать сам сервер PPPoE или DHCP. Например, необходимо чтобы radius отдавал следующее:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    Service-Type = Framed-User&lt;br /&gt;
    Framed-Protocol = PPP&lt;br /&gt;
    Framed-IP-Address = 192.168.100.5&lt;br /&gt;
    Framed-IP-Netmask = 255.255.255.255&lt;br /&gt;
    ERX-Service-Activate:1+= &amp;quot;pppoe_local(10m,10m,15m,15m)&amp;quot;&lt;br /&gt;
    ERX-Primary-Dns = 8.8.8.8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Здесь атрибут ERX-Service-Activate устанавливает скорость абоненту по разным направлениям.&lt;br /&gt;
&lt;br /&gt;
После установки модуля, в безлимитных услугах появится параметр Radius, в который следует вписать дополнительные radius-атрибуты по-одному на каждую строку, например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERX-Service-Activate:1+= &amp;quot;pppoe_local(10m,10m,15m,15m)&amp;quot;&lt;br /&gt;
ERX-Primary-Dns = 8.8.8.8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В mysql необходимо создать следующую функцию:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP FUNCTION strSplit;&lt;br /&gt;
CREATE FUNCTION strSplit(x MEDIUMTEXT, delim MEDIUMTEXT, pos int) RETURNS MEDIUMTEXT DETERMINISTIC&lt;br /&gt;
RETURN &lt;br /&gt;
    TRIM(BOTH '\r' FROM TRIM(&lt;br /&gt;
       REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1), delim, '')&lt;br /&gt;
    ));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
А в процедуру radreply добавить:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP PROCEDURE IF EXISTS `radreply`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE `radreply`(IN .... )&lt;br /&gt;
BEGIN&lt;br /&gt;
  ...&lt;br /&gt;
  ...&lt;br /&gt;
  DECLARE add_attr MEDIUMTEXT;&lt;br /&gt;
  DECLARE line MEDIUMTEXT;&lt;br /&gt;
  DECLARE i INT DEFAULT 1;&lt;br /&gt;
&lt;br /&gt;
  ...&lt;br /&gt;
  ...&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
  SELECT radius_attr INTO add_attr FROM users_services&lt;br /&gt;
    WHERE uid=usr_id AND tags LIKE '%,inet,%' LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
  attr_loop: WHILE TRUE DO&lt;br /&gt;
    SELECT strSplit(add_attr, '\n', i) INTO line;&lt;br /&gt;
    IF LENGTH(line) = 0 OR i &amp;gt; 20 THEN LEAVE attr_loop; END IF;&lt;br /&gt;
    IF line LIKE '%+=%' THEN&lt;br /&gt;
        SELECT NULL,login,strSplit(line, '+=', 1),strSplit(line, '+=', 2),'+=';&lt;br /&gt;
    ELSEIF line LIKE '%=%' THEN&lt;br /&gt;
        SELECT NULL,login,strSplit(line, '=', 1),strSplit(line, '=', 2),'=';&lt;br /&gt;
    END IF;&lt;br /&gt;
    SET i = i + 1;&lt;br /&gt;
  END WHILE;&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверяем в консоли mysql:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
call radreply(параметры);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Не забывайте==&lt;br /&gt;
Чтобы изменения отразились на уже подключенной услуге, вы должны переподключить услугу для абонента (завершить и подключить снова)&lt;br /&gt;
&lt;br /&gt;
=Новое=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP PROCEDURE IF EXISTS `rad_attr`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE `rad_attr`(IN login VARCHAR(64), IN state VARCHAR(3), IN add_attr MEDIUMTEXT)&lt;br /&gt;
BEGIN&lt;br /&gt;
  DECLARE line MEDIUMTEXT;&lt;br /&gt;
  DECLARE i INT DEFAULT 1;&lt;br /&gt;
&lt;br /&gt;
  IF add_attr LIKE '%###%' THEN&lt;br /&gt;
      SELECT strSplit(add_attr, '###', IF(state='on', 1, 2)) INTO add_attr;&lt;br /&gt;
  END IF;&lt;br /&gt;
&lt;br /&gt;
  attr_loop: WHILE TRUE DO&lt;br /&gt;
    SELECT strSplit(add_attr, '\n', i) INTO line;&lt;br /&gt;
    SET i = i + 1;&lt;br /&gt;
    IF i &amp;gt; 20 THEN LEAVE attr_loop; END IF;&lt;br /&gt;
    IF LENGTH(line) = 0 THEN ITERATE attr_loop; END IF;&lt;br /&gt;
    IF line LIKE '%+=%' THEN&lt;br /&gt;
        SELECT NULL,login,strSplit(line, '+=', 1),strSplit(line, '+=', 2),'+=';&lt;br /&gt;
    ELSEIF line LIKE '%=%' THEN&lt;br /&gt;
        SELECT NULL,login,strSplit(line, '=', 1),strSplit(line, '=', 2),'=';&lt;br /&gt;
    END IF;&lt;br /&gt;
  END WHILE;&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP PROCEDURE IF EXISTS `radreply`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE `radreply`(IN login VARCHAR(64))&lt;br /&gt;
BEGIN&lt;br /&gt;
  DECLARE usr_id INT;&lt;br /&gt;
  DECLARE usr_state VARCHAR(3);&lt;br /&gt;
  DECLARE usr_ip VARCHAR(15) DEFAULT NULL;&lt;br /&gt;
  DECLARE add_attr MEDIUMTEXT;&lt;br /&gt;
&lt;br /&gt;
  SELECT id,  state INTO usr_id, usr_state FROM users WHERE name=login LIMIT 1;&lt;br /&gt;
  SELECT get_ip(usr_id) INTO usr_ip;&lt;br /&gt;
  SELECT radius_attr INTO add_attr FROM users_services&lt;br /&gt;
    WHERE uid=usr_id AND tags LIKE '%,inet,%' LIMIT 1;&lt;br /&gt;
&lt;br /&gt;
  SELECT NULL,login,'Framed-IP-Address',usr_ip,'=';&lt;br /&gt;
  SELECT NULL,login,'Framed-IP-Netmask','255.255.255.255','=';&lt;br /&gt;
  SELECT NULL,login,'Framed-Protocol','PPP','=';&lt;br /&gt;
&lt;br /&gt;
  CALL rad_attr(login, usr_state, add_attr);&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в блоке с радиус-атрибутами будут идти подряд 3 символа # - это будет означать, что до этих символов будут применены атрибуты если учетная запись в незаблокированном состоянии, а после - если в заблокированном. Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr1=val1&lt;br /&gt;
attr2=val2&lt;br /&gt;
###&lt;br /&gt;
attr1=val3&lt;br /&gt;
attr8=val4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sv</name></author>
	</entry>
</feed>