Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> Динамический DNS

Динамический DNS своими руками

Автор: BAV_Lug.


Есть у меня объект на котором стоит интернет с динамическим IP. Периодически есть необходимость подключаться к нему и проводить плановые работы. Статику там сделать дорого (кто знает Укртелекомовские тарифы, тот поймет о чем я) да и не особо она там нужна. VPN поднимать тоже не хотелось. И, до не давнего времени, я пользовался сервисом DynDNS.com, но мне пришло письмо, что мой аккаунт по каким-то причинам заблокирован. Сначала хотел зарегить новый, а потом подумал, что неплохо бы сделать у себя аналог такого сервиса, тем более что свой DNS-сервак имеется.

Итак вводные данные
- на стороне с динамическим IP - сервер Windows
- DNS - сервер FreeBSD 7.0

Идея вообщем-то проста - сервер Windows периодически коннектится к серверу DNS -> в логах появляются записи об этом -> выковыриваем из логов IP-адрес и суём его в DNS.

Так как на сервере с DNS поднят ssh, то я решил использовать его (хотя можно заюзать в принципе любой протокол telnet, ftp, pop3, imap и т.д. просто из разных логов выковыривать ip-адрес).

Был написан следующий bat-файл


plink.exe -ssh -batch -pw 12345 test01@имя сервера днс

и засунут в планировщик Windows на выполнение каждый час (программа plink была взята у разработчиков putty).
Пользователь test01 на сервере DNS не существует.

На сервере DNS был написан скрипт, который выковыривает нужный нам ip-адрес и запихивает его в днс (предпологается, что версия файла зоны прописана в третьей строчке и она там одна)

#!/bin/sh

ip=`awk '/Invalid user test01/ { ip = $10} END {print ip}' /var/log/auth.log`
ipnamed=`awk '/test01/ {print $4}' /etc/namedb/master/имя зоны`
if [ $ip != $ipnamed ]
then
   version=`date +%Y%m%d%H`
   awk -v ver="$version" -v ip="$ip" \
   ' { st++; if(st==3) {print(ver)} else \
   if($1=="test01") {print("test01 IN A ",ip)} \
   else {print}}' \
    /etc/namedb/master/имя зоны > /tmp/имя зоны
   cp /tmp/имя зоны /etc/namedb/master/имя зоны
   /etc/rc.d/named reload
fi

В результате у нас всегда есть DNS-запись с актуальным IP.



размещено: 2009-08-19,
последнее обновление: 2009-08-23,
автор: BAV_Lug


Андрей, 2009-08-19 в 16:15:19

Вариант решения, но вот юзверя на сервере стоит завести и дёргать ИП только после авторизации юзера.
Иначе злой дядька может прикинуться твоей Windows машиной и получить от неё логин / пароль.
Вобщем небезопасно.

BAV_Lug, 2009-08-19 в 18:10:27

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

airmax, 2010-11-06 в 0:13:19

Слишком много телодвижений. Поднять ДНС сервер, ковырять логи...
Вопрос можно решить намного проще.
1. Регистрируемся на changeip.net
2. Ставим в крон задачу на периодическое выполнение аналогичного скрипта:
http://www.changeip.com/clients/ste-marie.txt
3. Profit!

airmax, 2010-11-06 в 0:17:52

Да, забыл сказать, что changeip более продвинутый сервис нежели DynDNS. За 3 года использования никаких нареканий!

xz, 2011-01-02 в 1:29:22

noip и в портах есть и нареканий не было за ~3 года, но не уверен, что сейчас сервис/регистрация бесплатные.

airmax-to, 2011-09-07 в 15:38:45

аирмакс продает сервис чейндж.айпи? а баг вот в чем: как насчет скрипта для Виндовс-ДНС-сервера?

airmax, 2011-09-07 в 15:57:08

Не продаю )
"насчёт скрипта для Виндовс-ДНС-сервера" - самому прийдётся как-то...



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0427 секунд
Из них PHP: 21%; SQL: 79%; Число SQL-запросов: 77 шт.
Исходный размер: 16378; Сжатая: 5427