Не вопрос.
Если у Вас есть собственный домен (например, domain.ru) с доступом к его конфигу, то мы сейчас сделаем поддомен для динамических записей (т.е. записей, которые "живут" недолго, позволяя работать хостам с динамическими IP).
1. В конфигурационный файл /etc/bind/named.conf вставим информацию о новой динамической зоне и о ключах, с которыми будем разрешать ее обновление. Например
include "/etc/bind/dyndns.domain.ru.keys";
// Dynamic zone
zone "dyndns.domain.ru" {
type master;
file "/etc/bind/dyndns.domain.ru";
update-policy {
grant *.dyndns.domain.ru self dyndns.domain.ru.;
};
};
2. Сгенерим ключ для нашего нового хоста home
ddns-confgen -r /dev/urandom -q -a hmac-md5 -k home.dyndns.domain.ru -s home.dyndns.domain.ru. | tee -a /etc/bind/dyndns.domain.ru.keys > /etc/bind/key.home.dyndns.domain.ru
3. Поменяем права на файл
chown root:bind /etc/bind/dyndns.domain.ru.keys
chmod u=rw,g=r,o= /etc/bind/dyndns.domain.ru.keys
4. Создадим пустой файл зоны /etc/bind/dyndns.domain.ru следующего содержания
$ORIGIN .
$TTL 300 ; 5 minutes
dyndns.domain.ru IN SOA ns.domain.ru. admin.domain.ru. (
1 ; serial
3600 ; refresh (1 hour)
600 ; retry (10 minutes)
604800 ; expire (1 week)
300 ; minimum (5 minutes)
)
NS ns.domain.ru.
$ORIGIN dyndns.domain.ru.
$TTL 60 ; 1 minute
(вместо ns.domain.ru здесь и далее нужно вписать имя Вашего DNS-сервера)
5. Перезапустим bind: /etc/init.d/bind9 reload
6. Перенесем файл /etc/bind/key.home.dyndns.domain.ru на хост с динамическим IP-адресом например в /etc/dyndns/key.home.dyndns.domain.ru
7. Попробуем сообщить нашему DNS-серверу о нашем хосте (это делаем на нашем "динамическом" хосте:
cat <<EOF | nsupdate -k /etc/dyndns/key.home.dyndns.domain.ru
server ns.domain.ru
zone dyndns.domain.ru.
update delete home.dyndns.domain.ru.
update add home.dyndns.domain.ru. 60 A 192.168.0.1
update add home.dyndns.domain.ru. 60 TXT "Updated on $(LC_TIME=C date)"
send
EOF
8. Проверяем
dig home.dyndns.domain.ru
9. Если все в порядке, создаем скрипт /etc/dyndns/autoupdate следующего содержания
#!/bin/sh
# set some variables
host=home
zone=dyndns.domain.ru
dnsserver=ns.domain.ru
keyfile=/etc/dyndns/key.$host.$zone
#
# get current external address
ext_ip=$(dig +short @resolver1.opendns.com myip.opendns.com)
# get last ip address from the DNS server
last_ip=$(dig +short @$dnsserver $host.$zone)
if [ ! -z "$ext_ip" ]; then
if [ ! -z "$last_ip" ]; then
if [ "$ext_ip" != "$last_ip" ]; then
echo "IP addresses do not match (external=$ext_ip, last=$last_ip), sending an update"
cat <<EOF | nsupdate -k $keyfile
server $dnsserver
zone $zone.
update delete $host.$zone.
update add $host.$zone. 60 A $ext_ip
update add $host.$zone. 60 TXT "Updated on $(LC_TIME=C date)"
send
EOF
else
echo "success: IP addresses match (external=$ext_ip, last=$last_ip), nothing to do"
fi
else
echo "fail: couldn't resolve last ip address from $dnsserver"
fi
else
echo "fail: couldn't resolve current external ip address from resolver1.opendns.com"
fi
10. Вставляем исполнение этого скрипта в cron (например, раз в пять минут).
Все.
(подсмотрено в интернете, проверено на себе)