The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Настройка Dynamic DNS на базе Bind9 и nsupdate
В данном руководстве описано как настроить динамическое обновление зоны DNS с
удаленной машины, например с DHCP сервера, или если адрес выдается динамически,
как при использовании ADSL. Описано как простое обновление зоны вручную, или по
крону, так и обновление зоны DHCP сервером при выдаче ip-адреса клиенту.
Настройка идентична для всех дистрибутивов и ОС (Linux, FreeBSD, Mac OS и
прочих систем где есть Bind9).

Итак, у нас есть две машины, dns-сервер, и клиент, который будет обновлять зону
в соответствии со своим ip-адресом.

На обоих машинах должен быть установлен bind9.

Настройку можно начать с генерации ключей, по которым будет происходить
авторизация клиента на dns-сервере, в примере ниже показано как сгенерировать
ключ, в примере я использую имя dnsupdater, вы можете поменять на нужное вам.
Генерировать ключи нужно на машине клиенте.

    dnssec-keygen -a hmac-md5 -b 128 -n USER dnsupdater

После выполнения команды в текущей директории вы найдете 2 файла с именем
Kdnsupdater.+157+31204.key и Kdnsupdater.+157+31204.private, последние пять
цифр в имени меняются каждый раз при генерации, и у вас они будут другие. Файл
с расширением .key является публичным ключем, он используется на сервере dns,
файл с расширением .private нужен для авторизации клиента.

Перейдем к настройке сервера, в директории с конфигурационными файлами bind9
(обычно это либо /etc/bind, /etc/namedb, /var/named)

Я настраивал сервер на линуксе, там это была директория /etc/bind, я буду
использовать ее в этом руководстве.

Создайте файл dnskeys.conf в директории /etc/bind, затем впишите туда данные о
нашем ключе, сгенерированном на машине клиента

    # cat Kdnsupdater.+157+31204.key

    dnsupdater. IN KEY 0 3 157 YmEIxrGd1w1dT6Kyo9CQtQ==

Так выглядит наш ключ, нам нужна только часть после цифры 157, а именно
YmEIxrGd1w1dT6Kyo9CQtQ== (она каждый раз новая, у вас будет другая)

В файл /etc/bind/dnskeys.conf впишите следующее (замените имя ключа и secret на ваши)

    key  dnsupdater {       
       algorithm hmac-md5;
       secret "YmEIxrGd1w1dT6Kyo9CQtQ==";
    };

Затем в файл /etc/bind/named.conf впишите в самый конец файла

    include "/etc/bind/dnskeys.conf";

Затем настроим зоны которые будут обновляться удаленно, в моем примере это зона
для домена example.com и зона для обратных записей для адресов 192.168.0.0/24,
ниже приведены примеры сразу для двух этих зон, обратите внимание на то, что
файлы зон для обновления должны быть созданы заранее, в них должны быть
прописаны SOA , NS, SERIAL и прочие стандартные настройки зоны.

    zone "example.com" {
      type master;
      file "master/example.com"
      allow-update { key dnsupdater; };
    };

    zone "0.168.192.in-addr.arpa" {
      type master;
      file "master/ptr/0.168.192.in-addr.arpa";
      allow-update { key dnsupdater; };
    };

После этого выполните команду rndc reload для применения настроек.

Небольшое отступление, если у вас установлена операционная система Ubuntu или
Debian, или у вас в системе используется apparmor то вам необходимо
перенастроить его, так как пользователь от которого работает DNS сервер bind9
не имеет права записи в каталог с файлами конфигурации /etc/bind, а удаленное
обновление зон как раз требует возможности записи в этот каталог от
пользователя bind. Исправить это можно отредактировав конфигурационный файл
apparmor для ограничения bind, найти его можно в директории /etc/apparmor.d/,
имя файла usr.sbin.named. Отредактируйте файл как показано в примере ниже


Значение по умолчанию:

    /etc/bind/** r,

Должно быть:

    /etc/bind/** rw,

После этого перезапустите apparmor и bind9.

Теперь сервер готов к удаленному обновлению зон, перейдем к конечной настройке клиента.

Создадим простой скрипт который будет парсить файл с командами для обновления
зон, в нем нам понадобится путь до второго ключа, с расширением .private, вы
можете положить его в директорию /etc/bind, и не забудьте сменить имя ключа в
скрипте на ваше.


    #!/bin/bash
    /usr/bin/nsupdate -k /etc/bind/Kdnsupdater.+157+31204.private -v $1

Сохраним данный скрипт с именем zonechange.sh и сделаем его исполняемым
командой chmod +x zoneupdate.sh

Затем создадим файл обновления зон, обновлять можно сразу несколько зон, по
очереди. В примере мы добавим обратную зону для адреса 192.168.0.1, удалим
обратную зону для адреса 192.168.0.15, и добавим поддомен test.example.com. Для
обновления существующих записей нужно сначала удалить старую, затем добавить новую.


    server ns.example.com
    zone 0.168.192.in-addr.arpa
    update delete 15.0.168.192.in-addr.arpa. 10800 IN PTR somedomain.example.com.
    update add 1.0.168.192.in-addr.arpa. 10800 IN PTR somedomain123.example.com.
    send
    zone example.com
    update add test.example.com. 10800 IN A 192.168.0.254
    send

Как видите, необходимо записи для обратной зоны и поддоменов указывать
полностью, и перед сменой зоны отправлять обновление для предыдущей. Так же
необходимо указывать TTL для каждой записи. Сохраните файл с именем changes,
или любым вам удобным, в директории со скриптом zonechange.sh.

Проверим работоспособность скрипта, выполните нижеприведенную команду для
отправки запроса на обновление наших зон на сервер

    ./zonechanhe.sh changes

Если все прошло успешно никакого вывода не последует, на сервере в логах можно
будет увидеть подробности изменения зон. У меня на сервере записи в файлах
внесенные удаленно появляются только после рестарта bind9, но работать начинают
сразу после отправки обновления с клиента, так что проверяйте работу обновления
не по наличию записи в файлах зон, а по запросу данной записи с сервера
посредством nslookup или dig.

Теперь можно перейти к настройке обновления записей зон при помощи dhcp
сервера. Настройки DNS мы менять не будем, они описаны выше, поэтому мы будем
пользоваться ими. Ключи так же возьмем из примеров выше. Настройка описана для
DHCP сервера isc dhcp3

В глобальные опции DHCP сервера внесите следующие правки (файл конфигурации dhcpd.conf)

    ddns-update-style interim;
    # Включение обновления dns записей для статично прописанных хостов
    update-static-leases on;

Затем добавим информацию о зонах которые будем обновлять, и информацию о ключе для авторизации.

Обратите внимание, записи о зонах и ключе вносятся так же как в конфиге bind,
но БЕЗ кавычек, в противном случае у вас будет ошибка синтаксиса.

    key dnsupdater {
      algorithm hmac-md5
      secret YmEIxrGd1w1dT6Kyo9CQtQ==;
    }

    zone 0.168.192.in-addr.arpa {
      primary ns.example.com;
      key dnsupdater;
    }

    zone example.com {
      primary dns;
      key dnsupdater;
    }

Далее пример конфига для клиента без фиксированного ip адреса

    host happylaptop {
      hardware ethernet 00:0a:39:22:da:39;
      option host-name "happylaptop";
      option domain-name "example.com";
      ddns-hostname "happylaptop";
      ddns-domain-name "example.com";
    }

Затем идет пример для группы хостов, или секции group в dhcpd.conf

    group {
      option domain-name "example.com";
      ddns-domainname "example.com";

      host happylaptop {
        hardware ethernet 00:0a:39:22:da:39;
        option host-name "happylaptop";
        ddns-hostname "happylaptop";
      }

      host dellstation  {
        hardware ethernet 00:b1:48:2a:ad:9c;
        option host-name "dellstation";
        ddns-hostname "dellstation";
      }
    }

Далее идет пример клиента со фиксированным ip адресом

    host jukebox {
      hardware ethernet 01:d0:06:b8:68:34;
      fixed-address 192.168.0.5;
      ddns-hostname "jukebox";
      ddns-domain-name "example.com";
      option host-name "jukebox";
      option domain-name "example.com";
    }

После сохранения настроек не забудьте перезапусить DHCP-сервер.

Ссылки по теме:
* http://www.semicomplete.com/blog/articles/dynamic-dns-with-dhcp
* http://ubuntuforums.org/showthread.php?t=713469
 
12.05.2010 , Автор: Stepanoff , Источник: http://sudouser.com/nastrojka-dynam...
Ключи: dns, bind, dhcp, dyndns / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / DNS

Обсуждение [ RSS ]
 
  • 1.1, twilight, 20:35, 13/05/2010 [ответить] [смотреть все]
  • +/
    до финта с apparmor дошел - дальше этот пионэрский бред не читал.
    Автор неосилятор, велика вероятность, что и с конфигом днс тоже самое.
    Аминь.
     
  • 1.2, shadow_alone, 23:45, 13/05/2010 [ответить] [смотреть все]
  • +/
    забыли про то, чтоб слушал не только на 127.0.0.1

    controls {
            inet 0.0.0.0 port 953 allow { 127.0.0.1; ваш_сервер;} keys { rndc-key; dnsupdater; };
            };

    Иначе ничего не выйдет.

     
     
  • 2.4, mike_t, 09:36, 14/05/2010 [^] [ответить] [смотреть все]
  • +/
    будет, это дефаул
     
  • 1.5, GribNik, 09:33, 17/05/2010 [ответить] [смотреть все]
  • +/
    Это все стихи, т.е. установка. Проза жизни начнеться при эксплуатации. К примеру, у меня эпизодически dhcpd перестает обновлять зоны. Логи при этом кристально чистые. Еще так бывает, что файл журнала не синхронизируется с зоной. Машинка некритичная, пока рестартую сервисы два раза в год, разбираться нет желания. У меня одного такие проблемы?
     
     
  • 2.6, Аноним, 16:42, 19/05/2010 [^] [ответить] [смотреть все]
  • +/
    Прочитайте мануал, станет все понятно почему файл не синхронизируется и как его ... весь текст скрыт [показать]
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor