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