DDNS использую довольно давно, сначала был доступ к бесплатному от D-Link, потом попробовал API Яндекс. Оба устраивали, но Яндекс привлёк тем, что позволяет использовать своё доменное имя. Это удобно и более привлекательно, чем что-то за пределами РФ, на мой взгляд.
В общем постараюсь обойтись без длинного предисловия. О DDNS можно узнать как в Wikipedia, так и из статей Хабра.
Свой скрипт я написал, прочитав вот эту статью. В ней автор написал этот скрипт на Python, в котором я не силён, и не больно-то хотелось, да простят меня поклонники этого довольно популярного языка. Поэтому решил написать на том, что у любого линуксоида по-умолчанию под рукой. А именно на BASH. В моём скрипте всё то же самое.
Итак, приступим
Для простоты и понятности я создал файл, и назвал его ya-ddns. Скопировав в него код из вышеупомянутой статьи и построчно его переписав на BASH.
#!/bin/bash
LAST_IP_FILE='ip.txt' # Файл, в котором храниться последний прописанный IP
GET_IP_URL='https://myexternalip.com/raw' # адрес, сообщающий нам IP
DOMAIN='tvoy.domen' # Домен, записи DNS которого я редактирую
SUBDOMAIN='poddomen' # Поддомен, для которого меняем IP
TTL='14400' # Время жизни DNS-записи в секундах.
RECORD_ID='000000' # Номер записи будет известен после добавления первой записи с помощью этого скрипта.
TOKEN='KAKOYTOOCHENDLINNYYNABORBUKAV' # Токен от яндекса
# Токен получить у Яндекса: https://pddimp.yandex.ru/api2/admin/get_token
ip=$(curl "$GET_IP_URL")
echo "$ip"
last_ip=$(cat "$LAST_IP_FILE")
# Для начала надо добавить запись на сервер. Можно сделать это
# и через веб-морду яндекса, но тогда сложнее узнать нужные
# параметры Для добавления записи надо запустить скрипт с
# параметром «add»
if [[ $1 == "add" ]]; then
post=$(curl -H "PddToken: $TOKEN" -d "domain=$DOMAIN&type=A&subdomain=$SUBDOMAIN&ttl=$TTL&content=$ip" "https://pddimp.yandex.ru/api2/admin/dns/add")
# Отправили запрос на сервер Яндекса
answer=$(echo "$post" | grep -i ""success": "ok"")
# Если ответ положительный, получаем на экран параметры записи на сервере и прописываем в скрипт.
if [[ $answer != "" ]]; then
echo -e "\e[32mGOOD! Added new record!\n\e[34m$post\e[0m"
else
echo -e "\e[33m$post\e[0m"
fi
exit
fi
# После того, как запись добавлена и необходимые параметры
# заменены в этом скрипте, достаточно просто запустить скрипт
# без параметров.
if [[ "$ip" != "$last_ip" ]]; then
post=$(curl -H "PddToken: $TOKEN" -d "domain=$DOMAIN&record_id=$RECORD_ID&subdomain=$SUBDOMAIN&ttl=$TTL&content=$ip" "https://pddimp.yandex.ru/api2/admin/dns/edit")
answer=$(echo "$post" | grep -i ""success": "ok"")
if [[ $answer != "" ]]; then
echo -e "\e[32mGOOD!\e[0m"
# Если видим GOOD!, значит запись изменена. Запишем IP в файл.
echo "$ip" > "$last_ip"
else
echo -e "\e[33m$post\e[0m"
# Если не видим GOOD!, значит запись не удалось изменить, и IP не обновлён.
fi
else
echo -e "\e[33mActual IP\e[0m"
# Если видим Actual IP, значит IP не менялся и нечего дёргать яндекс без толку.
fi
Вот, собственно, и всё. Вы можете скопировать код отсюда, либо скачать его здесь.
Так же, как и автор статьи, которая помогла мне, надеюсь кому-то пригодится.
Использовались:
Автор: Наташа