Сервис DDNS от Яндекс, теперь и на BASH

в 22:07, , рубрики: DNS, nix, Яндекс API

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

Вот, собственно, и всё. Вы можете скопировать код отсюда, либо скачать его здесь.

Так же, как и автор статьи, которая помогла мне, надеюсь кому-то пригодится.

Использовались:

Статья
Яндекс API

Автор: Наташа

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js