Нужна помощь со скриптом.

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Serg_V
Сообщения: 9
Зарегистрирован: 20 авг 2017, 10:32

Всем доброго времени суток.
Возникла необходимость сделать на Микротике следующее:
Есть клиенты для Вайфая, надо их отключать и блокировать через 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 (я и сам не смог найти этого)
Проще говоря не хочет вся эта конструкция не хочет работать.
Может у кого-то возникнет желание (не безвозмездное) глянуть и поправить.

Дополнение: пробовал и на шестёрке, и на семёрке.


MIKROTIK hAP lite classic RB941-2nD (был)
MIKROTIK hAP ac2 RBD52G-5HacD2HnD-TC (был)
MIKROTIK hAP ax² (C52IG-5HAXD2HAXD-TC)
Erik_U
Сообщения: 1939
Зарегистрирован: 09 июл 2014, 12:33

У wireless access-list нет таймаута. Поэтому и не добавляется.

И не понятна логика.
IP выдается из DHCP. После отключения заблокированного клиента аренда освобождается, а адрес на сутки попадает в заблокированный адрес лист.
Но этот адрес может быть выдан следующему клиенту, раз он в DHCP свободен. И не получится у этого клиента никуда подключиться.


Serg_V
Сообщения: 9
Зарегистрирован: 20 авг 2017, 10:32

Erik_U писал(а): 09 янв 2025, 05:45 У wireless access-list нет таймаута. Поэтому и не добавляется.

И не понятна логика.
IP выдается из DHCP. После отключения заблокированного клиента аренда освобождается, а адрес на сутки попадает в заблокированный адрес лист.
Но этот адрес может быть выдан следующему клиенту, раз он в DHCP свободен. И не получится у этого клиента никуда подключиться.
Подскажите как правильно сделать?


MIKROTIK hAP lite classic RB941-2nD (был)
MIKROTIK hAP ac2 RBD52G-5HacD2HnD-TC (был)
MIKROTIK hAP ax² (C52IG-5HAXD2HAXD-TC)
Аватара пользователя
Virtue
Сообщения: 146
Зарегистрирован: 07 мар 2014, 10:17

Serg_V писал(а): 09 янв 2025, 07:41 Подскажите как правильно сделать?
не пойму откуда берутся начальные переменные :du_ma_et:


Erik_U
Сообщения: 1939
Зарегистрирован: 09 июл 2014, 12:33

Serg_V писал(а): 09 янв 2025, 07:41 Подскажите как правильно сделать?
Точно не знаю. Скорее всего, для таких (или похожих) задач придумали хотспот.
Вот описание, например.
https://www.lanmart.ru/blogs/mikrotik-hotspot
Переходим на вкладку Server Profiles и заходим в свойства hsprof1, где снимаем галочку с пункта Cookie и устанавливаем у Trial. Обратите внимание, внизу в пункте Trial Uptime Limit указано время, в течении которого клиент может работать, по истечении будет заблокирован на 1 день - это указано в пункте Trial Uptime Reset.


Serg_V
Сообщения: 9
Зарегистрирован: 20 авг 2017, 10:32

Erik_U писал(а): 09 янв 2025, 13:05
Serg_V писал(а): 09 янв 2025, 07:41 Подскажите как правильно сделать?
Точно не знаю. Скорее всего, для таких (или похожих) задач придумали хотспот.
Вот описание, например.
https://www.lanmart.ru/blogs/mikrotik-hotspot
Переходим на вкладку Server Profiles и заходим в свойства hsprof1, где снимаем галочку с пункта Cookie и устанавливаем у Trial. Обратите внимание, внизу в пункте Trial Uptime Limit указано время, в течении которого клиент может работать, по истечении будет заблокирован на 1 день - это указано в пункте Trial Uptime Reset.
Спасибо огромное, а ведь это гораздо более простой и надёжный вариант. Буду вечером пробовать.


MIKROTIK hAP lite classic RB941-2nD (был)
MIKROTIK hAP ac2 RBD52G-5HacD2HnD-TC (был)
MIKROTIK hAP ax² (C52IG-5HAXD2HAXD-TC)
Serg_V
Сообщения: 9
Зарегистрирован: 20 авг 2017, 10:32

Erik_U писал(а): 09 янв 2025, 13:05
Вот описание, например.
https://www.lanmart.ru/blogs/mikrotik-hotspot
Переходим на вкладку Server Profiles и заходим в свойства hsprof1, где снимаем галочку с пункта Cookie и устанавливаем у Trial. Обратите внимание, внизу в пункте Trial Uptime Limit указано время, в течении которого клиент может работать, по истечении будет заблокирован на 1 день - это указано в пункте Trial Uptime Reset.
Ещё раз спасибо, всё заработало как я и хотел.


MIKROTIK hAP lite classic RB941-2nD (был)
MIKROTIK hAP ac2 RBD52G-5HacD2HnD-TC (был)
MIKROTIK hAP ax² (C52IG-5HAXD2HAXD-TC)
Ответить