<?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=Ipv6_%2B_Radius_3_Development</id>
	<title>Ipv6 + Radius 3 Development - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https:///index.php?action=history&amp;feed=atom&amp;title=Ipv6_%2B_Radius_3_Development"/>
	<link rel="alternate" type="text/html" href=""/>
	<updated>2026-05-05T12:23:16Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id></id>
		<title>Sv: /* Докер Микротика */</title>
		<link rel="alternate" type="text/html" href=""/>
		<updated>2024-03-17T20:09:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Докер Микротика&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Это процесс разработки!==&lt;br /&gt;
==Цель==&lt;br /&gt;
На dhcp-запрос по мак-адресу должны получить ipv6. Настраиваем локально радиус. Микротик в докере. С консоли делаем dhcp-запрос на интерфейс, который &amp;quot;слушает&amp;quot; микротик&lt;br /&gt;
&lt;br /&gt;
==Установка Radius==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install freeradius-mysql&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm /etc/freeradius/3.0/sites-enabled/default&lt;br /&gt;
cp /usr/local/nodeny/etc/raddb/clients.conf /etc/freeradius/3.0/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Конфигурирование===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/freeradius/3.0/sites-enabled/nodeny&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставляем следующий текст:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server default {&lt;br /&gt;
    listen {&lt;br /&gt;
        type = auth&lt;br /&gt;
        ipaddr = *&lt;br /&gt;
        port = 1812&lt;br /&gt;
    }&lt;br /&gt;
    listen {&lt;br /&gt;
        type = acct&lt;br /&gt;
        ipaddr = *&lt;br /&gt;
        port = 0&lt;br /&gt;
    }&lt;br /&gt;
    authorize {&lt;br /&gt;
        sql&lt;br /&gt;
        update control {&lt;br /&gt;
          Auth-Type := Accept&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    authenticate {&lt;br /&gt;
    }&lt;br /&gt;
    preacct {&lt;br /&gt;
        acct_unique&lt;br /&gt;
        preprocess&lt;br /&gt;
    }&lt;br /&gt;
    accounting {&lt;br /&gt;
        sql&lt;br /&gt;
    }&lt;br /&gt;
    session {&lt;br /&gt;
        radutmp&lt;br /&gt;
        sql&lt;br /&gt;
    }&lt;br /&gt;
    post-auth {&lt;br /&gt;
        sql&lt;br /&gt;
    }&lt;br /&gt;
    Post-Auth-Type ACCEPT {&lt;br /&gt;
        sql&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sql конфиг===&lt;br /&gt;
В консоли:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/freeradius/3.0/mods-enabled/sql&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&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;
    read_groups = no&lt;br /&gt;
    authorize_reply_query = &amp;quot;call radreply('%{User-Name}')&amp;quot;&lt;br /&gt;
    pool {&lt;br /&gt;
      start = 5&lt;br /&gt;
      min = 5&lt;br /&gt;
      max = 130&lt;br /&gt;
      spare = 30&lt;br /&gt;
      uses = 0&lt;br /&gt;
      retry_delay = 30&lt;br /&gt;
      lifetime = 0&lt;br /&gt;
      idle_timeout = 60&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mysql процедуры и функции===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DROP FUNCTION IF EXISTS `ipv6_by_uid`;&lt;br /&gt;
DELIMITER $$&lt;br /&gt;
CREATE FUNCTION ipv6_by_uid(uid INT) RETURNS VARCHAR(32)&lt;br /&gt;
    DETERMINISTIC&lt;br /&gt;
BEGIN&lt;br /&gt;
    DECLARE netmask INT DEFAULT 56;&lt;br /&gt;
    RETURN CONCAT(INET6_NTOA(&lt;br /&gt;
        INET6_ATON('FFFF:BBBB::') | &lt;br /&gt;
        (&lt;br /&gt;
          INET6_ATON(CONCAT('::', HEX(MOD(uid, 65536)))) |&lt;br /&gt;
         (INET6_ATON(CONCAT('::', HEX(ROUND(uid / 65536)))) &amp;lt;&amp;lt; 16)&lt;br /&gt;
        ) &amp;lt;&amp;lt; netmask&lt;br /&gt;
    ), '/', netmask);&lt;br /&gt;
END$$&lt;br /&gt;
DELIMITER ;&lt;br /&gt;
&lt;br /&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(32);&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;
    SELECT ipv6_by_uid(usr_id) INTO usr_ip;&lt;br /&gt;
    SELECT NULL, login, 'Framed-IPv6-Prefix', usr_ip, '=';&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;
select ipv6_by_uid(150001);&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;
+---------------------------+&lt;br /&gt;
| ipv6_by_uid(150001)       |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
| ffff:bbbb:0:249:f100::/56 |&lt;br /&gt;
+---------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Докер Микротика==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull hossein3piol/mikrotik-routeros&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano docker-compose.yml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вставляем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
version: '3.9'&lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
   routers:&lt;br /&gt;
       container_name: &amp;quot;mikrotik&amp;quot;&lt;br /&gt;
       image: hossein3piol/mikrotik-routeros:latest&lt;br /&gt;
       privileged: true&lt;br /&gt;
       ports:&lt;br /&gt;
           - &amp;quot;2222:22&amp;quot;    # ssh&lt;br /&gt;
           - &amp;quot;8888:80&amp;quot;    # http&lt;br /&gt;
           - &amp;quot;8291:8291&amp;quot;  # winbox&lt;br /&gt;
       cap_add:&lt;br /&gt;
           - NET_ADMIN&lt;br /&gt;
       devices:&lt;br /&gt;
           - /dev/net/tun&lt;br /&gt;
       extra_hosts:&lt;br /&gt;
           - &amp;quot;host.docker.internal:host-gateway&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В конфиге проброс на хостовую машину портов 22, 80 и 8291. host.docker.internal:host-gateway - добавляем в днс хостовую машину (не сработало, придется по ip)&lt;br /&gt;
&lt;br /&gt;
Запускаем контейнер:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первый запуск был очень долгим. Коннектимся:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ssh admin@172.17.0.1 -p 2222&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию пароль пустой&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/ipv6 dhcp-server&lt;br /&gt;
add address-pool=&amp;quot;&amp;quot; interface=ether1 name=dhcp1 use-radius=yes&lt;br /&gt;
/radius&lt;br /&gt;
add address=172.17.0.1 secret=hardpass5 service=dhcp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На хостовой машине добавим в радиус микротик:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano /etc/freeradius/3.0/clients.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
client 172.19.0.2 {&lt;br /&gt;
        secret      = hardpass5&lt;br /&gt;
        shortname   = NoDenyDB&lt;br /&gt;
        nastype     = cisco&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
172.19.0.2 - ip микротика, почему именно такой пока не знаю. Кстати, я его получил из лога freeradius:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ignoring request to acct address * port 1813 bound to server default from unknown client 172.19.0.2 port 40012 proto udp&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;
/ip address/print&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Тестируем==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
freeradius -X&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
любому абоненту добавляем подключение с мак-ом 00:11:22:33:44:55. Проверяем ответ радиуса&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
radtest 00:11:22:33:44:55 '' 127.0.0.1 0 hardpass5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Делаем dhcp запрос&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dhcp6c -d -D -f br-4eebe7136ddb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sv</name></author>
	</entry>
</feed>