Яндекс 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