Есть у меня объект на котором стоит интернет с
динамическим IP. Периодически есть необходимость подключаться к нему и
проводить плановые работы. Статику там сделать дорого (кто знает
Укртелекомовские тарифы, тот поймет о чем я) да и не особо она там
нужна. VPN поднимать тоже не хотелось. И, до не давнего времени, я
пользовался сервисом DynDNS.com, но мне пришло письмо, что мой аккаунт
по каким-то причинам заблокирован. Сначала хотел зарегить новый, а
потом подумал, что неплохо бы сделать у себя аналог такого сервиса, тем
более что свой DNS-сервак имеется.
Итак вводные данные
- на стороне с динамическим IP - сервер Windows
- DNS - сервер FreeBSD 7.0
Идея вообщем-то проста - сервер Windows периодически коннектится к
серверу DNS -> в логах появляются записи об этом -> выковыриваем
из логов IP-адрес и суём его в DNS.
Так как на сервере с DNS поднят ssh, то я решил использовать его (хотя
можно заюзать в принципе любой протокол telnet, ftp, pop3, imap и т.д.
просто из разных логов выковыривать ip-адрес).
и засунут в планировщик 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.
Категория: DNS | Добавил: oleg (20.08.2009) | Автор: BAV_Lug