Данная задача является узкоспециализированной и может возникнуть для сетей, в которых имеется необходимость автоматического внесения адресов хостов в DNS MikroTik, IP-адреса которых соответствуют полученным от DHCP сервера MikroTik. В доменах Microsoft Windows такое действие осуществляется автоматически и, наверное, эти лавры славы долгое время не давали покоя.
Решение данной задачи возможна двумя способами. Первый из них заключается в запуске определённого скрипта с указанной периодичностью, а второй – по команде самого сервера DHCP MikroTik.
Автоматическая регистрация имён хостов в DNS на MikroTik по команде планировщика
Перейдите в System – Scripts и в поле "Source" впишите текст скрипта:
:local topdomain;
:set topdomain "vot";
:local ttl;
:set ttl "00:14:29";
:local hostname;
:local hostip;
:local free;
/ip dns static;
:foreach a in=[find] do={
:if ([get $a ttl] = $ttl) do={
:put ("Removing: " . [get $a name] . " : " . [get $a address]);
remove $a;
}
}
/ip dhcp-server lease ;
:foreach i in=[find] do={
/ip dhcp-server lease ;
:if ([:len [get $i host-name]] > 0) do={
:set free "true";
:set hostname ([get $i host-name] . "." . $topdomain);
:set hostip [get $i address];
/ip dns static ;
:foreach di in [find] do={
:if ([get $di name] = $hostname) do={
:set free "false";
:put ("Not adding already existing entry: " . $hostname);
}
}
:if ($free = true) do={
:put ("Adding: " . $hostname . " : " . $hostip ) ;
/ip dns static add name=$hostname address=$hostip ttl=$ttl;
}
}
}
По умолчанию, предлагается имя скрипта script1, но ему можно дать и своё наименование, например autoreg.
:set topdomain "vot"; – здесь vot является именем Вашего локального домена, который выдаётся параметром DHCP.
:set ttl "00:14:29"; – здесь 00:14:29 является временем жизни записи хоста в DNS, по истечении которого данная запись должна быть обновлена. TTL указано в формате "часы:минуты:секунды". Обратите внимание, что статические записи в DNS MikroTik также имеют свой TTL, который по умолчанию соответствует одним суткам.
Сам скрипт будет просматривать список арендованных IP-адресов и вносить в список статических записей DNS полные имена хостов (имя.домен), соответствующих полученным ими IP-адресам c указанием их TTL. При каждом последующем запуске полученные таким образом предыдущие значения будут автоматичечки удаляться. Нетронутыми останутся только записи, внесённые в DNS вручную.
Теперь логично было бы внести в планировщик заданий запуск этого скрипта с периодом, не превышающим значение TTL.
Перейдите в "System – Sheduler", создайте новую задачу и в поле "On Event" впишите /system script run autoreg (вместо autoreg укажите назначенное Вами имя скрипту авторегистрации хостов в DNS).
Start Date: – это дата, начиная с которой планировщик будет запускать назначенное задание.
Start Time: – это время, начиная с которого планировщик осуществит первый запуск назначенного задания.
В поле StartTime вместо времени можно указать Startup и скрипт будет запускаться каждый раз при перезагрузке или включении MikroTik.
Interval: – это время, по истечении которого задание будет запущено снова, т.е. интервал между запусками задания. Вместо 00:00:00 укажите свои часы:минуты:секунды.
Значения TTL в тексте скрипта, а также Interval в планировщике заданий Вы определяете самостоятельно, исходя из потребностей Вашей ЛВС.
После первого запуска скрипта в логах MikroTik появляется запись
а в статических адресах сервера DNS MikroTik будут отображены добавленные хосты.
При последующих запусках, как было указано выше, эти записи будут удалены (static dns entry removed by admin) и взамен будут внесены хосты, срок аренды IP-адресов которых ещё не истёк (static dns entry added by admin).
Указанное в протоколах работы MikroTik "by admin" является указанием на то, что скрипт был запущен от имени пользователя MiroTik-а admin.
Запуски скрипта фиксируются счётчиками планировщика и самого скрипта.
Автоматическая регистрация имён хостов в DNS на MikroTik по команде сервера DHCP MikroTik
Указанный выше текст скрипта поместите в поле "Lease Script". Т.е. скрипт будет выполняться по событиям, связанным с арендами IP-адресов (добавление или удаление).
В этом случае в строке :set ttl "???"; вместо знаков вопроса целесообразно установить значение, совпадающее со значением Lease Time (см. рисунок выше).
После сохранения внесённых изменений при первом наступившем после этого событии аренды скрипт сработает в первый раз.
На рисунке выше показана часть протокола событий. При получении аренды от DHCP адреса 192.168.188.11 скрипт был запущен в первый раз и имена узлов, имеющих аренду адреса IP (4 шт.) были внесены в записи статических адресов сервера DNS.
После изъятия сервером DHCP IP-адресов, аренда которых не была продлена, и передаче этих адресов в свободный пул скрипт снова будет запущен и, по заложенному алгоритму, удалит все внесённые предыдущим запуском скрипта статические адреса узлов и внесёт в DNS IP-адреса тех узлов, аренда адресов которых ещё действует.
Огромная благодарность Waldemar Storch, без подсказки которого моих мозгов явно бы не хватило на то, чтобы разобраться в языке скриптов для MikroTik. Так что эта картинка уж точно про меня:
Те, кого интересует язык скриптов в MikroTik, могут обратиться к соответствующему разделу документации MikroTik.
Решение данной задачи возможна двумя способами. Первый из них заключается в запуске определённого скрипта с указанной периодичностью, а второй – по команде самого сервера DHCP MikroTik.
Автоматическая регистрация имён хостов в DNS на MikroTik по команде планировщика
Перейдите в System – Scripts и в поле "Source" впишите текст скрипта:
:local topdomain;
:set topdomain "vot";
:local ttl;
:set ttl "00:14:29";
:local hostname;
:local hostip;
:local free;
/ip dns static;
:foreach a in=[find] do={
:if ([get $a ttl] = $ttl) do={
:put ("Removing: " . [get $a name] . " : " . [get $a address]);
remove $a;
}
}
/ip dhcp-server lease ;
:foreach i in=[find] do={
/ip dhcp-server lease ;
:if ([:len [get $i host-name]] > 0) do={
:set free "true";
:set hostname ([get $i host-name] . "." . $topdomain);
:set hostip [get $i address];
/ip dns static ;
:foreach di in [find] do={
:if ([get $di name] = $hostname) do={
:set free "false";
:put ("Not adding already existing entry: " . $hostname);
}
}
:if ($free = true) do={
:put ("Adding: " . $hostname . " : " . $hostip ) ;
/ip dns static add name=$hostname address=$hostip ttl=$ttl;
}
}
}
По умолчанию, предлагается имя скрипта script1, но ему можно дать и своё наименование, например autoreg.
:set topdomain "vot"; – здесь vot является именем Вашего локального домена, который выдаётся параметром DHCP.
:set ttl "00:14:29"; – здесь 00:14:29 является временем жизни записи хоста в DNS, по истечении которого данная запись должна быть обновлена. TTL указано в формате "часы:минуты:секунды". Обратите внимание, что статические записи в DNS MikroTik также имеют свой TTL, который по умолчанию соответствует одним суткам.
Сам скрипт будет просматривать список арендованных IP-адресов и вносить в список статических записей DNS полные имена хостов (имя.домен), соответствующих полученным ими IP-адресам c указанием их TTL. При каждом последующем запуске полученные таким образом предыдущие значения будут автоматичечки удаляться. Нетронутыми останутся только записи, внесённые в DNS вручную.
Теперь логично было бы внести в планировщик заданий запуск этого скрипта с периодом, не превышающим значение TTL.
Перейдите в "System – Sheduler", создайте новую задачу и в поле "On Event" впишите /system script run autoreg (вместо autoreg укажите назначенное Вами имя скрипту авторегистрации хостов в DNS).
Start Date: – это дата, начиная с которой планировщик будет запускать назначенное задание.
Start Time: – это время, начиная с которого планировщик осуществит первый запуск назначенного задания.
В поле StartTime вместо времени можно указать Startup и скрипт будет запускаться каждый раз при перезагрузке или включении MikroTik.
Interval: – это время, по истечении которого задание будет запущено снова, т.е. интервал между запусками задания. Вместо 00:00:00 укажите свои часы:минуты:секунды.
Значения TTL в тексте скрипта, а также Interval в планировщике заданий Вы определяете самостоятельно, исходя из потребностей Вашей ЛВС.
После первого запуска скрипта в логах MikroTik появляется запись
а в статических адресах сервера DNS MikroTik будут отображены добавленные хосты.
При последующих запусках, как было указано выше, эти записи будут удалены (static dns entry removed by admin) и взамен будут внесены хосты, срок аренды IP-адресов которых ещё не истёк (static dns entry added by admin).
Указанное в протоколах работы MikroTik "by admin" является указанием на то, что скрипт был запущен от имени пользователя MiroTik-а admin.
Запуски скрипта фиксируются счётчиками планировщика и самого скрипта.
Автоматическая регистрация имён хостов в DNS на MikroTik по команде сервера DHCP MikroTik
Указанный выше текст скрипта поместите в поле "Lease Script". Т.е. скрипт будет выполняться по событиям, связанным с арендами IP-адресов (добавление или удаление).
В этом случае в строке :set ttl "???"; вместо знаков вопроса целесообразно установить значение, совпадающее со значением Lease Time (см. рисунок выше).
После сохранения внесённых изменений при первом наступившем после этого событии аренды скрипт сработает в первый раз.
На рисунке выше показана часть протокола событий. При получении аренды от DHCP адреса 192.168.188.11 скрипт был запущен в первый раз и имена узлов, имеющих аренду адреса IP (4 шт.) были внесены в записи статических адресов сервера DNS.
После изъятия сервером DHCP IP-адресов, аренда которых не была продлена, и передаче этих адресов в свободный пул скрипт снова будет запущен и, по заложенному алгоритму, удалит все внесённые предыдущим запуском скрипта статические адреса узлов и внесёт в DNS IP-адреса тех узлов, аренда адресов которых ещё действует.
Огромная благодарность Waldemar Storch, без подсказки которого моих мозгов явно бы не хватило на то, чтобы разобраться в языке скриптов для MikroTik. Так что эта картинка уж точно про меня:
Те, кого интересует язык скриптов в MikroTik, могут обратиться к соответствующему разделу документации MikroTik.
Здравствуйте. А можете сделать скрипт который бы запраишивал записи статик днс у другого микротика и добавлял к своим? Ну типа синхронизации? И можно ли туда жобавить записи вида _ldap._tcp.dc._msdcs.domain.lan
ОтветитьУдалитьНу, может быть, подойдёт что-то типа переадресации?
ОтветитьУдалитьhttps://14bytes.ru/conditional-dns-forwarding-mikrotik/