Динамические DNS для компьютера


Tagged , , , ,

Динамический DNS — это технология, позволяющая информации на DNS-сервере обновляться в реальном времени, и (по желанию) в автоматическом режиме. Она применяется для назначения постоянного доменного имени устройству (компьютеру, сетевому накопителю) с изменяемым IP-адресом. Это может быть
IP-адрес, полученный по DHCP или по IPCP в PPP-соединениях (например, при удалённом доступе через модем). Другие машины в Интернете могут устанавливать соединение с этой машиной по доменному имени и даже не знать, что IP-адрес изменился.
(wikipedia.org)

На мой взгляд, с вхождением высокоскоростного интернета в массы, тема динамических DNS становится все более актуальной. В интернете появилось большое количество сервисов предоставляющих данную услугу. Наиболее разрекламированные наверно dyndns.com и no-ip.com. Однако есть один существенный минус у этих сервисов. Большая их часть (особенно хорошо разрекламированная) частично платная. Можно зарегистрироваться и бесплатно использовать поддомен предоставляемый сервисом, но это далеко не всегда приемлемо. Пожалуй, это приемлемо только для домашних машин, на которых надо расшарить в общий доступ пару фильмов или папочек, что кстати элементарно делается с помощью HTTP File Server и SmallFTPd. Для более серьезных вещей, таких как открытие своего сервиса или удаленного доступа к служебным машинам, нужно использовать свои домены. За определенную мзду, перечисленные выше сервисы (впрочем, как и многие другие) предоставляют услугу прописывания вашего домена у себя, но платить за это деньги, не наш метод 🙂 Я, как фанат open sourse и freeware, задался целью найти бесплатные сервисы.. и нашел! Первое что нашел, это сервис которым я давно пользуюсь freedns.afraid.org, правда я им пользуюсь исключительно как статическим DNS сервисом, на котором живут мои домены. В общем то они молодцы, предоставляют тучу бесплатных поддоменов, под всякие нужды. Там же вы можете бесплатно прописать туда свой домен и поддомены. Сравнительно недавно я заметил, что там есть поддержка динамических DNS, правда, как показала практика сервис работает далеко не идеально, что касается динамических, лично у меня зачастую не срабатывало прописывание нового ip, непонятно с чем это связано, скорее всего чрезмерной загруженностью сервиса. Сам процесс прописывания нового ip заключается в запуске заготовленного скрипта (используется wget) или установки специальной программы-клиента для Windows машин. Сами клиенты можно найти на сайте freedns.afraid.org. Если у кого то получится все запустить, отпишитесь как 🙂
Второй сервис предоставляется на сайте www.everydns.com. Регистрация абсолютна бесплатна, есть возможность прописывать как статичесие так и динамические домены.
Единственный минус (для меня это плюс) сервис не предоставляет своих доменов, то есть вы можете использовать только свои домены, достаточно прописать у них в DNS серверах ns сервера everyDNS. Уже некоторое время использую этот сервис и вполне доволен качествами его услуг. В качестве клиента по смене ip выступает как исполняемый фаил (для Windows), так и perl скрипт (UnixWindows).

Делаем из домашней машины сервак.

Так как у меня дома стоит FreeBSD, я буду использовать perl скрипт. Взять его можно на http://www.everydns.com/dynamic.php, там же можно взять и Win клиент.
Скрипт запускается со следующими параметрами :

perl eDNS.pl -u username -p password -d domainname.ru

где username и password ваши логин и пароль на сайте everydns.com, а domainname.ru имя прописанного вами домена. Прописать его надо именно как динамический домен. Это делается в панели Manage DNS. Вместо «eg: everydns.net» пишем свой домен и тыкаем по кружку напротив «Make domain dynamic». Далее нажимаем на кнопку >> (advanced) и видим что в разделе «Dynamic Domains:» появился наш домен.
(ВАЖНО!) Не забудьте прописать ns сервера everyDNS в поле DNS серверов вашего домена, иначе работать не будет.
Если все сделано правильно, после каждого вызова скрипта, ip адрес вашего домена будет менятся на ваш текущий внешний ip. Тем самым вы сделаете свой домашний компьютер доступен извне.
Запускать скрипт каждый раз вручную не удобно, поэтому можете повесить его в cron (/etc/crontab):

* */2 * * * root /usr/bin/perl /path/to/sctipt/eDNS.pl -u username -p password -d domainname.ru

Теперь каждые 2 часа, скрипт будет автоматом запускаться.

В ситуации, когда связь с интернетом часто прерывается, или компьютер время от времени дает сбой и перезагружается (как у меня), можно делать запросы и почаще, например каждые 15 минут, но чтобы не засорять запросами сервис, я написал простенький shell скрипт, который перед отправкой запроса проверяет, совпадает ли ip домена с текущим ip компьютера и в случае различия, запускает perl скрипт.
Код скрипта :

#!/bin/sh

if [ -s /tmp/ip.php ]
then
rm -f /tmp/ip.php
fi

/usr/local/bin/wget -O /tmp/ip.php -q http://www.babara.ru/ip.php
REAL=`cat /tmp/ip.php`
OLD=`host domainname.ru | sed -e «s/.* //»`

if [ «$REAL» != «$OLD» ]
then
echo `date «+[%d.%m.%Y] %H:%M:%S»` : `/usr/bin/perl /root/eDNS.pl -u username -p password -d domainname.ru` >> /var/log/edns.log 2>&1
fi

Я поставил его на выполнение каждые 15 минут :

*/15 * * * * root /bin/sh /path/to/sctipt/checkDNS.sh

Каждые 15 минут скрипт загружает страницу ip.php которая содержит ip адрес обратившегося к нему клиента, т.е. вас. и сравнивает в текущим ip домена.
Заранее создайте фаил /var/log/edns.log в котором будут вестись логи обращений к
серверу everyDNS.

В общем то на этом все. В данный момент я имею полный доступ к своему домашнему компьютеру с работы по ssh. Все порты перекрыты pf, а для себя я открываю доступ с помощью knockd для текущего ip, поэтому для других мой сервер наглухо перекрыт 🙂
© Человек_Разумный

Share:

1 comment

RSS / trackback

Respond

  1. mitroxa

    on 15.10.2013 at 06:59

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