Связаться со мной:

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

Я давно пользовался услугами 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
16 комментариев
Инициатор

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

Петр Аникин

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

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

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

Петр Аникин

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

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

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

Петр Аникин

«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

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

Петр Аникин

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

Тимофей

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

Иван

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

Петр Аникин

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

Guest

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

Петр Аникин

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

nikon

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

Петр Аникин

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

Юрий

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

Петр Аникин

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

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

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

Петр Аникин

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

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

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

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

Петр Аникин

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

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

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

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

motoarhangel

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

Петр Аникин

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

motoarhangel

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

Петр Аникин

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

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

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

Петр Аникин

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

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

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

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

Популярное