Яндекс DNS API – для домашнего сервера

Скрипт для автоматической настройки A записи на DNS сервере при динамическом IP адресе.

Решил перетащить хостинг домой, т.к. ферма “манит” и постоянно включена, заодно ушел от регистратора rucenter. Теперь всего 87 р в год за доменное имя:-)))
Для домена, в DNS сервере обязательно должна быть А запись с реальным IP.

Проблем в том, что IP у меня динамический.
Нашел решение задачи http://www.lissyara.su/?id=2242
Слава, Привет! Поднял виртуалку с сайтом, но проверку динамического адреса решил делать на хостовой машине, она на Windows 7.

Сохранить скрипт в файл с расширением *.vbs и настроить его выполнение в планировщике.

 

Option Explicit
Const strAddr = “c:\Temp\ipaddr.txt”
Const strLog= “c:\Temp\log.log”
Dim objHTTP, FSO, strHTML, IPnew, colsym, File, IPsave, FLog
Set FSO = CreateObject(“Scripting.FileSystemObject”)
Set objHTTP = CreateObject( “WinHttp.WinHttpRequest.5.1” )
On Error Resume Next
‘отправляем запрос узнать свой ip адрес
objHTTP.Open “GET”, “http://ipv4.internet.yandex.net/internet/api/v0/ip”, False
objHTTP.Send
if Err.Number0 then
MsgBox Err.Number &chr(13)+Err.Description
Set FLog = FSO.OpenTextFile(strLog, 8, True)
Flog.WriteLine “Не удалось узнать IP адрес с ipv4.internet.yandex.net.” & ” Error: “&chr(32)&Err.Number&chr(32)&Err.Description
FLog.Close
Wscript.Quit
end if
‘WScript.Echo objHTTP.Status
‘Обрабатываем ответ – Убираем кавычки перед и после полученного ip адреса
colsym = Len(objHTTP.ResponseText)
IPnew = Mid(objHTTP.ResponseText, 1,colsym-1)
colsym=Len(IPnew)
IPnew = Mid(IPnew, colsym-(colsym-2), colsym)
‘WScript.Echo IPnew
‘Файл c:\Temp\ipaddr.txt должен существовать и быть не пустым, считываем значения IP адреса из файла
Set File = FSO.OpenTextFile(strAddr,1)
IPsave = File.ReadLine
File.Close
‘Если значение IP адреса в файле отличается от полученного в результате запроса на http://ipv4.internet.yandex.net/internet/api/v0/ip то записываем новый ip в DNS и в файл
If IPsave<>IPnew then
objHTTP.Open “PUT”, “https://pddimp.yandex.ru/nsapi/edit_a_record.xml?”, False
objHTTP.SetRequestHeader “Content-Type”,”application/x-www-form-urlencoded”
objHTTP.Send “token=de166d3dc4ec3f9d8619e1fcf75ad9d7e8a437a77b&domain=sqladmin.ru&record_id=408141&content=”&IPnew
if Err.Number<>0 then
MsgBox Err.Number &chr(13)+Err.Description
Set FLog = FSO.OpenTextFile(strLog, 8, True)
Flog.WriteLine “Не удалось записать новый IP адрес в DNS” & ” Error: “&chr(32)&Err.Number&chr(32)&Err.Description
FLog.Close
Wscript.Quit
end if
Set File = FSO.OpenTextFile(strAddr, 2)
File.Write IPnew
File.Close
‘WScript.Echo (objHTTP.responseText)
‘else WScript.Echo “IP не изменен”
end if

Исправление 2 августа 2021

яндекс уже давно перешел на другой api. Пров сегодня сменил мне ip адрес, пришлось вспоминать что я делал…

Получить pddtoken –  https://pddimp.yandex.ru/api2/admin/get_token

узнать record_id  – https://pddimp.yandex.ru/api2/admin/dns/list?token=ваш_pddtoken&domain=ваш_домен

ищем по поиску ip адрес, рядом будет его record_id.

в скрипте все остается тоже, кроме замены ip адреса в DNS через API:

objHTTP.Open “POST”, “https://pddimp.yandex.ru/api2/admin/dns/edit”, False

objHTTP.SetRequestHeader “Content-Type”,”application/x-www-form-urlencoded”

objHTTP.SetRequestHeader “PddToken”,”ваш pddtoken”

objHTTP.Send “domain=ваш_сайт&record_id=ваш_id&content=”&IPnew