Автоматическое обновление Яндекс DNS со своего сервера (динамический IP) Ubunta (Обновлена 27.04.2022)

Обновил 27.04.2022 — т.к. в яндексе изменились ссылки на получение токенов для АПИ.

Всем привет, сегодня с толкнулся с проблемой, что у меня дома динамический IP адрес и я не могу на домашнем компе публиковать сайт в интернете ( я могу, но при смене IP-адреса сайт выпадает, т.к. DNS адрес, а именно А-записи имеют другой IP).

Полазив в интернете я нашел скрипт пользователя АРТЕМА, а так же небольшую инструкцию как его настраивать, из которой нифига не понятно. В итоге решил опубликовать более подробно, т.к. сам делал для себя.

Итак, у меня есть: 1) Свой сервер с сайтом к примеру 9notes.ru

2) Свой Аккаунт Яндекс и замечательный сервис Почта для домена  (сейчас там 360, но вы выбираете использовать бесплатно), там у вас уже должен быть создан домен и подтвержден ( подтверждение занимает примерно 1-2 часа при делегировании домена на сервисы яндекс)

3) На этом все, остальное зависит от вас!

Инструкция пошагово:

  1. Если вы делегировали свой домен на яндекс почту и подтвердили его, переходите по ссылке: и получайте свой токен: https://pddimp.yandex.ru/api2/admin/get_token , в противном случае вам стоит просто ввести в поиск «как добавить яндекс почту к домену» и выполнить все по порядку.
  2. В открывшемся окне вводим капчу и адрес сайта и жмем «Get Token»
получение токена Яндекс (фото старое но смысл тот же)

3. Теперь надо получить ID полей, которые будем менять, тут все просто берите мою ссылку за основу и меняйте в ней токен и название сайта, затем вставляйте ссылку в браузер

https://pddimp.yandex.ru/api2/admin/dns/list?token=ВАШ-ТОКЕН&domain=9notes.ru

После вы получите информацию как на фото, в ней берем только Id как на скрине ниже:

4. Копируем скрипт ниже и вставляем в крон на вашем сервере ( можно создать отдельный файл и запустить через крон, тут делайте как вам удобнее), главное не забудьте поменять токен и ID записи на нужные вам. (так же могут быть заменены не только А-записи, но и другие записи (ниже пример с А-записями).

Скрипт:

#!/bin/sh
# путь к Яндекс.API
api_url=https://pddimp.yandex.ru/api2
# идентификатор, нужен для доступа к api.
# как получить: https://tech.yandex.ru/pdd/doc/concepts/access-docpage/#access-admin
token=ВАШ-ТОКЕН
# домен которым управляем
domain=9notes.ru
# поддомены и id записей
subdomain_1=ВАШ-ПОДДОМЕН (пример: просто пишите  "@"  и все? можно взять с пункта 3 поле subdomain )
record_id_1=ВАШ-ID
subdomain_2=ВАШ-ПОДДОМЕН (пример: просто пишите  "www"  и все )
record_id_2=ВАШ-ID
# TTL
ttl=1800
# временный файл
cache_file=/tmp/ya_dns_ip
if test -f $cache_file
then
    cache_ip=$(cat $cache_file)
fi
# получаем ip
current_ip=$(wget -q -O - checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//')
# основные действия: если ip обновился, то внести новые изменения в DNS
if [ "$current_ip" != "$cache_ip" ]
then
    echo "Update Yandex DNS with" $current_ip
    echo `date` "Updating with IP" $current_ip >> /tmp/yandex-dns-update.log
# обновление DNS записей
curl -k -H 'PddToken: '$token'' -d 'domain='$domain'&record_id='$record_id_1'&subdomain='$subdomain_1'&ttl='$ttl'&content='$current_ip'' ''$api_url'/admin/dns/edit'
curl -k -H 'PddToken: '$token'' -d 'domain='$domain'&record_id='$record_id_2'&subdomain='$subdomain_2'&ttl='$ttl'&content='$current_ip'' ''$api_url'/admin/dns/edit'
rm -f $cache_file
echo $current_ip > $cache_file
fi
# eof

5. Проверяем все ли правильно заполнили и запускаем тестовую проверку, заранее изменив ip адрес в А-записи. Если все сработало, то ставим повторять каждые 10 минут. На этом все.


Надеюсь статья была полезна! Если есть вопросы пишите в комментах! Хорошего дня!