Это старая версия документа.
Содержание
Введение
Иногда необходимо иметь доступ к своей машине, или машине клиента, которые имеют динамический IP адрес. Для этих целей существует масса сервисов, но бесплатных становится все меньше и меньше. Вот для этого и предназначена данная статья. Если у вас есть под рукой сервер (VDS, VPS или дедик), из которого можно сделать ДНС сервер, то с помощью данной статьи вы сможете сделать для себя такой сервис и пользоваться им как вам удобно и сколько вам хочется. В ходе создания сервиса было перерыто множество страниц в интернете, зачастую противоречащих друг другу. Поэтому, ссылки на исходники указаны не будут. Это статья как бы компиляция всех сведений, нарытых в сети.
Начало работы
Для начала работы по созданию сервиса предполагается, что у вас настроен на сервере BIND, установлены пакет dnsutils и программа Curl. Если обнаружилось вдруг, что у вас этого нет, почитайте, что написано в этой статье. Для простоты сразу договоримся, что оперировать будем доменом dyndns.my и поддоменом с динамическим IP dhost. Полный адрес получится dhost.dyndns.my. В домене должна быть запись A ns с IP вашего сервера. Или не ns, тут кому как нравится, но в этом примере дело обстоит именно так. Ну и для полной ясности, и сервер, и клиент - компы с Ubuntu. Версия уже принципиального значения не имеет.
Он сказал, поехали!
Настройка клиентской части
Создадим отдельный каталог в /etc.
sudo mkdir /etc/ddns/
Перейдем в него.
cd /etc/ddns/
Генерируем пару ключей для обмена информацией между клиентом и сервером.
sudo dnssec-keygen -b 512 -a HMAC-MD5 -v 2 -n HOST dyndns.my
В результате этой операции в каталоге появляются два файлика - Kdyndns.my.+157+48025.key и Kdyndns.my.+157+48025.private. Из первого файла нам будет необходим только набор символов после «157 ». Именно после пробела начинается тело ключа. Создаем скрипт обновления доменных зон.
sudo nano ddns.sh
Вставляем туда текст.
#!/bin/bash TTL=3600 SERVER=ns.dyndns.my HOSTNAME=dhost.dyndns.my ZONE=dyndns.my KEYFILE=Kdyndns.my.+157+48025.private new_ip_address=`curl http://dyndns.my/ip.php` #Этот файлик создадим позднее на сервере! cd /etc/ddns nsupdate -v -k $KEYFILE << EOF server $SERVER zone $ZONE update delete $HOSTNAME A update add $HOSTNAME $TTL A $new_ip_address send EOF
Сохраняем. Затем даем права на исполнение.
sudo chmod +x ddns.sh
Создаем символическую ссылку в каталог /usr/sbin, чтобы не добавлять в пути скрипт обновления зон. Это не обязательно, будет просто не лишним для того, чтобы из консоли набирать команду без путей.
sudo ln -s /etc/ddns/ddns.sh /usr/sbin/ddns_update
Раз добавили, то в /etc/crontab будем использовать его.
sudo nano /etc/crontab
Добавляем строчку.
*/15 * * * * root /usr/sbin/ddns_update
Это означает, что раз в 15 минут скрипт будет запускаться. На этом настройка клиентской части закончена.
Настройка серверной части
Настройка сервера имен заключается в прописывании домена и установке разрешения на обновления записей A доменных имен с динамическими IP. Переходим в каталог bind.
cd /etc/bind/
sudo nano dnskeys.conf
Вставляем туда текст и тело ключа, о котором упоминалось в предыдущем разделе.
key "dyndns.my" { algorithm hmac-md5; secret "тут тело ключа"; };
Добавляем в файл /etc/bind/named.conf строчку с указанием файла, где определен ключ.
include "/etc/bind/dnskeys.conf";
Следующим шагом необходимо в файл /etc/bind/named.conf.local прописать доменную зону, которым мы оперируем.
zone "dyndns.my" { type master; allow-update {key dyndns.my;}; file "/etc/bind/pri.dyndns.my"; };