воскресенье, 29 июля 2012 г.

DNS (bind9) на Ubuntu 12.04 LTS


Задача: запустить DNS-сервер (bind9) на Ubuntu 12.04 LTS для
использования в локальной сети

Источники:

Выполнение:
I. Сначала поставим и настроим самый простой DNS-сервер.
1. Устанавливаем bind9:
sudo apt-get install bind9

2. Предположим, что наша зона DNS будет
называться jc.com , наш DNS-сервер имеет IP-адрес 192.168.5.1
Редактируем файл /etc/bind/named.conf.local :
sudo gedit /etc/bind/named.conf.local

Пишем:

zone "jс.com" {
type master;
file "/etc/bind/jс.com";};
zone "5.168.192.in-addr.arpa." {
type master;
file "/etc/bind/192.168.5.rev";};

Это две записи зоны (zone) для зоны прямого просмотра (jс.com) и обратного (5.168.192.in-addr.arpa.). Первая зона служит для разрешения IP-адреса по имени,
а вторая - наоборот. type master означает, что наш DNS сервер будет первичным для зоны jc.com. Запись file "/etc/bind/jс.com" указывает на расположение файла зоны.

3. Редактируем файл зоны прямого просмотра /etc/bind/jс.com:
sudo gedit /etc/bind/jс.com

Пишем:

$TTL 3h
@ IN SOA ubuntu.jc.com. root.jc.com 201207291 1d 12h 1w 3h
IN NS ubuntu.jc.com.
ubuntu IN A 192.168.5.1
www IN A 192.168.5.10

Во второй строке ubuntu.jc.com - имя корневого мастер-сервера зоны jc.com ,
root.jc.com - e-mail администратора зоны jc.com (e-mail пишется без @)
201207291 - серийный номер файла зоны
1d - период обновления
12h - повтор каждые 12 ч.
1w - период, в течение которого хранится информация
3h - время жизни (TTL) записи
IN NS ubuntu.jc.com. - задаем имя DNS-сервера, отвечающего за зону jc.com
ubuntu IN A 192.168.5.1 - задаем IP-адрес DNS-сервера, отвечающего за зону jc.com (это и есть наш сервер)
www IN A 192.168.5.10 - задаем IP-адрес хоста www.jc.com , который, к примеру, находится в локальной сети, и на нем запущен Apache.

4. Редактируем файл зоны обратного просмотра /etc/bind/192.168.5.rev:
sudo gedit /etc/bind/192.168.5.rev

Пишем:

$TTL 3h
@ IN SOA ubuntu.jc.com. root.jc.com 201207291 1d 12h 1w 3h
@ IN NS ubuntu.jc.com.
1 PTR ubuntu.jc.com.
10 PTR www.jc.com.

Запись 1 PTR ubuntu.jc.com. означает, что хост с именем ubuntu.jc.com имеет
IP-адрес 192.168.5.1 , а www.jc.com – 192.168.5.10

5. Перезапускаем bind9 :
sudo service bind9 restart

5.1 Скорее всего в /etc/resolv.conf сейчас прописан IP-адрес DNS-сервера вашего провайдера. Для того, чтобы проверить работу нашего DNS-сервера, закомментируем в данном файле все строки и добавим nameserver 127.0.0.1

6. Проверяем работу bind9, а именно зону прямого просмотра :
nslookup ubuntu.jc.com

Если все работает, результат должен быть таким:

Server: 127.0.0.1
Address: 127.0.0.1#53

Name: ubuntu.jc.com
Address: 192.168.5.1

7. Проверяем работу bind9, а именно зону обратного просмотра :
nslookup 192.168.5.10

Если все работает, результат должен быть таким:

Server: 127.0.0.1
Address: 127.0.0.1#53

10.5.168.192.in-addr.arpa name = www.jc.com

8. Если появляются ошибки, то смотрим /var/log/syslog:
 cat /var/log/syslog | grep jc.com | tail

II. Теперь можно сделать дополнительные настройки DNS-серверу.

9. Например, можно указать, на каких сетевых интерфейсах bind будет слушать свой 53 порт:
sudo gedit /etc/bind/named.conf.options

в разделе options дописываем строку

listen-on { 192.168.5.1; 127.0.0.1;};

и перезапустим bind9:
sudo service bind9 restart

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

10. -

11. Настроим логирование. Пусть логи будут лежать в /var/log/named/
Создаем этот каталог:
sudo mkdir /var/log/named/
sudo chown bind:bind /var/log/named/

Теперь правим /etc/bind/named.conf.options , а именно дописываем в конец файла следующий текст:

logging {
 channel "xfer" {
 file "/var/log/named/xfer.log" versions 3 size 10m;
 print-time yes;
 print-severity yes;
 severity info;
 };
channel "lame" {
 file "/var/log/named/lamers.log" versions 2 size 10m;
 print-time yes;
 print-severity yes;
 severity info;
 };
channel "config" {
 file "/var/log/named/conf.log" versions 3 size 10m;
 print-time yes;
 print-severity yes;
 severity info;
 };
channel "security" {
 file "/var/log/named/security.log" versions 3 size 10m;
 print-time yes;
 print-severity yes;
 severity info;
 };
channel "queries" {
 file "/var/log/named/queries.log" versions 3 size 10m;
 print-time yes;
 print-severity yes;
 severity info;
 };

//События связанные с получением зон
category "xfer-in" { "xfer"; };
//События связанные с передачей зон
category "xfer-out" { "xfer"; };
//События связанные с изменениями в зонах
category "notify" { "xfer"; };
//События связанные с некорректным делегированием
category "lame-servers" { "lame"; };
//События связанные с обработкой файла конфигурации
category "config" { "config"; };
//События связанные с запрещением/разрешением запросов
category "security" { "security"; };
//Запросы к серверу
category "queries" { "queries"; }; 
//Если для события канал не определен
category "default" { "default_syslog"; "default_debug";};
};

создаем означенные выше файлы логов и сразу меняем их владельца на bind:
cd /var/log/named
sudo touch xfer.log lamers.log conf.log security.log
sudo chown bind:bind xfer.log lamers.log conf.log security.log

Теперь перезапускаем bind:
sudo service bind restart

12. Сделаем еще несколько настроек. Снова правим /etc/bind/named.conf.options , а именно раздел options. В него добавляем:

version "DNS Server";
//если не планируется использование IPv6, погда строку listen-on-v6 { any; }; заменяем на
listen-on-v6 { none; };
//максимальное число параллельно обслуживаемых клиентов
recursive-clients 100
//указание DNS-серверов, к которым будет обращаться ваш DNS за разрешением имен
forwarders {первый dns-сервер провайдера; второй dns-сервер провайдера;};
forward only;

Конец. Если есть предложения по улучшению инструкции, пишите.

7 комментариев:

  1. Не пашет. Пишет что ни один из созданных файлов для прямои и обратной зоны не содержит NS запись. И отказывается их загружать типа из-за ошибки

    ОтветитьУдалить
    Ответы
    1. Понял в чем дело. У вас написано:
      $TTL 3h
      @ IN SOA ubuntu.jc.com. root.jc.com. 201207291 1d 12h 1w 3h
      IN NS ubuntu.jc.com.
      1 PTR ubuntu.jc.com.
      10 PTR www.jc.com.

      А надо писать так:
      $TTL 3h
      @ IN SOA ubuntu.jc.com. root.jc.com. 201207291 1d 12h 1w 3h
      @ IN NS ubuntu.jc.com. (в этой строчке не было сабаки)
      1 PTR ubuntu.jc.com.
      10 PTR www.jc.com.

      Удалить
    2. Большое спасибо Вам. Исправил.

      Удалить
  2. Добрый день.Тоже не сразу заработало.Вот на эту запись

    @ IN SOA ubuntu.jc.com. root.jc.com. 201207291 1d 12h 1w 3h

    Ругалось так
    named[3712]: zone 100.168.192.in-addr.arpa/IN: loading from master file /etc/bind/192.168.100.rev failed: no owner

    Убрал точку после root.jc.com и дело пошло!
    В целом материал отличный!Благодарю за статью!Хороший ресурс в принципе!

    ОтветитьУдалить
  3. Не сразу заработало. PTR настроил по этой статье: http://joyit.ru/administrirovanie/11-ptr-dns-bind-ubuntu-10-10.html

    ОтветитьУдалить
  4. зона обратного просмотра непашет

    ОтветитьУдалить