Привет, я много лет использовал скрипт DDNS на Mikrotik RouterOS 9.6, но после обновления до версии 7.13 скрипт перестал работать. Надеюсь, кто-то подскажет, что не так или что изменилось в 7.13.
# DHCP Lease to Simple Queues
# 2014 Lonnie Mendez (lmendez@anvilcom.com)
#
# Mikrotik RouterOS v6.9
/ip dhcp-server lease
:foreach x in=[find] do={
# получаем переменные для дальнейшего использования
:local leaseaddr ([get $x address]."/32")
:local leasemacaddr [get $x mac-address]
:local leasehostname [get $x host-name]
:local leasename [get $x comment]
:local queuecomment
:local leaseinqueue false
/queue simple
:foreach y in=[find] do={
# получаем переменные для дальнейшего использования
:local queuetargetaddr [get $y target]
:set queuecomment [get $y comment]
# выделяем из поля комментария информацию (MAC, Hostname)
:local queuemac [:pick $queuecomment 4 21]
:local queuehostname [:pick $queuecomment 22 [:len $queuecomment]]
# Если MAC из аренды совпадает с MAC из очереди, то обновляем запись в очереди
:if ($queuemac = $leasemacaddr) do={
# формируем поле комментария
:set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)
set $y target=$leaseaddr comment=$queuecomment
:if ($leasename != "") do= {
set $y name=($leasename . " (" . $leasemacaddr . ")")
} else= {
:if ($leasehostname != "") do= {
set $y name=($leasehostname . " (" . $leasemacaddr . ")")
} else= {
set $y name=$leasemacaddr
}
}
:set leaseinqueue true
} else= {
# если IP для этой аренды существует, но MAC другой, обновляем MAC/hostname и сбрасываем счетчики
:if ($queuetargetaddr = $leaseaddr) do={
# формируем поле комментария
:set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)
set $y comment=$queuecomment
reset-counters $y
:if ($leasename != "") do= {
set $y name=($leasename . " (" . $leasemacaddr . ")")
} else= {
:if ($leasehostname != "") do= {
set $y name=($leasehostname . " (" . $leasemacaddr . ")")
} else= {
set $y name=$leasemacaddr
}
}
:set leaseinqueue true
}
}
}
# Если записи не было, добавляем новую для этой аренды
:if ($leaseinqueue = false) do={
# формируем поле комментария
:set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)
# формируем команду
:local cmd "/queue simple add target=$leaseaddr max-limit=100M/100M comment=$queuecomment"
:if ($leasename != "") do={
:set cmd "$cmd name=\"$leasename ($leasemacaddr)\""
} else= {
:if ($leasehostname != "") do={
:set cmd "$cmd name=\"$leasehostname ($leasemacaddr)\""
} else= {
:set cmd "$cmd name=\"$leasemacaddr\""
}
}
:execute $cmd
}
}
# Очистка - удаляем динамические записи, которых больше нет в таблице аренды
/queue simple
:foreach z in=[find] do={
:local queuecomment [get $z comment]
:local queue1stpart [:pick $queuecomment 0 3]
:local queue2ndpart [:pick $queuecomment 4 21]
:if ($queue1stpart = "dtq") do={
:if ([/ip dhcp-server lease find mac-address=$queue2ndpart] = "") do={
:log info ("DTQ: Удаление устаревшей записи для MAC-адреса - " . $queue2ndpart)
remove $z
}
}
}
# DHCP Lease to Simple Queues
# 2014 Lonnie Mendez (lmendez@anvilcom.com)
#
# Mikrotik RouterOS v6.9
/ip dhcp-server lease
:foreach x in=[find] do={
# получаем переменные для дальнейшего использования
:local leaseaddr ([get $x address]."/32")
:local leasemacaddr [get $x mac-address]
:local leasehostname [get $x host-name]
:local leasename [get $x comment]
:local queuecomment
:local leaseinqueue false
/queue simple
:foreach y in=[find] do={
# получаем переменные для дальнейшего использования
:local queuetargetaddr [get $y target]
:set queuecomment [get $y comment]
# выделяем из поля комментария информацию (MAC, Hostname)
:local queuemac [:pick $queuecomment 4 21]
:local queuehostname [:pick $queuecomment 22 [:len $queuecomment]]
# Если MAC из аренды совпадает с MAC из очереди, то обновляем запись в очереди
:if ($queuemac = $leasemacaddr) do={
# формируем поле комментария
:set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)
set $y target=$leaseaddr comment=$queuecomment
:if ($leasename != "") do= {
set $y name=($leasename . " (" . $leasemacaddr . ")")
} else= {
:if ($leasehostname != "") do= {
set $y name=($leasehostname . " (" . $leasemacaddr . ")")
} else= {
set $y name=$leasemacaddr
}
}
:set leaseinqueue true
} else= {
# если IP для этой аренды существует, но MAC другой, обновляем MAC/hostname и сбрасываем счетчики
:if ($queuetargetaddr = $leaseaddr) do={
# формируем поле комментария
:set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)
set $y comment=$queuecomment
reset-counters $y
:if ($leasename != "") do= {
set $y name=($leasename . " (" . $leasemacaddr . ")")
} else= {
:if ($leasehostname != "") do= {
set $y name=($leasehostname . " (" . $leasemacaddr . ")")
} else= {
set $y name=$leasemacaddr
}
}
:set leaseinqueue true
}
}
}
# Если записи не было, добавляем новую для этой аренды
:if ($leaseinqueue = false) do={
# формируем поле комментария
:set queuecomment ("dtq," . $leasemacaddr . "," . $leasehostname)
# формируем команду
:local cmd "/queue simple add target=$leaseaddr max-limit=100M/100M comment=$queuecomment"
:if ($leasename != "") do={
:set cmd "$cmd name=\"$leasename ($leasemacaddr)\""
} else= {
:if ($leasehostname != "") do={
:set cmd "$cmd name=\"$leasehostname ($leasemacaddr)\""
} else= {
:set cmd "$cmd name=\"$leasemacaddr\""
}
}
:execute $cmd
}
}
# Очистка - удаляем динамические записи, которых больше нет в таблице аренды
/queue simple
:foreach z in=[find] do={
:local queuecomment [get $z comment]
:local queue1stpart [:pick $queuecomment 0 3]
:local queue2ndpart [:pick $queuecomment 4 21]
:if ($queue1stpart = "dtq") do={
:if ([/ip dhcp-server lease find mac-address=$queue2ndpart] = "") do={
:log info ("DTQ: Удаление устаревшей записи для MAC-адреса - " . $queue2ndpart)
remove $z
}
}
}
