Нужна помощь со скриптом.
Добавлено: 08 янв 2025, 22:14
Всем доброго времени суток.
Возникла необходимость сделать на Микротике следующее:
Есть клиенты для Вайфая, надо их отключать и блокировать через 10 минут, что бы не смогли снова подключиться.
После копания в интернете нашёл следующий наборчик.
Для реализации сценария, где клиенту выдаётся IP-адрес один раз, затем он блокируется и отключается от Wi-Fi, можно использовать скрипт MikroTik. Такой подход полезен для ограничения доступа к Wi-Fi после первого подключения.
Алгоритм:
При подключении клиента через DHCP ему выдаётся IP-адрес.
После выдачи IP-адреса клиент:
Добавляется в список блокировки (firewall address-list).
Отключается от Wi-Fi (удаляется из регистра таблицы Wi-Fi).
В результате клиент больше не может подключаться к Wi-Fi.
Скрипт для DHCP Lease Script
Этот скрипт добавляется в Lease Script DHCP-сервера.
Скрипт:
:local leaseBound $leaseBound
:local macAddress $leaseActMAC
:local ipAddress $leaseActIP
:local leaseComment [/ip dhcp-server lease get [find where mac-address=$macAddress] comment]
# Если аренда активна (клиент подключился к сети)
:if ($leaseBound = "true") do={
# Если это первый раз (нет комментария у аренды)
:if ($leaseComment = "") do={
:log info ("Выдача IP-адреса $ipAddress для клиента: $macAddress")
# Помечаем, что IP выдан
/ip dhcp-server lease set [find where mac-address=$macAddress] comment="Issued"
# Добавляем клиента в список блокировки
/ip firewall address-list add list=BlockedClients address=$ipAddress comment="Blocked $macAddress"
# Отключаем клиента от Wi-Fi
:log warning ("Клиент $macAddress (IP $ipAddress) добавлен в блокировку и будет отключён от Wi-Fi")
/interface wireless access-list add mac-address=$macAddress authentication=no comment="Blocked $macAddress"
/interface wireless registration-table remove [find mac-address=$macAddress]
} else={
:log info ("Клиент $macAddress с IP $ipAddress уже получил адрес ранее и заблокирован")
}
} else={
:log info ("Аренда для клиента $macAddress с IP $ipAddress завершена")
}
Объяснение:
$leaseBound: Проверяет, активна ли аренда (true), то есть клиент подключился к DHCP.
$leaseActMAC: MAC-адрес клиента.
$leaseActIP: IP-адрес, выданный клиенту.
Комментарий: Используется для проверки, выдавался ли адрес раньше.
Список блокировки: Клиент добавляется в BlockedClients для дальнейшей блокировки в Firewall.
Отключение от Wi-Fi:
Добавляем MAC-адрес клиента в wireless access-list с запретом на аутентификацию.
Удаляем клиента из таблицы wireless registration-table, чтобы он немедленно отключился.
Настройка блокировки в Firewall
После добавления клиента в BlockedClients, необходимо настроить правило в Firewall, чтобы блокировать весь трафик от заблокированных клиентов.
Пример правила:
/ip firewall filter add chain=forward src-address-list=BlockedClients action=drop comment="Блокировка клиентов после выдачи IP"
Настройка Wi-Fi
Для корректной работы отключения от Wi-Fi убедитесь, что:
Ваше Wi-Fi-устройство настроено через /interface wireless.
Используется режим управления доступом через access-list (это позволяет запрещать аутентификацию отдельных клиентов).
Дополнительно
Автоматическое удаление из блокировки
Если вы хотите, чтобы клиент автоматически разблокировался через определённое время, можно добавить timeout для записи в список BlockedClients и в wireless access-list. Например:
/ip firewall address-list add list=BlockedClients address=$ipAddress timeout=1d comment="Blocked $macAddress"
/interface wireless access-list add mac-address=$macAddress authentication=no comment="Blocked $macAddress" timeout=1d
Это удалит блокировку через 1 день.
Проверка логов
Вы можете отслеживать все действия скрипта в разделе Log MikroTik. Скрипт выводит сообщения о выдаче IP, добавлении в блокировку и отключении от Wi-Fi.
***
Но при добавлении "access-list" в wireless ругается на timeout (я и сам не смог найти этого)
Проще говоря не хочет вся эта конструкция не хочет работать.
Может у кого-то возникнет желание (не безвозмездное) глянуть и поправить.
Дополнение: пробовал и на шестёрке, и на семёрке.
Возникла необходимость сделать на Микротике следующее:
Есть клиенты для Вайфая, надо их отключать и блокировать через 10 минут, что бы не смогли снова подключиться.
После копания в интернете нашёл следующий наборчик.
Для реализации сценария, где клиенту выдаётся IP-адрес один раз, затем он блокируется и отключается от Wi-Fi, можно использовать скрипт MikroTik. Такой подход полезен для ограничения доступа к Wi-Fi после первого подключения.
Алгоритм:
При подключении клиента через DHCP ему выдаётся IP-адрес.
После выдачи IP-адреса клиент:
Добавляется в список блокировки (firewall address-list).
Отключается от Wi-Fi (удаляется из регистра таблицы Wi-Fi).
В результате клиент больше не может подключаться к Wi-Fi.
Скрипт для DHCP Lease Script
Этот скрипт добавляется в Lease Script DHCP-сервера.
Скрипт:
:local leaseBound $leaseBound
:local macAddress $leaseActMAC
:local ipAddress $leaseActIP
:local leaseComment [/ip dhcp-server lease get [find where mac-address=$macAddress] comment]
# Если аренда активна (клиент подключился к сети)
:if ($leaseBound = "true") do={
# Если это первый раз (нет комментария у аренды)
:if ($leaseComment = "") do={
:log info ("Выдача IP-адреса $ipAddress для клиента: $macAddress")
# Помечаем, что IP выдан
/ip dhcp-server lease set [find where mac-address=$macAddress] comment="Issued"
# Добавляем клиента в список блокировки
/ip firewall address-list add list=BlockedClients address=$ipAddress comment="Blocked $macAddress"
# Отключаем клиента от Wi-Fi
:log warning ("Клиент $macAddress (IP $ipAddress) добавлен в блокировку и будет отключён от Wi-Fi")
/interface wireless access-list add mac-address=$macAddress authentication=no comment="Blocked $macAddress"
/interface wireless registration-table remove [find mac-address=$macAddress]
} else={
:log info ("Клиент $macAddress с IP $ipAddress уже получил адрес ранее и заблокирован")
}
} else={
:log info ("Аренда для клиента $macAddress с IP $ipAddress завершена")
}
Объяснение:
$leaseBound: Проверяет, активна ли аренда (true), то есть клиент подключился к DHCP.
$leaseActMAC: MAC-адрес клиента.
$leaseActIP: IP-адрес, выданный клиенту.
Комментарий: Используется для проверки, выдавался ли адрес раньше.
Список блокировки: Клиент добавляется в BlockedClients для дальнейшей блокировки в Firewall.
Отключение от Wi-Fi:
Добавляем MAC-адрес клиента в wireless access-list с запретом на аутентификацию.
Удаляем клиента из таблицы wireless registration-table, чтобы он немедленно отключился.
Настройка блокировки в Firewall
После добавления клиента в BlockedClients, необходимо настроить правило в Firewall, чтобы блокировать весь трафик от заблокированных клиентов.
Пример правила:
/ip firewall filter add chain=forward src-address-list=BlockedClients action=drop comment="Блокировка клиентов после выдачи IP"
Настройка Wi-Fi
Для корректной работы отключения от Wi-Fi убедитесь, что:
Ваше Wi-Fi-устройство настроено через /interface wireless.
Используется режим управления доступом через access-list (это позволяет запрещать аутентификацию отдельных клиентов).
Дополнительно
Автоматическое удаление из блокировки
Если вы хотите, чтобы клиент автоматически разблокировался через определённое время, можно добавить timeout для записи в список BlockedClients и в wireless access-list. Например:
/ip firewall address-list add list=BlockedClients address=$ipAddress timeout=1d comment="Blocked $macAddress"
/interface wireless access-list add mac-address=$macAddress authentication=no comment="Blocked $macAddress" timeout=1d
Это удалит блокировку через 1 день.
Проверка логов
Вы можете отслеживать все действия скрипта в разделе Log MikroTik. Скрипт выводит сообщения о выдаче IP, добавлении в блокировку и отключении от Wi-Fi.
***
Но при добавлении "access-list" в wireless ругается на timeout (я и сам не смог найти этого)
Проще говоря не хочет вся эта конструкция не хочет работать.
Может у кого-то возникнет желание (не безвозмездное) глянуть и поправить.
Дополнение: пробовал и на шестёрке, и на семёрке.