В одной из предыдущих статей мы рассказали, что есть некий API для программирования DynDNS. В ней же была упомянута возможность программирования стандартного сервера DNS BIND с использованием штатных утилит *nix DNS — nsupdate и TSIG?.
Наверно большая часть читателей пропустила этот материал — «я же не программист, не программирую я веб-сервисы». Напрасно, опираясь на упомянутую возможность программировать BIND мы расскажем как сделать DDNS своими руками.
Предполагается что наш домен DNS обслуживается нашим собственным сервером DNS и этот сервер BIND (однако знающий человек легко экстраполирует методику на другой сервер). У нас есть несколько географических точек с динамическими адресами которым мы хотели бы назначить имена в нашем домене.
Приступим:
¦ Получим текущий адрес Интернет соединения. Например curl checkip.dyndns.com/;
¦ Получим текущий IP назначенный на наш хост в DNS. Например host my_host.acme.com;
¦ Сравним оба адреса;
¦ Если равны, то ничего не делаем;
¦ Если не равны, то готовим командный файл для nsupdate по примеру упомянутой выше статьи;
¦ Выполним nsupdate — заменим адрес в нашем DNS.
Вот собственно и все. Осталось «повесить» наш скрипт на cron и выполнять его, скажем раз в пять минут.
[hr]
? Для тех кого интересует детальная настройка, один из возможных вариантов описан (не мной ;-) здесь.
Наверно большая часть читателей пропустила этот материал — «я же не программист, не программирую я веб-сервисы». Напрасно, опираясь на упомянутую возможность программировать BIND мы расскажем как сделать DDNS своими руками.
Предполагается что наш домен DNS обслуживается нашим собственным сервером DNS и этот сервер BIND (однако знающий человек легко экстраполирует методику на другой сервер). У нас есть несколько географических точек с динамическими адресами которым мы хотели бы назначить имена в нашем домене.
Приступим:
- Настроим BIND на использование TSIG. Не имеет смысла останавливаться на этом. Примеров этому множество (например здесь).
- Внесем в наш DNS записи A (AAA) о наших хостах с динамическим адресами. При этом установим время жизни TTL 30 или 60 секунд.
- Теперь нам необходимо написать небольшой скрипт. Алгоритм следующий:
¦ Получим текущий адрес Интернет соединения. Например curl checkip.dyndns.com/;
¦ Получим текущий IP назначенный на наш хост в DNS. Например host my_host.acme.com;
¦ Сравним оба адреса;
¦ Если равны, то ничего не делаем;
¦ Если не равны, то готовим командный файл для nsupdate по примеру упомянутой выше статьи;
¦ Выполним nsupdate — заменим адрес в нашем DNS.
Вот собственно и все. Осталось «повесить» наш скрипт на cron и выполнять его, скажем раз в пять минут.
[hr]
? Для тех кого интересует детальная настройка, один из возможных вариантов описан (не мной ;-) здесь.
Комментарии (7)
AxianLTD Автор
21.04.2015 15:44Никто не спорит. Ситуации и решения бывают разные. Здесь описан случай если домен хостится на своём DNS (при чем здесь «отечественный», если он свой?). Для каких-то задач используется Яндекс DNS или еще что-то. Мы (DynRU, https://dynru.ru) тоже используем Яндекс DNS, только в связке с собственным апдейтером и с использованием стандартного протокола DynDNS. Мир разнообразен и в нем должен быть выбор.
AxianLTD Автор
23.04.2015 07:55Отечественный сервис для определения IP — checkip.dynru.ru — это часть нашего сервиса ДинруДНС, совместим с DynDNS
berezuev
Я лично больше доверяю отечественному производителю, так что, вот инструкция для создания 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)
lolipop
как вы коварно обманываете буржуйский сервис! используете его для выяснения внешнего айпи, а сами потом обращаетесь к отечественному производителю.
PS:
$ dig +short myip.opendns.com @resolver1.opendns.com
95.173.136.70
Ivan_83
На днях в очередной-последней статье о PowerShell упоминали апи яндекса для определения своего IP, так что checkip.dyndns.org можно выкинуть.
berezuev
А можно чуть подробнее?
Ivan_83
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