Ipv6 + Radius 3 Development: відмінності між версіями
Sv (обговорення | внесок) |
(Немає відмінностей)
|
Поточна версія на 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