Для управления данным функционалом нужен модуль Freeradius DHCP.
Начиная в версии 0.74 есть альтернатива для Freeradius DHCP. - управление через mikrotik_dhcp_leases.pl
Управление DHCP серверами на Mikrotik'e
При данной схеме работы DHCP запросы клиентов приходят на Mikrotik DHCP, затем Mikrotik их трансформирует в radius запрос и отправляет на RADIUS сервер где происходит авторизация пакета и отправка результата на Mikrotik. После получения результата от RADIUS сервера Mikrotik формирует пакет DHCP для клиента.
Возможности
Динамическая и статическая раздача IP адресов
Option 82 (Удобная система интеграции с любым нестандартным оборудованием)
Нарезка скорости абонентам
Гостевой доступ
Настройка
config.pl
$AUTH{mikrotik_dhcp}='Mac_auth2';
$ACCT{mikrotik_dhcp}='Mac_auth2';
%AUTH=();Так как DNS, маска сети и шлюз прописываются на Mikrotik (/ IP / DHCP Servers/ Networks ) и их нельзя изменить через RADIUS.
Для гостевых сетей можно отправлять только параметры длительности lease для IP адреса и использовать часть сети как гостевые адреса для dhcp.
Примечание: в настройках пула адресов, который используется как гостевой, обязательно отметить параметр "Гостевой доступ".
Примечание: сеть, которая должна будет выдаваться абоненту - должна быть предварительно записана на BRAS'e.
Настройка DHCP
через терминал
/ip dhcp-server add interface=ether2 address-pool=static-only authoritative=after-2sec-delay use-radius=yes lease-time=10m disabled=no /radius add address=192.168.1.62 secret=secretpass timeout=3000ms authentication-port=1812 accounting-port=1813 service=dhcp
с помощью Winbox
IP > DHCP Server > New DHCP Server
Красным подчёркнуты поля, которые важно изменить. Interface - интерфейс, на котором будет работать DHCP сервер, Lease Time - рекомедованное значение - 10 минут, Use RADIUS - yes.
Radius > New Radius Server
Если все правильно настроено на RADIUS сервер приходят следующие пары в дебаг режиме (radiusd -X).
NAS-Port-Type = Ethernet NAS-Port = 2205156610 Called-Station-Id = "DHCP-server" User-Name = "00:1B:FC:3A:B7:AA" User-Password = "" Agent-Remote-Id = 0x00067072cf5c8f82 Agent-Circuit-Id = 0x0004000b0101 NAS-Identifier = "MikroTik" NAS-IP-Address = 10.10.0.1
Если используете авторизацию по порту и маку коммутатора в запросе обязательно должны быть параметры Option 82
Agent-Remote-Id = 0x00067072cf5c8f82 Agent-Circuit-Id = 0x0004000b0101
Ответ RADIUS для Mikrotik'a (Access-Accept/Access-Deny)
Sending Access-Accept of id 19 to 193.106.59.230 port 55118
Mikrotik-Address-List = "CLIENTS_12"
Session-Timeout = 300
Framed-IP-Address = 10.10.1.200
Пример выражения
$conf{AUTH_EXPR}='Agent-Circuit-Id:0x0004(\S{4})\d{2}([0-9a-f]{2}):VLAN,PORT;Agent-Remote-Id:0x0006([0-9a-f]{12}):MAC;'
. 'Agent-Circuit-Id:0x([0-9a-f]{4})\d{2}([0-9a-f]{4})$:VLAN,PORT_DEC;Agent-Remote-Id:0x([0-9a-f]{12})$:MAC;';
ISC-DHCP
При использовании ISC-DHCP настраиваем DHCP RELAY на микротике с помощью Winbox
IP > DHCP RELAY
Подсчет трафика
Настройка mikrotik
Для начала надо в микротике включить клиента netflow
IP→TrafficFlow
Настроить цель, куда отсылать
Targets
Обязательно
Сервис mikrotik_ipoe
Подсчет трафика осуществляется системным процессом mikrotik_ipoe
Установка сервиса
Копируем системный юнит
cp /usr/abills/misc/collector/mikrotik_ipoe.service /etc/systemd/system/
Проверяем что путь до сервиса правильный
[Unit] Description="АСР Казна-39" NetFlow Collector for Mikrotik ROS After=network.target [Service] User=root WorkingDirectory=/usr/abills/libexec # Путь до биллинга ExecStart=perl /usr/abills/libexec/nf52sql.pm # Путь до сервиса Restart=always TimeoutSec=200 [Install] WantedBy=multi-user.target
Сохраняем и активируем
systemctl daemon-reload systemctl enable mikrotik_ipoe systemctl start mikrotik_ipoe
Удаление системного юнита
systemctl stop mikrotik_ipoe systemctl disable mikrotik_ipoe rm nano /etc/systemd/system/mikrotik_ipoe.service systemctl daemon-reload
Параметры в файле config.pl
| Параметр | Значение |
|---|---|
$conf{NETFLOW}=1; | Включение сервиса/выключения сервиса без перезапуска процесса |
| $conf{NETFLOW_PORT}=9995; | Порт, на котором слушать flow от микротика |
| $conf{NETFLOW_INTERVAL}=15; | Если прошло указанное количество секунд, , независимо от количества накопленных потоков, скрипт выполняет обработку данныхю По умолчанию 15 |
| $conf{NETFLOW_FLOW_LIMIT}=100; | Если количество накопленных потоков достигает лимита, скрипт немедленно выполняет обработку данных, даже если интервал времени ещё не истёк. По умолчанию 1000 |
| $conf{NETFLOW_USER_REFRESH_INTERVAL}=60; | Время, в секундах, обновления выполнения скрипта, необходима для "подхватывания" новых абонентов из таблицы internet_online. По умолчанию 300 (5 минут) |
| $conf{NETFLOW_NAS_IDS}='59'; | Номера серверов доступа, через запятую |
| $conf{FLOW_DIR} = '/usr/abills/var/log/ipn/'; | Папка для хранения логов |
| $conf{FLOWTOOLS_IP_AGGREGATION}=0; | Ускорение работы скрипта |
systemctl restart mikrotik_ipoe
Шейпер
Возможные ошибки
Нет связи с радиусом
/log print 17:28:45 dhcp,error ONU: radius authentication failed for 40:ED:98:60:33:59: RADIUS server is not responding
radiusd -X
Access-Request packet from host 172.30.9.1 port 35496, id=32, length=111
NAS-Port-Type = Ethernet
NAS-Port = 2211448818
Calling-Station-Id = "1:40:ed:98:60:33:59"
Called-Station-Id = "ONU"
User-Name = "40:ED:98:60:33:59"
User-Password = "P\301\377cJ\237\255\244\302\350\2230\3370=\335"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
NAS-Identifier = "MikroTik"
NAS-IP-Address = 172.30.9.1
Sending Access-Accept of id 31 to 172.30.9.1 port 50139
Framed-IP-Address = 10.0.0.2
Mikrotik-Address-List = "CLIENTS_1"
Session-Timeout = 600
(RADIUS видит приходящие запросы с Mikrotik, отвечает на них, но Mikrotik не видит ответов.)
Проверьте, совпадает ли секретный ключ radius secret на Mikrotik и в биллинге. Нужно повторно внести в поле пароля управления RADIUS секрет и перезагрузить радиус, также этот пароль нужно обновить на Mikrotik.
Если проблема осталась:
Проверяете через tcpdump, нормально ли приходят запросы:
tcpdump -n host *IP*
где *IP* - IP-адрес Mikrotik.
Возможная проблема: Mikrotik посылает RADIUS-запрос, ему приходит ответ, но Mikrotik не принимает ответ, отвечает ICMP port unreachable:
IP 172.16.0.4.33280 > 10.0.0.1.1812: RADIUS, Access-Request (1), id: 0x24 length: 116 IP 10.0.0.1.1812 > 172.16.0.4.33280: RADIUS, Access-Accept (2), id: 0x24 length: 93 IP 172.16.0.4 > 10.0.0.1: ICMP 172.16.0.4 udp port 33280 unreachable, length 129
Здесь 172.16.0.4 - Mikrotik, 10.0.0.1 - RADIUS-сервер.
Вероятно, ответ на Mikrotik приходит не с того IP-адреса, на который Mikrotik отправил запрос - где-то между Mikrotik и RADIUS-сервером происходит трансляция адресов (NAT). Можно убедиться, запустив на Mikrotik Packet Sniffer.
Решение: разместить Mikrotik и RADIUS-сервер в одной сети, или правильно настроить NAT.





