Динамический днс своими руками Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:динамический_днс_своими_руками [2014/05/19 11:31]
[Начало работы]
wiki:динамический_днс_своими_руками [2014/05/19 21:08] (текущий)
[Ссылки]
Строка 6: Строка 6:
 В ходе создания сервиса было перерыто множество страниц в интернете,​ зачастую противоречащих друг другу. Поэтому,​ ссылки на исходники указаны не будут. Это статья как бы компиляция всех сведений,​ нарытых в сети. В ходе создания сервиса было перерыто множество страниц в интернете,​ зачастую противоречащих друг другу. Поэтому,​ ссылки на исходники указаны не будут. Это статья как бы компиляция всех сведений,​ нарытых в сети.
 ===== Начало работы ===== ===== Начало работы =====
-Для начала работы по созданию сервиса предполагается,​ что у вас ​установлены и настроен на сервере [[wpru>BIND|BIND]] ​и пакет **dnsutils**. Если обнаружилось вдруг, что у вас этого нет, почитайте,​ что написано в [[wiki:​руководство_по_ubuntu_server/​служба_доменных_имен/​installation|этой статье]].+Для начала работы по созданию сервиса предполагается,​ что у вас настроен на сервере [[wpru>​BIND]], установлены ​пакет **dnsutils** ​и программа [[wpru>​Curl]]. Если обнаружилось вдруг, что у вас этого нет, почитайте,​ что написано в [[wiki:​руководство_по_ubuntu_server/​служба_доменных_имен/​installation|этой статье]].
 Для простоты сразу договоримся,​ что оперировать будем доменом **dyndns.my** и поддоменом с динамическим IP **dhost**. Полный адрес получится **dhost.dyndns.my**. В домене должна быть запись A ns с IP вашего сервера. Или не ns, тут кому как нравится,​ но в этом примере дело обстоит именно так. Для простоты сразу договоримся,​ что оперировать будем доменом **dyndns.my** и поддоменом с динамическим IP **dhost**. Полный адрес получится **dhost.dyndns.my**. В домене должна быть запись A ns с IP вашего сервера. Или не ns, тут кому как нравится,​ но в этом примере дело обстоит именно так.
 +Ну и для полной ясности,​ и сервер,​ и клиент - компы с Ubuntu. Версия уже принципиального значения не имеет.
 ===== Он сказал,​ поехали! ===== ===== Он сказал,​ поехали! =====
 +
 +==== Настройка клиентской части ====
 +<​note>​Раздел идет впереди настройки сервера потому,​ что ключи авторизации необходимо генерировать на клиенте.</​note>​
 +Создадим отдельный каталог в **/etc**.
 +<code bash>
 +sudo mkdir /etc/ddns/
 +</​code>​
 +Перейдем в него.
 +<code bash>
 +cd /etc/ddns/
 +</​code>​
 +Генерируем пару ключей для обмена информацией между клиентом и сервером.
 +<code bash>
 +sudo dnssec-keygen -b 512 -a HMAC-MD5 -v 2 -n HOST dyndns.my
 +</​code>​
 +В результате этой операции в каталоге появляются два файлика - **Kdyndns.my.+157+48025.key** и **Kdyndns.my.+157+48025.private**. Из первого файла нам будет необходим только набор символов после "157 ". Именно после пробела начинается тело ключа.
 +Создаем скрипт обновления доменных зон.
 +<code bash>
 +sudo nano ddns.sh
 +</​code>​
 +Вставляем туда текст.
 +<code bash>
 +#!/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
 +</​code>​
 +Сохраняем. Затем даем права на исполнение.
 +<code bash>
 +sudo chmod +x ddns.sh
 +</​code>​
 +Создаем символическую ссылку в каталог **/​usr/​sbin**,​ чтобы не добавлять в пути скрипт обновления зон. Это не обязательно,​ будет просто не лишним для того, чтобы из консоли набирать команду без путей.
 +<code bash>
 +sudo ln -s /​etc/​ddns/​ddns.sh /​usr/​sbin/​ddns_update
 +</​code>​
 +Раз добавили,​ то в /​etc/​crontab будем использовать его.
 +
 +==== Настройка серверной части ====
 +Настройка сервера имен заключается в прописывании домена и установке разрешения на обновления записей **A** доменных имен с динамическими IP.
 +Переходим в каталог bind.
 +<code bash>
 +cd /etc/bind/
 +</​code>​
 +<code bash>
 +sudo nano dnskeys.conf
 +</​code>​
 +Вставляем туда текст и тело ключа, о котором упоминалось в предыдущем разделе.
 +<code bash>
 +key "​dyndns.my"​ {
 +        algorithm hmac-md5;
 +        secret "​тут тело ключа";​
 +};
 +</​code>​
 +
 +Добавляем в файл **/​etc/​bind/​named.conf** строчку с указанием файла, где определен ключ.
 +<code bash>
 +include "/​etc/​bind/​dnskeys.conf";​
 +</​code>​
 +Следующим шагом необходимо в файл **/​etc/​bind/​named.conf.local** прописать доменную зону, которой мы оперируем.
 +<code bash>
 +zone "​dyndns.my"​ {
 +        type master;
 +        allow-update {key dyndns.my;​};​
 +        file "/​etc/​bind/​pri.dyndns.my";​
 +};</​code>​
 +Необходимо будет создать и файл /​etc/​bind/​pri.dyndns.my с различными записями для домена. Он обычный,​ с минимально необходимым набором записей для функционирования домена,​ потому и нет необходимости рассматривать его в данной статье.
 +Рестартуем сервер имен для завершения и применения настроек.
 +<code bash>
 +sudo service bind9 restart
 +</​code>​
 +Теперь в каталог,​ предназначенный для веб страниц,​ помещаем очень простой скрипт на php.
 +<code bash>
 +sudo nano /​var/​www/​ip.php
 +</​code>​
 +
 +Вставляем туда код.
 +<code php>
 +<?php
 +echo $_SERVER["​REMOTE_ADDR"​];​
 +?>
 +</​code>​
 +
 +Если вы обратитесь к этому файлу через веб, к примеру,​ http://​dyndns.my/​ip.php,​ то, кроме своего IP адреса ничего не увидите. Что нам и требовалось. Клиент,​ с помощью curl, его и получает и обновляет информацию на сервере.
 +
 +Вот и все телодвижения по настройке серверной части.
 +
 +==== Настройка заключительная ====
 +
 +Доделываем клиента.
 +<code bash>
 +sudo nano /​etc/​crontab
 +</​code>​
 +Добавляем строчку.
 +<code bash>
 +*/15 *  * * *   ​root ​   /​usr/​sbin/​ddns_update
 +</​code>​
 +Это означает,​ что раз в 15 минут скрипт будет запускаться.
 +На этом настройка клиентской части закончена. Можно подождать 15 минут и убедиться,​ что наш хости работает пингом со стороннего сервера. А можно и выполнить команду.
 +<code bash>
 +sudo ddns_update
 +</​code>​
 +Для чего, собственно,​ мы и делали симлинк в /usr/sbin.
 +Если вы не получили в ответ выхлоп со словом **REFUSED**,​ значит вы все сделали правильно и можете быть счастливы.
 +
 +===== Выводы =====
 +На выходе мы получили вполне себе работающий сервис динамических имен. Есть, конечно,​ и существенный недостаток. Используемый ключ подходит для изменения любого поддомена из прописанных. Т.е., он один для всех. Это открывает простор для хулиганства,​ если кто-то упрет ключ. Поскольку,​ сервис делался для себя, то особых проблем это не вызовет. Ибо надо быть не совсем здоровым психически,​ чтоб хулиганить самому у себя. Возможно есть и решение,​ позволяющее каждый поддомен авторизовать по своему ключу, но целью данной статьи это не ставилось,​ потому гугля сильно и не терзалась.
 +
 +Большая просьба,​ при перепечатке данной статьи,​ указывать источник,​ в частности,​ этот ресурс.
 ===== Ссылки ===== ===== Ссылки =====
  
-  * [[FIXME]]+  * [[http://​forum.ubuntu.ru/​index.php?​topic=244234.0|Обсуждение статьи на форуме]]
  
-{{tag>​динамический_днс_своими_руками}}+{{tag>​динамический_днс_своими_руками ​dns сеть}}