Надеюсь что данным решением смогу кому-то помочь. Ну а если нет, тогда просто расскажу как можно организовать альтернативу сервисам DynDNS собственноручно и бесплатно.
Приступим
Я знаю что есть множество сервисов предоставляющих свои услуги бесплатно. Но!
1. У некоторых из них есть какие-либо определённые условия по использованию.
2. Хотелось написать что-то своё. Так как очень необходим опыт по написанию BASH и PHP скриптов.
3. Своё всегда приятнее
Так как я использую MDM, то конечно хотелось бы заходить на систему используя домен и не переживая за то, что у меня измениться IP. А так как он у меня динамический, то понятное дело хотя бы раз в 1 неделю он будет обновляться. Возможность заказать статический IP есть, но платить за такое не очень хочется, потому-что не резонно. Я лично не понимаю почему я должен платить за то, что мне ранее предоставлялось бесплатно.
У Яндекса появились, по вей видимости давно, API для изменения записей для доменов делегированных на их NS. Но к сожалению, я об этом узнал буквально недавно.
Чем нам это может быть полезно? Тем что мы, написав небольшой скрипт, можем автоматом отправлять запросы на изменение IP для домена, и таким образом не переживать о том, что в какой-то момент мы не сможем попасть туда, куда нам необходимо.
Для реализации этого, нам понадобиться домен и сервер который будет производить отправку запроса на изменение, то есть сервер на котором мы и будем использовать скрипт.
В случае если у Вас уже есть домен, Вам проще. Тем у кого домена нет, для этих целей можно зарегистрировать бесплатный в зоне: "pp.ua" - тыц. Я себе регистрировал у Ник-ов .
ИзображениеПоказать
Код: Выделить всё
dns1.yandex.net
dns2.yandex.net
ИзображениеПоказать
Далее необходимо получить ID записи, которую необходимо изменять, а так же токен. Хочу заметить, что все процедуры необходимо выполнять залогинившись в систему Яндекса.
Для получения токена необходимо перейти по ссылке: https://pddimp.yandex.ru/api2/admin/get_token ввести капчу и имя домена который направляли на NS Яндекса и нажать: "Get token". После этого Вам будет отображена длинная строка содержащая число-буквенное значение. Это и есть токен. Его необходимо куда-то сохранить, так как в дальнейшем будем его использовать.
Для получения ID записи необходимо выполнить в командной строке:
Код: Выделить всё
[root@smart ~]# curl -H 'PddToken: 123456789ABCDEF0000000000000000000000000000000000000' 'https://pddimp.yandex.ru/api2/admin/dns/list?domain=domain.pp.ua'
В ответ Вы получите просто чудовищную кучу информации, в которой нетрудно запутаться. Но! Если разобраться, то всё на много проще! Символы: "}, {" отделяют одну запись от другой, и если Вы расставите все записи с новой строки, Вы поймете на сколько всё просто. В моём случае, мне необходимы ID двух записей. Для "@" - то есть главной записи, и для субдомена: "www".
Мои записи выглядят так:
Код: Выделить всё
{"content": "ip_server, "domain": "domain.pp.ua", "fqdn": "domain.pp.ua", "priority": "", "ttl": 3600, "record_id": 12345678, "subdomain": "@", "type": "A"}
{"content": "ip_server", "domain": "domain.pp.ua", "fqdn": "www.domain.pp.ua", "priority": "", "ttl": 3600, "record_id": 12345679, "subdomain": "www", "type": "A"}
"ip_server" - IP адрес. Как раз тот который мы и будем изменять.
"domain.pp.ua" - Сам домен на котором будут производиться изменения.
"type" - Тип записи. В нашем случае, А запись, так как именно она отвечает за то, откуда будет открываться домен.
"record_id" - ID нашей записи. Именно то, что нам и нужно.
После того как мы получили всю необходимую информацию, осталось написать сам скрипт...
Код моего скрипта таков:
Код рекомендую брать с github-а. Здесь для примера.Показать
Код: Выделить всё
#!/bin/bash
source /etc/ddnsy/ddnsy.conf #Подключаем конфиг
#Задаём переменные
IP=`curl -s $site` #Получаем значение текущего IP
OLD_IP=`cat /etc/ddnsy/old-ip` #Получаем значение старого IP из файла
rm $last_log #Чистим ласт лог
exec > $last_log #Пишем в ласт лог вывод скрипта
date #Вывод даты для логирования
if [[ "$IP" != "$OLD_IP" ]] #Проверяем одинаковые IP или нет
then #Если не одинаковые выполняем:
echo "Получен новый IP адрес"
echo "Старый IP: $OLD_IP" #Выводим старый IP
echo "Новый IP: $IP" #Выводим новый IP
echo "Записываю новый IP в файл"
echo "$IP" > /etc/ddnsy/old-ip #Изменение старого IP в файле
echo "Вношу новый IP на DNSы"
curl -H "PddToken: $token" -d "domain=$domain&record_id=$id_record_a&ttl=$ttl&content=$IP" "$y_address" #Изменяем главную А запись на DNS
curl -H "PddToken: $token" -d "domain=$domain&record_id=$id_additional_record&ttl=$ttl&content=$IP" "$y_address" #Изменяем www А запись на DNS
echo "Операция завершена"
else # Если одиноковые выполняем:
echo "IP адрес не изменился"
fi #Выходим из условия
echo "--------------------" >> $log #Запись в файл прочерков, сделал для того чтоб отделить одну запись от другой
cat $last_log >> $log #Переносим инфу из ласт лога в общий лог без затирания старой информации
echo "--------------------" >> $log #Те же прочерки
Код рекомендую брать с github-а. Здесь для примера.Показать
Код: Выделить всё
y_address="https://pddimp.yandex.ru/api2/admin/dns/edit" #Адрес API Яндекса на который будет отправляться запрос на изменение IP.
domain="domain.pp.ua" #Сам домен.
token="123456789ABCDEF0000000000000000000000000000000000000" #Токен. Необходим как защита.
id_record_a="23589279" #ID записи которую необходимо отредактировать.
id_additional_record="23589280" #Так как я меняю IP на двух записях, я добавил ещё один ID.
ttl="3600" #TTL - это у нас время жизни записи.
site="http://checkip.soluslabs.com" #URL сайта на котором скрипт забирает IP который сейчас установлен.
log="/var/log/ddnsy/main.log" #Путь к лог файлу
last_log="/var/log/ddnsy/main.log.last" #Путь к ласт лог файлу
После написания скрипта, я дал ему права на выполнение
Код: Выделить всё
[root@smart ~]# chmod +x /etc/ddnsy/ddnsy.sh
Код: Выделить всё
[root@smart ~]# crontab -l
0 */1 * * * /etc/ddnsy/ddnsy.sh
Будьте внимательны! Все действия производились в Linux системе. Для Windows этот скрипт пока не подходит. Но!
1. Планирую написать этот же скрипт на PHP для того что бы его можно было использовать на Windows платформе.
2. В случае необходимости, могу быстро набросать софт на VisualBasic, который выполнял бы те же функции но был ещё и с GUI.
3. Так же хочу попробовать написать APP для MDM что бы все было в самой системе.
4. И ещё есть идея повторить данный скрипт для Ардуино. Думаю тоже будет полезно.
На данный момент, добавить больше нечего. В случае если у Вас появятся какие либо дополнительные вопросы, всегда буду рад помочь.
Сам скрпит и конфиг файл, я расположил на github-е.
В случае необходимости, Вы всегда сможете найти новую его версию тут: DynDNS Yandex
Скрипт успешно используется с ~15.11.2014 и не разу ещё не подвёл. Когда бы я не зашёл на свой домен, я всегда попадаю на свою MDM.
А пока у меня всё. Всем Алису(добра)