В одной из предыдущих статей мы рассказали, что есть некий API для программирования DynDNS. В ней же была упомянута возможность программирования стандартного сервера DNS BIND с использованием штатных утилит *nix DNS — nsupdate и TSIG?.



Наверно большая часть читателей пропустила этот материал — «я же не программист, не программирую я веб-сервисы». Напрасно, опираясь на упомянутую возможность программировать BIND мы расскажем как сделать DDNS своими руками.

Предполагается что наш домен DNS обслуживается нашим собственным сервером DNS и этот сервер BIND (однако знающий человек легко экстраполирует методику на другой сервер). У нас есть несколько географических точек с динамическими адресами которым мы хотели бы назначить имена в нашем домене.

Приступим:
  1. Настроим BIND на использование TSIG. Не имеет смысла останавливаться на этом. Примеров этому множество (например здесь).
  2. Внесем в наш DNS записи A (AAA) о наших хостах с динамическим адресами. При этом установим время жизни TTL 30 или 60 секунд.
  3. Теперь нам необходимо написать небольшой скрипт. Алгоритм следующий:

¦ Получим текущий адрес Интернет соединения. Например curl checkip.dyndns.com/;
¦ Получим текущий IP назначенный на наш хост в DNS. Например host my_host.acme.com;
¦ Сравним оба адреса;
¦ Если равны, то ничего не делаем;
¦ Если не равны, то готовим командный файл для nsupdate по примеру упомянутой выше статьи;
¦ Выполним nsupdate — заменим адрес в нашем DNS.
Вот собственно и все. Осталось «повесить» наш скрипт на cron и выполнять его, скажем раз в пять минут.

[hr]

? Для тех кого интересует детальная настройка, один из возможных вариантов описан (не мной ;-) здесь.

Комментарии (7)


  1. berezuev
    21.04.2015 15:31

    Я лично больше доверяю отечественному производителю, так что, вот инструкция для создания DDNS на Яндексе.
    Все, что в фигурных скобках, заменяем на свое

    1) Подключаем домен к pdd.yandex.ru
    2) Далее переходим на pdd.yandex.ru/domain_ns{YOUR_DOMAIN} и добавляем A-запись с сабдоменом.
    3) Получаем токен к их api tech.yandex.ru/pdd/doc/concepts/access-docpage/#access-admin
    4) Переходим на pddimp.yandex.ru/nsapi/get_domain_records.xml?token={YOUR_TOKEN}&domain={YOUR_DOMAIN}
    5) В этом XML-файле находим нужный домен и берем из атрибутов его id

    6) Создаем на сервере sh-файл (должен принадлежать вам, и в примере он называется ya.sh):

    #!/bin/sh
    IP=`curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`
    /usr/bin/wget --no-check-certificate -O /tmp/out_file «pddimp.yandex.ru/nsapi/edit_a_record.xml?token=YOUR_TOKEN&domain=YOUR_DOMAIN&subdomain=$1&record_id=$2&ttl=900&content=$IP»

    7) Добавляем в кроне:
    */5 * * * * {USERNAME} /bin/sh /{PATHTOFILE}/ya.sh {SUBNAME} {ID} >/dev/null 2>&1

    SUBNAME нужно заменить на название сабдомена (например для домена habr.example.ru нужно прописать habr)


    1. lolipop
      21.04.2015 20:44
      +1

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

      PS:
      $ dig +short myip.opendns.com @resolver1.opendns.com
      95.173.136.70


    1. Ivan_83
      21.04.2015 20:57

      На днях в очередной-последней статье о PowerShell упоминали апи яндекса для определения своего IP, так что checkip.dyndns.org можно выкинуть.


      1. berezuev
        22.04.2015 10:25

        А можно чуть подробнее?


        1. Ivan_83
          22.04.2015 21:26

          ipv4.internet.yandex.ru/internet/api/v0/ip
          Было в habrahabr.ru/hub/powershell — «PowerShell: за гранью. Часть седьмая», но автор самоликвидировался.
          Оно осело в кеше гугла: webcache.googleusercontent.com/search?q=cache:Z1EINKGJJ8MJ:http://habrahabr.ru/post/255973/%2Byandex+ipv4+api&gbv=1&sei=r7Y3VbHGGaq9ygPRk4C4Cw&hl=ru&&ct=clnk

          Ещё тут диндин от яндекса: strangeway.org/?p=1190


  1. AxianLTD Автор
    21.04.2015 15:44

    Никто не спорит. Ситуации и решения бывают разные. Здесь описан случай если домен хостится на своём DNS (при чем здесь «отечественный», если он свой?). Для каких-то задач используется Яндекс DNS или еще что-то. Мы (DynRU, https://dynru.ru) тоже используем Яндекс DNS, только в связке с собственным апдейтером и с использованием стандартного протокола DynDNS. Мир разнообразен и в нем должен быть выбор.


  1. AxianLTD Автор
    23.04.2015 07:55

    Отечественный сервис для определения IP — checkip.dynru.ru — это часть нашего сервиса ДинруДНС, совместим с DynDNS