DDNS на beget.com

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Аватара пользователя
SinnerLike
Сообщения: 70
Зарегистрирован: 03 окт 2016, 08:13
Откуда: Когалым

Добрый день!
Помогите пожалуйста со скриптом для обновления DNS!?
API Beget: https://beget.com/ru/kb/api/funkczii-up ... ngerecords

Попробовал по аналогии для he.net, но не работает скрипт
Скрипт запускается в DHCP Client, для этого пауза в 10 секунд.

Код: Выделить всё

:delay 10;
:global laddress $"lease-address";
:local ddnshost "domen.ru";
:local login "userbeget";
:local pass "passapi";
:log info "Beget.COM updated started";
/tool fetch url="https://api.beget.com/api/dns/changeRecords?login=$login&passwd=$pass&input_format=json&output_format=json&input_data={"fqdn":"$ddnshost","records":{"A":[{"priority":10,"value":"$laddress"}],"TXT":[{"priority":10,"value":"v=spf1 redirect=_spf.yandex.net"}],"MX":[{"priority":10,"value":"mx.yandex.net"}]}}" mode=https keep-result=no;
:log info "Beget.COM updated finished";
Вижу проблему с кавычками, пробовал закодировать в urlencode, но все равно не получается.


Дома: hAP ac
На работе: Зоопарк.
Аватара пользователя
drpioneer
Сообщения: 142
Зарегистрирован: 30 май 2013, 10:20

Добрый день.

Попробуйте заэкранировать знак вопроса в строке с URL.
Т.е. вместо: ...changeRecords?login=...
попробуйте: ...changeRecords\?login=...


Аватара пользователя
SinnerLike
Сообщения: 70
Зарегистрирован: 03 окт 2016, 08:13
Откуда: Когалым

Не работает.
Если экранировать знак ?, строка не выполняется.
Если экранировать знак ? и закодировать в urlencode, то строка выполняется, но не отрабатывает. Если переменные заменить текстовым значением (логин, пароль, домен и IP), то скрипт работает. IP меняется. Но смысла в этом нету...


Дома: hAP ac
На работе: Зоопарк.
Deadly-enox
Сообщения: 1
Зарегистрирован: 26 окт 2022, 20:55

Код: Выделить всё

: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
Нужна, если нужно пробросить порты. Если не пользуетесь пробросом порта с определённого адреса, то можно стереть


Ответить