Rose debug info
---------------

Бесплатный аналог dyndns и no-ip используя Яндекс DNS.

Статья более не актуальна. Яндекс всех поголовно переводит на Яндекс.Коннект. В API Коннекта на данный момент отсутствует возможность управлять DNS-записями. API pdd.yandex уже не работает.
Можно использовать api Telegram для получения динамических ip. Инструкция здесь.

Я давно пользовался услугами dyndns для подключения из вне к домашней файлопомойке-торрентокачалке на фряхе, у которой динамический ip от провайдера. Хотя уже давно у dyndns эта услуга платная для вновь зарегистрировавшихся пользователей, но я пользовался бесплатно, т.к зарегистрировался ещё до того как они стали за это просить денег. Но на днях мне пришло письмо что они не могут больше предоставлять эту услугу мне бесплатно и со следующего месяца я должен буду за неё платить. Меня это не устроило и я стал искать выход из текущего положения.

Т. к. домены у меня делегированы на Яндекс DNS я стал читать мануалы для их API и выход был найден. Расскажу о нём ниже.

Чтобы использовать яндекс api нам нужно получить токен. Получить его довольно просто, в браузере вводим.

https://pddimp.yandex.ru/get_token.xml?domain_name=domen.ru

Где domen.ru — ваш домен делегированный на яндекс. Вводим капчу и в выводе ищем:

token="XXXXXX"

В кавычках будет ваш токен. Копируем его куда-нибудь, он нам потребуется чуть позже.
Теперь нам нужно добавить к нашему домену сабдомен, который будет ссылаться на машину с динамическим ip. Переходим на https://pdd.yandex.ru, выбираем домен и кликаем «Редактор DNS» там добавляем А-запись для домена:

В поле «Хост» вводите сабдомен, а в поле «Значение записи» пишете любой ip(в последствии он будет меняться, когда будет изменятся ip вашей тачки).

Теперь нам нужно получить id нашей записи. Для этого в браузере вводим:

https://pddimp.yandex.ru/nsapi/get_domain_records.xml?token=XXXXXX&domain=domen.ru

Где ХХХХХХ-ваш токен, а domen.ru — ваш домен делегированный на яндекс.

В выводе ищем строку с нашей записью myhome.domen.ru и в этой строке находим:

id="1234567"

В кавычках id записи, так же копируем его куда-нибудь.

Теперь пишем скрипт на тачке на которой динамический ip. Скрипт будет проверять внешний ip тачки раз в пол часа и если он изменился, то будет изменять А-запись на Яндекс DNS.

# ee /usr/local/bin/dyndns.sh

Содержание скрипта:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin; export PATH
DOMEN="domen.ru" # ваш домен делегированный на яндекс
SUB=myhome # сабдомен
TOKEN=XXXXXX # токен
RECID=1234567 # id записи
while true; do
IP='curl -s http://ip.anikin.pw/'
YAIP=`host myhome.domen.ru dns1.yandex.ru | grep has | awk '{print $4}'` # замените myhome.domen.ru на ваш сабдомен
if [ $IP != $YAIP ]
then
curl -s "https://pddimp.yandex.ru/nsapi/edit_a_record.xml?token=$TOKEN&domain=$DOMEN&subdomain=$SUB&record_id=$RECID&content=$IP&ttl=1800"
fi
sleep 1800; done;

Значения переменных измените в соответствии с комментариями.

Делаем скрипт исполняемым:

# chmod +x /usr/local/bin/dyndns.sh

И добавляем соответствующую запись в крон:

# crontab -e

@reboot /usr/local/bin/dyndns.sh

Всё, теперь после перезагрузки скрипт будет автоматически запускаться. Перезагружаемся или запускаем скрипт вручную и проверяем на https://pdd.yandex.ru изменилось ли значение записи для нашего сабдомена.

P.S. Чтобы было совсем все бесплатно, можно не покупать домен а использовать бесплатный домен в зоне .tk. Получить его можно на сайте www.dot.tk

Поделиться
Отправить
2014   api   dyndns   pdd.yandex.ru
28 комментариев
Инициатор 2014

http://dns-ip.ru/Home/DynDns юзаю эту штуку вроде все устраивает

Петр Аникин 2014

Эта штука только под винду, если я правильно понял. Под юникс подобные ОС её нет.

Дмитрий Алексеев 2015

Пётр, помогите советом, пожалуйста :-)
Настроил всё по Вашей инструкции, получил токен\id, создал скрипт dyndns.sh, при запуске получаю ошибку:
./dyndns.sh: 10: [: curl: unexpected operator
Код скрипта провенрил — вроде бы точно, как у Вас, всё написал.
Не сталкивались с подобным, случаем?

Петр Аникин 2015

Здравствуйте. Curl у вас установлен?

Дмитрий Алексеев 2015

Да, установлен. Я даже пытался запускать curl отдельно с параметрами, как в Вашем скрипте. curl -s http://ip.anikin.pw/ отрабатывает нормально и выдаёт текущий внешний ip-адрес, «curl -s „https://pddimp.yandex.ru/nsapi/...“ ругается на ошибку идентификации (видимо, потому, что я отдельно запускаю, безщ предварительного определения токена с id).

Петр Аникин 2015

«curl -s „https:pddimp.yandex.ru/nsapi/...» при правильно заполненных переменных с токеном, доменом и другими данными должен выдавать что-то типа:

<?xml version="1.0" encoding="utf-8"?>
<page>
    
    <domains><domain><name>твой_домен</name></domain><error>ok</error></domains>
</page>

По поводу ошибки

./dyndns.sh: 10: [: curl: unexpected operator

даже не знаю что подсказать. Возможно есть какая-то ошибка в синтаксисе или не правильно скопировался какой-либо символ. Попробуйте скачать здесь http://anikin.pw/dyndns.tar.gz я выложил 100% рабочий скрипт. Запаковал его в архив, этот скрипт работает у меня на домашней тачке. Впишите только свои данные домена, токена и т.д, свои данные я естественно удалил. Также не забудьте вписать свой поддомен в строке:

YAIP=`host  dns1.yandex.ru | grep has | awk '{print $4}'`

И проверьте будет ли работать.

qwe 2015

Также роутерах ASUS есть встроенный беспатный DynDNS в домене asuscomm.com. Просто вводим желаемое имя поддомена и все, никаких регистраций, все автоматом, по времени через 10 сек имеем доступ, например на test.asuscomm.com.
Можно повесить форвард на удаленный рабочий стол, например.

Петр Аникин 2015

Многие производители роутеров предоставляют подобные сервисы для своей продукции, не только asus.

Тимофей 2015

Привет! Была ошибка, как у Дмитрия. Архив помог. Спасибо!

Иван 2015

Брехня про бесплатные домены в зоне .tk При попытке зарегистрировать «бесплатный» домен на dot.tk попросили 1000 долларов за 2-х годовую «бесплатную» регистрацию. А чуть ниже вопрос — еще хотите зарегистрировать один домен?

Петр Аникин 2015

Возможно. Я регистрировал домен в зоне .tk пару лет назад, тогда было бесплатно абсолютно.

Guest 2015

Домены .TK и сейчас бесплатны и регистрируются даже без регистрации на сайте. Просто домены надо выбирать попроще. Домены с тире там всегда свободны, типа: m-u-z-o-n.tk, mnogo-mnogo-deneg.tk

Петр Аникин 2015

Большое спасибо за информацию.

nikon 2016

Вышеуказанная процедура добавляет А запись с новым IP
Добавляет а не перезаписывает. Как с этим быть? их там может со временем набиться немерено

Петр Аникин 2016

Вы не правы, она редактирует запись с id указанной в переменной RECID.

Юрий 2016

Проблема в том, что у меня в сети два последовательно подключенных маршрутизатора. И сервер висит только на втором. Проброс, как я понимаю, нужно настраивать на обоих маршрутизаторах?

Петр Аникин 2016

Настраивать описанный выше скрипт достаточно только на одном маршрутизаторе, скрипт в любом случае пропишет выходной ip в А-запись. Но тут несколько сложнее, чтобы вам подключится внутрь локальной сети, т.е ко второму маршрутизатору, вам нужно будет настроить проброс портов на первом маршрутизаторе. Чтобы пакеты приходящие на определенный порт первого маршрутизатора уходили на второй.

Александр Юрьевич 2016

вообще не пойму,бьюсь несколько дней не могу придти к выводу почему не работает.
выдает <domains><domain/><error>no_auth</error></domains>
пробовал по разному в конфиге с ковычками» « и без, да и по всякому

Петр Аникин 2016

Я думаю проблема с токеном. Проверьте правильность его ввода.

Александр Юрьевич 2016

в общем помоги разобраться. у меня поддомен делегирирован как домен. вроде что то срабатывало с подписью no_content это когда я прописывал все данные в строке curl.
но всё ровно не так.

напиши код, как он правильно должен быть? с ковычками или без? ей богу беда какая то.

Петр Аникин 2016

Вот скрин скрипта на тачке с убунтой, где этот скрипт успешно работает. Изучайте.

Выше в комментах есть архив со скриптом который у меня во фряхе работал. Там слегка синтаксис отличается, парой кавычек, или что-то типа того.

Александр Юрьевич 2016

на VirtualBox-e так и не смог запустить. а на рабочей машине сразу запустился скрипт

motoarhangel 2016

У меня работает до сих пор. Специально зашел проверил.
[URL=http://radikal.ru/big/ac459a0d2ba14837938a7b94d516e510][IMG]http://s010.radikal.ru/i314/1605/30/d0202f4e4c65.jpg[/IMG][/URL]

Петр Аникин 2016

Значит вы счастливчик, мне услугу заблокировали.

motoarhangel 2016

dlinkddns в помощь. Я еще давным давно через него регался)

Петр Аникин 2016

Не нужен, ибо через яндекс ДНС скриптом все отлично работает. И домен можно любой юзать, а не только из ограниченного списка доменов третьего уровня.

Петр Алексеевич 2016

На 21 октября 2016 в записи днс яндекса нельзя вносить изменения если домен не находится на обслуживании у регистратора яндекса, что можно сделать? если ли похожий сервис без оплаты и делегирования домена?

Петр Аникин 2016

Не понимаю о чем вы. У меня все так же работает. Никаких денег яндекс не требует. Домен зарегистрирован у стороннего регистратора и делегирован на яндекс. Поясните что вы имеете ввиду.

Петр Алексеевич 2016

Все разрешилось. Само «делегирование» делал не я. там не была сделана еще одна запись MX(которой не было), потом еще мне надо было нажать кнопу «считать MX» на яндексе и он «делегировался».

Хотя я не понимаю зачем это, если сами днс сервера были изменены у регистратора, зачем менять настройки старых днс(изменять NS и MX записи на них). Я так понимаю или одно или другое. Или днс просто меняются или или меняются эти записи.

Алексей Unkn0wwn 2018

Огромное спасибо за идею и за реализацию, а так же и за ваш сервис IP.
Использовал скрипт со скриншота. Все отлично работает.

Петр Аникин 2018

Пожалуйста.

Alex 2018

а вы смотрели сколько времени пройдет после смены ip чтобы обновилась запись в ДНС???? в консоли яндекса стоит новый ip, но толку от этого ноль, т. к. надо ждать пока обновятся сервера ДНС, а это может занять до суток

Петр Аникин 2018

Используйте быстрые сервера. Не используйте ДНС провайдера, если ваш провайдер обновляет ДНС раз в сутки.

Alex 2018

использую 8.8.8.8
обратил внимание что адрес vpn.xxx.ru не обновляется, а вот адреса vpn1, vpn2.xxx.ru обновляются быстро)))

Петр Аникин 2018

Возможно у записи слишком большое значение ttl.

Alex 2018

такое же как у и vpn1 и vpn2

Kain Spb 2018

У кого возникают ошибки: ./dyndns.sh: 10: [: curl: unexpected operator
В 8 строке одинарные кавычки нужно заменить на обратные (такие же как в 9 строке).

P.S. Спасибо за статью и скрипт!

Андрей 2018

Аналог [удалено] , полностью бесплатен, позволяет подключать к себе ваши домены.

Петр Аникин 2018

Рекламу я удаляю.

Сергей Матвеев 2018

http://ip.anikin.pw — suspended?

Петр Аникин 2018

Пока да. Потому что некоторые деятели запускают скрипт без задержки и долбят по сотне запросов в секунду. Как сделаю чтобы таких умников отпуливало включу обратно. Пока предлагаю поискать альтернативные сервисы запроса ip.

Александр 2018

Здравствуйте! Спасибо за скрипт. А не подскажите аналогичные сервисы запроса ip? (пока ваш простаивает)
Спасибо сразу!

Петр Аникин 2018

Можете сделать свой на простейшем скрипте на php. Можете bash’ем и curl’ом выдергивать ip со страниц популярных сервисов типа 2ip.ru. Можете написать мне в личку(skype, facebook), и я вам дам доступ к моему сервису, но если будете хулиганить забаню.

Сергей Матвеев 2019

Яндекс всех поголовно переводит на Яндекс.Коннект. В API Коннекта на данный момент отсутствует возможность управлять DNS-записями. API pdd.yandex уже не работает.

Петр Аникин 2019

Да. Именно так. Статья уже не актуальна. Чуть позже возможно напишу как через Telegram API получать ip, будет альтернативой этой статьи. Я сам сейчас использую телеграм.

Ivanov 2019

Вот небольшой лайфхак по удаленному доступу. На даче стоит старый компьютер с камерой. Хочу получить к нему удаленный доступ. В деревне у провайдера нет «белого IP» и приобрести его невозможно.
DDNS работает, но и это бесполезно, потому что соединения извне тупо закрыты провайдером.
Поэтому использую вот такой VPN сервис — [Удалено] Они не предоставляют выход в интернет, но объединяют мои туннели — один с дачи, другой с смартфона.
Вдруг кому-то это поможет.

Петр Аникин 2019

Рекламу я удаляю.

Руслан 2019

Спасибо автору. все работает

santey990 2019

Подскажите, как быть с Яндекс Коннект ? Они вроде обновились до API 2. Не получается запустить скрипт

Петр Аникин 2019

У меня нет скрипта для яндекс-коннект.