четверг, 6 января 2011 г.

Установка и настройка DNS сервера Bind9 в Ubuntu.


В интернете имеется достаточно мануалов на данную тему, но пытаясь настроить по ним DNS сервер я столкнулся с рядом проблем, поэтому была написана данная статья с собственными рабочими настройками.

Устанавливаем bind:

#apt-get install bind9

Основные файлы конфигурации находятся в папке /etc/bind.

Если нам нужно чтобы наш сервер был кеширующим то добавляем в файл /etc/bind/named.conf.options следующую запись:

forwarders

{

0.0.0.0;

0.0.0.0;

};

0.0.0.0  заменяете на адреса основного DNS сервера.

Параметр listen-on указывает какой адрес должен прослушивать сервер, по умолчанию стоит any, но при желании можно изменить:

listen-on { 127.0.0.1; 86.111.91.19; };

Если у нас будет своя доменная, например example.com, то приступим к ее настройке.

Создадим файл /etc/bind/myzones.conf

В конец файла /etc/bind/named.conf добавим строку:

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

Отредактируем файл с нашими зонами /etc/bind/myzones.conf и добавим туда новую запись:

zone "example.com"

{

type master;

file "/etc/bind/db.example";

};

Файл /etc/bind/db.example хранит настройки отдельной зоны. Создадим его и добавим следующую запись:

$TTL 86400 ; (1 day)

@ IN SOA localhost. root.localhost.(

2011010601 ; Serial

10800 ; Refresh(3 hours)

900 ; Retry (15 minutes)

604800 ; Expire (1 week)

86400 ; Negative Cache TTL (1 day)

);

@ IN NS localhost.

@ IN A 86.111.91.19

www IN CNAME example.com.

Здесь важно точно расставить все знаки - после доменных имен обязательно должны стоять точки.

Перезапускаем сервер:

#rndc reload

И проверяем

# nslookup

> example.com

Server: 127.0.0.1

Address: 127.0.0.1#53

Name: example.com

Address: 86.111.91.19

Основная настройка завершена, все должно работать.

Но еще остается вопрос безопасности. Чтобы обезопасить себя, желательно изменить рабочие папки сервера.

Останавливаем процесс:

#/etc/init.d/bind9 stop

Отредактируем файл /etc/default/bind9. Строку

OPTIONS="-u bind"

Заменим на

OPTIONS="-u bind -t /var/lib/named"

Создадим новые директории:

#mkdir -p /var/lib/named/etc

#mkdir /var/lib/named/dev

#mkdir -p /var/lib/named/var/cache/bind

#mkdir -p /var/lib/named/var/run/bind/run

Переместим основной каталог с конфигурацией в новый:

#mv /etc/bind /var/lib/named/etc

Создадим символическую ссылку на новую директорию на случай обновления:

ln -s /var/lib/named/etc/bind /etc/bind

Создадим девайсы и выставим права на директории:

#mknod /var/lib/named/dev/null c 1 3

#mknod /var/lib/named/dev/random c 1 8

#chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random

#chown -R bind:bind /var/lib/named/var/*

#chown -R bind:bind /var/lib/named/etc/bind

Что бы не возникло проблем с доступом необходимо изменить файл /etc/apparmor.d/usr.sbin.named перед этим остановив сервис

/etc/init.d/apparmor stop

Старые пути к каталогам заменяем на новые. Вот так он выглядит после редактирования:

# vim:syntax=apparmor

# Last Modified: Fri Jun 1 16:43:22 2007

#include

/usr/sbin/named {

#include

#include

capability net_bind_service,

capability setgid,

capability setuid,

capability sys_chroot,

capability sys_resource,

# /etc/bind should be read-only for bind

# /var/lib/bind is for dynamically updated zone (and journal) files.

# /var/cache/bind is for slave/stub data, since we're not the origin of it.

# See /usr/share/doc/bind9/README.Debian.gz

#/etc/bind/** r, старый путь

/var/lib/named/etc/bind** r, #новый путь

/var/lib/bind/** rw,

/var/lib/bind/ rw,

/var/cache/bind/** rw,

/var/cache/bind/ rw,

# gssapi

/etc/krb5.keytab kr,

/var/lib/named/etc/bind/krb5.keytab kr,

# ssl

/etc/ssl/openssl.cnf r,

# dnscvsutil package

/var/lib/dnscvsutil/compiled/** rw,

/proc/net/if_inet6 r,

/proc/*/net/if_inet6 r,

/usr/sbin/named mr,

/var/lib/named/var/run/named/named.pid w,

/var/lib/named/var/run/named/session.key w,

# support for resolvconf

/var/run/named/named.options r,

# some people like to put logs in /var/log/named/ instead of having

# syslog do the heavy lifting.

/var/log/named/** rw,

/var/log/named/ rw,

}

Запускаем сервисы:

# /etc/init.d/apparmor start

# /etc/init.d/bind9 start

Все должно работать.

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

  1. listen-on-v6 - это для ipv6

    Поэтому для ipv4 нужно писать:
    listen-on

    ОтветитьУдалить
  2. Подскажите пожалуйста, у меня 2 сетевые карты (1 на модем для нета, 2-я для внутренней сети) DNS на сетку внутреннюю тоесть нужен, но чтото глючит , когла первую сетевуху включаешь((((

    ОтветитьУдалить
    Ответы
    1. listen-on { адрес }; Указываете адрес интерфейса на котором должен работать.
      А на первой сетевой настройки сети статические или DHCP?
      В файле /etc/resolv.conf должен быть указан ваш ДНС:

      nameserver 127.0.0.1

      Удалить
    2. /etc/resolv.conf там указаны только DNS ники виртуальной машины))). А nameserver 127.0.0.1 - это же одно и то же что и localhost ??? и свой внутренний ip же можно поставить на котором DNS-ник свой поднят??? я так понял. А так работает вроде все, только не нравятся названия 2 го ит д уровня, неужели нельзя просто сделать, как под виндой когда настраиваешь (windows server -> DNS server), чтобы просто было , например \\server или \\printer

      Удалить
  3. ребят все настроил конечно, но… Как сделать так, чтобы за место допустим принтера \\printer.example.com писать просто \\printer и получать доступ???? как сделать чтобы по первому уровню только заходило????

    ОтветитьУдалить
    Ответы
    1. в файле зоны добавьте запись:

      printer IN A х.х.х.х

      где х.х.х.х-ваш адрес

      Удалить
    2. /etc/bind/db.example в этот файл же???

      Если зона example.com как у вас то получается следующее:
      Пример записи: printer IN A 192.168.10.25 ; Можно создать ДНС запись сетевого принтера который находится по адресу 192.168.10.25

      доступ к нему по след ссылке получается \\printer.example.com , а я хочу чтобы просто \\printer

      Удалить
  4. доброго времени суток !


    сделал всё как написано в статье.... но при запуске apparmor (# /etc/init.d/apparmor start) происходит ошибка: AppArmor parset error for /etc/apparmor.d/urs.sbin.named in /etc/apparmor.d/urs.sbin.named at line 3: Coult not open '/urs/sbin/named'


    подскажите что не так... буду признателен !

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