Как правило у большинства домашних провайдеров всегда динамические IP адреса, а так как порой надо было иметь доступ к внешнему жесткому диску MyBookLive из интернета — было решено поднять свой DynDNS сервер.
Нам потребуется домен и DNS сервер который будет обслуживать домен.
Про настройку Bind в качестве Master и Slave сервера писать не буду — в интернете куча статей, у меня крутится Bind99 на FreeBSD в качестве Master + Slave с двумя внешними IP адресами на сервере.

На клиенте ( у меня это MyBookLive с Debian на борту ) генерируем ключи для возможности удаленного обновления зоны:
dnssec-keygen -a hmac-md5 -b 128 -n USER deathstar

Должно получится два файла Kdeathstar.+157+03649.private и Kdeathstar.+157+03649.key
Смотрим содержимое файла Kdeathstar.+157+03649.key
deathstar# cat Kdeathstar.+157+03649.key
deathstar. IN KEY 0 3 157 OoMn1WMkDFdAH/ZZ9ip0Imm==

На сервере создаем файл /etc/namedb/keys.conf с таким содержимым ( значение для строки secret берем выше из файла ключа Kdeathstar.+157+03649.key на клиенте ):
key deathstar {
algorithm hmac-md5;
secret "OoMn1WMkDFdAH/ZZ9ip0Imm==";
};

Затем на сервере в файл /etc/namedb/named.conf впишите в самый конец файла:
include "/etc/namedb/keys.conf";

и приводим зону в этом же файле к такому состоянию:
zone "deathstar.name" {
type master;
file "/etc/namedb/master/deathstar.name";
allow-update { key deathstar; };
allow-query { any; };
notify yes;
};

и перезапускаем bind
deathstar# /etc/rc.d/named restart

На клиенте создаем скрипт такого вида:
#!/bin/sh

# SETTINGS
TTL=10
SERVER=ns1.deathstar.name
HOSTNAME=netdisk.deathstar.name.
ZONE=deathstar.name
KEYFILE="/etc/Kdeathstar.+157+03649.private"

IP_FILE="/tmp/myBookLiveIP"
OLDIP="$(grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' $IP_FILE)"
IP="$(wget -q checkip.dyndns.org -O - | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')"
DNSIP="$(host -t A $HOSTNAME | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')"

if [ "$OLDIP" != "$IP" ] & [ "$OLDIP" != "$DNSIP" ]
then
echo "Change IP from $OLDIP to $IP"
echo $IP > $IP_FILE

nsupdate -v -k $KEYFILE < < EOF server $SERVER zone $ZONE update delete $HOSTNAME A update add $HOSTNAME $TTL A $OLDIP send EOF else echo "Current IP is $OLDIP, no updating..." fi

Делаем исполняемым:
chmod +x dyndns.sh

Запускаем вот так:
./dyndns.sh и пробуем пинговать наш поддомен:
deathstar# ping netdisk.deathstar.name
PING netdisk.deathstar.name (41.57.18.19) 56(84) bytes of data.
64 bytes from inet-18-ip19.serv1.net.ru (41.57.18.19): icmp_req=1 ttl=64 time=1.475 ms
64 bytes from inet-18-ip19.serv1.net.ru (41.57.18.19): icmp_req=2 ttl=64 time=1.390 ms
64 bytes from inet-18-ip19.serv1.net.ru (41.57.18.19): icmp_req=3 ttl=64 time=1.397 ms
64 bytes from inet-18-ip19.serv1.net.ru (41.57.18.19): icmp_req=4 ttl=64 time=1.401 ms

Как видим все работает и у поддомена сменился IP на тот что является внешним у моего MyBookLive.

Настройки скрипта:
# SETTINGS
SERVER=адрес нашего DNS сервера
HOSTNAME=динамический поддомен и именно с точкой в конце
ZONE=зона домена
KEYFILE=путь к ключу, который генерировали с самого начала

Добавляем в Cron на каждые 30 минут
*/30 * * * * root /root/dyndns.sh ,
и наслаждаемся.
Инструкция в основном подходит для всех UNIX систем с установленным Bind на стороне сервера и клиента.