DHCP динамическая аренда в статическую. Я искал скрипт, который бы конвертировал динамическую аренду в статическую, но не нашел хорошего решения. Поэтому я сделал новый скрипт, который размещается в настройках DHCP сервера и конвертирует динамический IP в статический. Вставьте это в: IP->DHCP-Сервер->Выберите ваш DHCP сервер->Скрипт аренды. P.S. это делает все IP статическими, никаких исключений. # Создано Jotne 2021 v1.4
#
# Этот скрипт автоматически конвертирует все DHCP аренды в статические
# Он должен работать на всех версиях RouterOS
/ip dhcp-server lease
# Проверьте, является ли это привязанной сессией и аренда динамической. Не изменяйте более старые резервации
:if (($leaseBound=1) && ([find where dynamic mac-address=$leaseActMAC]!="")) do={
# Получите номер аренды
:local Lease [find mac-address=$leaseActMAC]
# Получите дату и время
:local date [/system clock get date]
:local time [/system clock get time]
# Сделайте аренду статической
make-static $Lease
# Получите имя хоста
:local Name [get $Lease host-name ]
# Добавьте дату и время в комментарий, чтобы показать, когда это было найдено впервые
comment comment="$date $time $Name" $Lease
# Отправьте сообщение в лог
:log info message="script=dhcp_static server=$leaseServerName IP=$leaseActIP MAC=$leaseActMAC name=$Name"
} Этот скрипт удаляет все статические DHCP записи, которые не были увидены в течение последних 100 недель (можно настроить). В то же время он также удаляет DNS запись, соответствующую удаленной DHCP аренде. # Создано Jotne 2021 v1.2
# Удалите все статические DHCP и соответствующие DNS аренды старше 100 недель
# 1.1 Использована более простая регулярка
# 1.2 Сделано более динамичным
# Установите, насколько старые данные вы хотите удалить. Например, старше 100 недель -> "100w". Старше 30 дней -> "30d"
:local delete "100w"
# Найдите и удалите записи
/ip dhcp-server lease
:foreach id in=[find where dynamic=no last-seen>[:totime $delete]] do={
:local ip [get $id address]
:local hostdhcp [get $id host-name]
:local hostdns "N/A"
# Удалите запись DNS, если она существует
:do {
:set $hostdns [/ip dns static get [find where address=$ip] name]
/ip dns static remove [find where address=$ip]
} on-error={ }
# удалите запись DHCP
remove $id
# Отправьте сообщение в лог
:log info message="script=dhcp_clean older_than=$delete ip=$ip host_dhcp=\"$hostdhcp\" host_dns=\"$hostdns\""
}
#
# Этот скрипт автоматически конвертирует все DHCP аренды в статические
# Он должен работать на всех версиях RouterOS
/ip dhcp-server lease
# Проверьте, является ли это привязанной сессией и аренда динамической. Не изменяйте более старые резервации
:if (($leaseBound=1) && ([find where dynamic mac-address=$leaseActMAC]!="")) do={
# Получите номер аренды
:local Lease [find mac-address=$leaseActMAC]
# Получите дату и время
:local date [/system clock get date]
:local time [/system clock get time]
# Сделайте аренду статической
make-static $Lease
# Получите имя хоста
:local Name [get $Lease host-name ]
# Добавьте дату и время в комментарий, чтобы показать, когда это было найдено впервые
comment comment="$date $time $Name" $Lease
# Отправьте сообщение в лог
:log info message="script=dhcp_static server=$leaseServerName IP=$leaseActIP MAC=$leaseActMAC name=$Name"
} Этот скрипт удаляет все статические DHCP записи, которые не были увидены в течение последних 100 недель (можно настроить). В то же время он также удаляет DNS запись, соответствующую удаленной DHCP аренде. # Создано Jotne 2021 v1.2
# Удалите все статические DHCP и соответствующие DNS аренды старше 100 недель
# 1.1 Использована более простая регулярка
# 1.2 Сделано более динамичным
# Установите, насколько старые данные вы хотите удалить. Например, старше 100 недель -> "100w". Старше 30 дней -> "30d"
:local delete "100w"
# Найдите и удалите записи
/ip dhcp-server lease
:foreach id in=[find where dynamic=no last-seen>[:totime $delete]] do={
:local ip [get $id address]
:local hostdhcp [get $id host-name]
:local hostdns "N/A"
# Удалите запись DNS, если она существует
:do {
:set $hostdns [/ip dns static get [find where address=$ip] name]
/ip dns static remove [find where address=$ip]
} on-error={ }
# удалите запись DHCP
remove $id
# Отправьте сообщение в лог
:log info message="script=dhcp_clean older_than=$delete ip=$ip host_dhcp=\"$hostdhcp\" host_dns=\"$hostdns\""
}
