Сам себе DynDNS

Опубликовано

В общем-то в большей степени памятка для себя, но может еще кому пригодится.Dynamic DNS - очень полезная штука для тех кто не желает отстегивать провайдеру денег за постоянный IP-адрес. Зачем это надо каждый разбирается сам, мне вот иногда нужно домой ходить по SSH и HTTPS, а вычислять IP методом тыка не хочется.Для организации динамического DNS нам потребуется VDS с установленным ISPmanager. Все делается с помощью ISPmanager API, описание которого есть в документации. Можно дергать нужный URL например wget'ом, но это не мой случай, т.к. apache у меня остановлен и доступа в панель через браузер нет, а можно использовать утилиту mgrctl, вот это как раз мой вариант.Система (о как громко сказал) состоит из двух скриптов, серверного и клиентского.Клиентский скрипт выясняет текущий IP в DNS, сравнивает его с тем что выдан провайдером и при необходимости выполняет процедуру обновления:

#!/bin/shdateif [ -f /var/run/tun0.pid ]; thenCURIP=`/sbin/ifconfig tun0 |/usr/bin/grep inet |/usr/bin/awk {'print $2'}`echo Current IP is $CURIP, getting IP from DNS serverDNSIP=`/usr/sbin/host homelan.megaded.info 82.146.33.122 |grep homelan |awk {'print $4'}`echo IP in DNS is $DNSIPif [ $DNSIP != $CURIP ]; thenecho Updating DNS/usr/bin/ssh root@82.146.33.122 /root/bin/updns.sh $DNSIP $CURIP >> /root/mydyndns/ssh.logecho IP-address set to $CURIPecho "--"elseecho Noting to do. Exitingecho "--"fielseecho No linkecho "--"fi

Если необходимо обновление вызывается серверный скрипт, которому в качестве параметров передаются текущий IP в DNS и IP на который его сменить, он и выполняет обновление.

#!/bin/sh/usr/local/ispmgr/sbin/mgrctl domain.sublist.edit elid="homelan A "$1 plid=megaded.info name=homelan sdtype=A addr=$2 sok=yes/usr/local/ispmgr/sbin/mgrctl domain.fix elid=megaded.info

Ну и для записи в зоне нужно TTL сделать поменьше, у меня - 10 секунд.Вроде все.