Ipv6 + Radius 3 Development
Это процесс разработки!
Установка 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
По умолчанию пароль пустой
/ip dhcp-server add disabled=no 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