Dynamic DNS на Яндексе
Добавлено: 28 июл 2021, 17:34
Доброе время суток!
Мой домен делегируется на яндекс и так как у меня ip по dhcp стал искать информацию по изменения ip запросом в dns яндекса.
За основу была взята статья Dynamic DNS на Яндексе силами MikroTik RouterOS
Яндек перестал поддерживать get запросы, скрипт был переделан на post запросы.
Получение ID записи
Получение токена
из скрипта было убрано
так как result с пустыми значениями, почему не понятно но по факту скрипт отрабатывает корректно.
Мой домен делегируется на яндекс и так как у меня ip по dhcp стал искать информацию по изменения ip запросом в dns яндекса.
За основу была взята статья Dynamic DNS на Яндексе силами MikroTik RouterOS
Яндек перестал поддерживать get запросы, скрипт был переделан на post запросы.
Получение ID записи
Получение токена
Код: Выделить всё
:local apiToken ".........";
:local recordId ".......";
:local ttl "........";
:local domain "...........";
:local interfaceName "......";
:local currentInterfaceIp [ :tostr [ /ip address get [/ip address find interface=$interfaceName] address ] ];
:set currentInterfaceIp [ :pick $currentInterfaceIp 0 [ :find $currentInterfaceIp "/" ] ];
:if ([ :len $currentInterfaceIp ] = 0 ) do= {
:log info "[Ya.DNS] No IP address is assigned to the interface '$interfaceName'.";
:error "[Ya.DNS] No IP address is assigned to the interface '$interfaceName'.";
}
:local subdomain [ :pick $domain 0 [ :find $domain "." ] ];
:local externalIp [ /resolve $domain ];
:if ($currentInterfaceIp != $externalIp) do={
:put "[Ya.DNS] IP $externalIp changed to $currentInterfaceIp";
} else={
:error "[Ya.DNS] IP is not changed";
}
:local result
[/tool fetch http-method=post http-header-field="PddToken: $apiToken" http-data="domain=$domain&record_id=$recordId&ttl=$ttl&content=$currentInterfaceIp" url="https://pddimp.yandex.ru/api2/admin/dns/edit" as-value output=user ];
Код: Выделить всё
:local data ($result->"data");
:local error [ :pick $data ([ :find $data "" ] + 7) [ :find $data "" ] ];
:put $error;
:if ($error != "ok") do={
:log warning "[Ya.DNS] Unable to update record $recordId ($error)";
:error "[Ya.DNS] Unable to update record $recordId ($error)";
}
:log info "[Ya.DNS] Successfuly updated A record $recordId ($currentInterfaceIp)";