Код: Выделить всё
:local begetuser "логинбегет"
:local begetpass "парольбегет"
:local begethost "днсхоса.ру"
:local inetinterface "имяинтерфейса"
:global previousIP
:if ([/interface get $inetinterface value-name=running]) do={
# Get the current IP on the interface
:local currentIP [/ip address get [find interface="$inetinterface" disabled=no] address]
# Strip the net mask off the IP address
:for i from=( [:len $currentIP] - 1) to=0 do={
:if ( [:pick $currentIP $i] = "/") do={
:set $currentIP [:pick $currentIP 0 [:find $currentIP "/"]]
}
}
:if ($currentIP != $previousIP) do={
:log info "Beget: Current IP $currentIP is not equal to previous IP, update needed"
:set previousIP $currentIP
:local begethostarray
:set begethostarray [:toarray $begethost]
:foreach host in=$begethostarray do={
:log info "Beget: Sending update for $host"
/tool fetch url="https://api.beget.com/api/dns/changeRecords\?login=$begetuser&passwd=$begetpass&input_format=json&output_format=json&input_data=%7B%22fqdn%22%3A%22$begethost%22%2C%22records%22%3A%7B%22A%22%3A%5B%7B%22priority%22%3A10%2C%22value%22%3A%22$currentIP%22%7D%5D%2C%22TXT%22%3A%5B%7B%22priority%22%3A10%2C%22value%22%3A%22v%3Dspf1%20redirect%3Dbeget.com%22%7D%5D%2C%22MX%22%3A%5B%7B%22priority%22%3A10%2C%22value%22%3A%22mx1.beget.com.%22%7D%2C%7B%22priority%22%3A20%2C%22value%22%3A%22mx2.beget.com.%22%7D%5D%7D%7D" mode=https keep-result=no;
/ip firewall nat set 0 dst-address=$currentIP
:log info "Beget: Host $host updated on Beget with IP $currentIP"
}
} else={
:log info "Beget: Previous IP $previousIP is equal to current IP, no update needed"
}
} else={
:log info "Beget: $inetinterface is not currently running, so therefore will not update."
}
Лучше поздно, чем никогда, накидал за 20 минут. Если декодировать это
Код: Выделить всё
/tool fetch url="https://api.beget.com/api/dns/changeRecords\?login=$begetuser&passwd=$begetpass&input_format=json&output_format=json&input_data=%7B%22fqdn%22%3A%22$begethost%22%2C%22records%22%3A%7B%22A%22%3A%5B%7B%22priority%22%3A10%2C%22value%22%3A%22$currentIP%22%7D%5D%2C%22TXT%22%3A%5B%7B%22priority%22%3A10%2C%22value%22%3A%22v%3Dspf1%20redirect%3Dbeget.com%22%7D%5D%2C%22MX%22%3A%5B%7B%22priority%22%3A10%2C%22value%22%3A%22mx1.beget.com.%22%7D%2C%7B%22priority%22%3A20%2C%22value%22%3A%22mx2.beget.com.%22%7D%5D%7D%7D" mode=https keep-result=no;
то:
Код: Выделить всё
{"fqdn":"$begethost","records":{"A":[{"priority":10,"value":"$currentIP"}],"TXT":[{"priority":10,"value":"v=spf1 redirect=beget.com"}],"MX":[{"priority":10,"value":"mx1.beget.com."},{"priority":20,"value":"mx2.beget.com."}]}}
В двух словах: Если айпи менялся, то лезем на сайт бегет, пишем лог. Если не менялся, то просто лог, мол не меняли. У меня задача работает каждые 30 сек, но это уже на усмотрение
Пример заполнения:
:local begetuser "Pasha" (логин)
:local begetpass "iloveduck" (пасс)
:local begethost "test.iloveduck.com" (Домен)
:local inetinterface "myInternet" (Имя интерфейса из микротика)
Строчка
Код: Выделить всё
/ip firewall nat set 0 dst-address=$currentIP
Нужна, если нужно пробросить порты. Если не пользуетесь пробросом порта с определённого адреса, то можно стереть