<?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=FreeRadius3_%2B_Dhcp_%28Linux%29</id>
	<title>FreeRadius3 + Dhcp (Linux) - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https:///index.php?action=history&amp;feed=atom&amp;title=FreeRadius3_%2B_Dhcp_%28Linux%29"/>
	<link rel="alternate" type="text/html" href=""/>
	<updated>2026-05-05T12:23:15Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id></id>
		<title>Sv в 20:29, 16 січня 2023</title>
		<link rel="alternate" type="text/html" href=""/>
		<updated>2023-01-16T20:29:30Z</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;Вариант, когда DHCP-сервер не устанавливается, поскольку FreeRadius версии 3 может сам выполнять функции DHCP &lt;br /&gt;
&lt;br /&gt;
* В админке NoDeny надо создать пул ip в количестве раз в 5-10 большим чем предполагаемое количество абонентов. Тип ip обязательно должен быть &amp;quot;динамический&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Mysql процедуры==&lt;br /&gt;
&lt;br /&gt;
Процедуры практически один в один как в варианте [[Dhcp+Radius]], единственное, ip необходимо возвращать в атрибуте DHCP-Your-IP-Address&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALTER DATABASE nodeny CHARACTER SET utf8 COLLATE utf8_general_ci;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP PROCEDURE IF EXISTS `radcheck`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE `radcheck` (IN login VARCHAR(64))&lt;br /&gt;
BEGIN&lt;br /&gt;
  SELECT Null, login, 'Cleartext-Password' AS Attribute, '' AS Value,':=';&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/pre&amp;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_mac VARCHAR(12);&lt;br /&gt;
    DECLARE usr_ip VARCHAR(15);&lt;br /&gt;
    DECLARE usr_id INT;&lt;br /&gt;
    SELECT REPLACE(login, ':', '') INTO usr_mac;&lt;br /&gt;
    SELECT uid INTO usr_id FROM mac_uid WHERE mac=usr_mac;&lt;br /&gt;
    IF usr_id IS NOT NULL AND usr_id&amp;gt;0 THEN&lt;br /&gt;
        SELECT get_ip(usr_id) INTO usr_ip;&lt;br /&gt;
        UPDATE mac_uid SET ip=0 WHERE ip=INET_ATON(usr_ip) AND uid&amp;lt;&amp;gt;usr_id;&lt;br /&gt;
        UPDATE mac_uid SET ip=INET_ATON(usr_ip), time=UNIX_TIMESTAMP() WHERE uid=usr_id;&lt;br /&gt;
    ELSE&lt;br /&gt;
        START TRANSACTION;&lt;br /&gt;
        SELECT INET_NTOA(ip) INTO usr_ip FROM ip_pool&lt;br /&gt;
            WHERE uid=0 AND type='dynamic' AND `release` &amp;lt; UNIX_TIMESTAMP()&lt;br /&gt;
            ORDER BY RAND() LIMIT 1 FOR UPDATE;&lt;br /&gt;
        INSERT INTO mac_uid VALUES(&lt;br /&gt;
            NULL, usr_mac, INET_ATON(usr_ip), 0, UNIX_TIMESTAMP(), 0, 0, 0, '')&lt;br /&gt;
        ON DUPLICATE KEY&lt;br /&gt;
            UPDATE ip=IF(ip&amp;gt;0,ip,INET_ATON(usr_ip)), time=UNIX_TIMESTAMP();&lt;br /&gt;
        COMMIT;&lt;br /&gt;
        SELECT INET_NTOA(ip) INTO usr_ip FROM mac_uid WHERE mac=usr_mac;&lt;br /&gt;
        UPDATE ip_pool SET `release` = UNIX_TIMESTAMP() + 3600&lt;br /&gt;
            WHERE ip = INET_ATON(usr_ip);&lt;br /&gt;
    END IF;&lt;br /&gt;
    SELECT NULL, login, 'DHCP-Your-IP-Address', usr_ip, '=';&lt;br /&gt;
    SELECT NULL, login, 'Session-Timeout', '600', '=';&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP PROCEDURE IF EXISTS `radupdate`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE PROCEDURE `radupdate`(&lt;br /&gt;
    IN login VARCHAR(64), IN ipa VARCHAR(16), IN properties VARCHAR(255))&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE usr_mac VARCHAR(16);&lt;br /&gt;
    SELECT REPLACE(login, ':', '') INTO usr_mac;&lt;br /&gt;
    CALL set_auth(ipa, CONCAT('mod=dhcp;user=', usr_mac, ';', REPLACE(properties,';','')));&lt;br /&gt;
    UPDATE mac_uid SET time=UNIX_TIMESTAMP() WHERE ip=INET_ATON(ipa) LIMIT 1;&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;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CALL radreply('00:11:22:33:44:55');&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Установка FreeRaius версии 3==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install freeradius&lt;br /&gt;
apt install freeradius-mysql&lt;br /&gt;
apt install freeradius-dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Конфигурирование Radius==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm /etc/freeradius/3.0/sites-enabled/default&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаем конфиг dhcp:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/freeradius/3.0/sites-enabled/dhcp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server dhcp {&lt;br /&gt;
    listen {&lt;br /&gt;
        type = dhcp&lt;br /&gt;
        interface = enp0s9&lt;br /&gt;
        ipaddr = 0.0.0.0&lt;br /&gt;
        port = 67&lt;br /&gt;
        broadcast = yes&lt;br /&gt;
    }&lt;br /&gt;
    dhcp DHCP-Discover {&lt;br /&gt;
        update reply {&lt;br /&gt;
            DHCP-Message-Type = DHCP-Offer&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        update reply {&lt;br /&gt;
            DHCP-Domain-Name-Server = 8.8.8.8&lt;br /&gt;
            DHCP-Subnet-Mask = 255.255.255.0&lt;br /&gt;
            DHCP-Router-Address = 10.0.1.1&lt;br /&gt;
            DHCP-IP-Address-Lease-Time = 86400&lt;br /&gt;
            DHCP-DHCP-Server-Identifier = 10.0.1.1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sql.authorize&lt;br /&gt;
        ok&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    dhcp DHCP-Request {&lt;br /&gt;
        update reply {&lt;br /&gt;
            DHCP-Message-Type = DHCP-Ack&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        update reply {&lt;br /&gt;
            DHCP-Domain-Name-Server = 8.8.8.8&lt;br /&gt;
            DHCP-Subnet-Mask = 255.255.255.0&lt;br /&gt;
            DHCP-Router-Address = 10.0.1.1&lt;br /&gt;
            DHCP-IP-Address-Lease-Time = 86400&lt;br /&gt;
            DHCP-DHCP-Server-Identifier = 10.0.1.1&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        sql.authorize&lt;br /&gt;
        sql.post-auth&lt;br /&gt;
        ok&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    dhcp {&lt;br /&gt;
        reject&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь 10.0.1.1 - это ip интерфейса, на котором нам нужно dhcp.&lt;br /&gt;
&lt;br /&gt;
Создаем конфиг sql:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/freeradius/3.0/mods-enabled/sql&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sql {&lt;br /&gt;
    driver = &amp;quot;rlm_sql_mysql&amp;quot;&lt;br /&gt;
    mysql {&lt;br /&gt;
        warnings = auto&lt;br /&gt;
    }&lt;br /&gt;
    server = &amp;quot;localhost&amp;quot;&lt;br /&gt;
    port = 3306&lt;br /&gt;
    login = &amp;quot;nodeny&amp;quot;&lt;br /&gt;
    password = &amp;quot;hardpass&amp;quot;&lt;br /&gt;
    radius_db = &amp;quot;nodeny&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    authorize_check_query = &amp;quot;call radcheck('%{DHCP-Client-Hardware-Address}')&amp;quot;&lt;br /&gt;
    authorize_reply_query = &amp;quot;call radreply('%{DHCP-Client-Hardware-Address}')&amp;quot;&lt;br /&gt;
    accounting {&lt;br /&gt;
        reference = &amp;quot;%{tolower:type.%{Acct-Status-Type}.query}&amp;quot;&lt;br /&gt;
        type {&lt;br /&gt;
            start {&lt;br /&gt;
                query = &amp;quot;call radupdate('%{DHCP-Client-Hardware-Address}','%{reply:DHCP-Your-IP-Address}',\&lt;br /&gt;
                        'nas=%{DHCP-DHCP-Server-Identifier}')&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
            interim-update {&lt;br /&gt;
                query = &amp;quot;${..start.query}&amp;quot;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    post-auth {&lt;br /&gt;
        query = &amp;quot;call radupdate('%{DHCP-Client-Hardware-Address}','%{reply:DHCP-Your-IP-Address}',\&lt;br /&gt;
                'nas=%{DHCP-DHCP-Server-Identifier}')&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запуск с дебагом на экран:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
freeradius -X&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sv</name></author>
	</entry>
</feed>