Настройка DNS сервера BIND9 на Ubuntu 12.04+

14 мая 2014 г.

Разработывая сайты под Ubuntu, я столкнулся с необходимостью постоянно править файл /etc/hosts каждый раз, создавая новый сайт. Есть много средств, которые могут упростить этот процесс. Bind достаточно серьезный инструмент и подробностей по его использованию, лично я, пока не изучил. Здесь я представлю только один способ его использования, не особо подробный.

Практически все русскояычные howto скопипащенны с официальной документации и дают не рабочую конфигурацию. И если Вы пришли сюда из поисковика и вероятно Вы уже натыкались на одну и ту же пасту, где bind советуют запускать в chroot окружении, а так же опускают вопрос настройки зоны обратного просмотра, оставляя этот вопрос не решённым.
Bind очень чувствителен к ошибкам, и малейшие синтаксические ошибки не дадут загрузить файл зоны.

Если bind уже был установлен, то лучше сделать:
$ sudo apt-get purge -f bind9 && sudo apt-get install -f bind9

Создадим зону прямого просмотра для doomgate.local и зону обратного просмотра 0.168.192.in-addr.arpa, всё это будет происходить на системе Ubuntu (так же это должно работать на Debian Squeeze, CentOS и FreeBSD). Сервер имеет имя dns и в домене должен представляться как dns.doomgate.local

Ставим bind:
$ apt-get install bind9

Отредактируем /etc/bind/named.conf.options:
$ vim /etc/bind/named.conf.options

Приведём его в следующий вид:

acl mynetwork { 192.168.0.0/24; 127.0.0.1; };
options {
    directory "/var/cache/bind";
    auth-nxdomain no;
    listen-on-v6 { none; };
    allow-query { mynetwork; };
};
	

Опция acl ограничивает адреса, которые могут запрашивать зоны с нашего сервера. В данном примере это разрешено подсети 192.168.0.0/24.

И сразу же отправляемся редактировать файл /etc/bind/named.conf.local.
$ vim /etc/bind/named.conf.local

Добавляем в него файлы наших зон:

zone "doomgate.local" {
    type master;
    file "/etc/bind/db.doomgate.local";
    };
zone "0.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/0.168.192.in-addr.arpa.zone";
    };
	

Зона прямого просмотра

Создадим файл для зоны прямого просмотра:
$ vim /etc/bind/db.doomgate.local

Со следующим содержимым:

$TTL 30
$ORIGIN doomgate.local.
@ IN SOA        dns.doomgate.local. hostmaster.doomgate.local. (
                2011100902 ;Serial
                1d ;Refresh
                1h ;Retry
                1w ;Expire
                2h ) ;Negative Cache TTL
;
@               IN      NS      dns.doomgate.local.
@               IN      A       192.168.0.20
server                  IN      A       192.168.0.2
serverkvm               IN      A       192.168.0.5
webserver               IN      A       192.168.0.10
dns                     IN      A       192.168.0.20
avto-diagnostika        IN      CNAME   webserver
pma                     IN      CNAME   webserver
project-e1              IN      CNAME   webserver
	

Где:
$ORIGIN - оригинальное имя зоны;
dns.doomgate.local. - как я уже говорил имя днс-сервера (обязательна точка в конце);
hostmaster.doomgate.local. - email администратора сервера, только вместо символа @ используется точка;
Serial - серийный номер зоны в формате ГГГГММДД и номер текущего изменения за этот день. (Важно, при каждом изменении, нужно редактировать этот номер увеличивая его в большую сторону) Пример: 2011100901;
Refresh - период времени с которым вторичный сервер днс обращается к основному;
Retry - период с которым вторичный сервер будет повторять попытки при неудачном обновлении;
Expire - максимальное время использования данных на вторичном сервере, после которого делается обязательное обновление;
Negative Cache TTL - время актуальности данных в кэше запросов.

Далее идут записи имён хостов с ip-адресами или псевдонимами.
В конце этого файла нужно обязательно оставить пустую строку!

Зона обратного просмотра

Создадим файл для зоны обратного просмотра:
$ vim /etc/bind/0.168.192.in-addr.arpa.zone

И запишем туда следующее:

$TTL 30
$ORIGIN 0.168.192.in-addr.arpa.
@ IN SOA        dns.doomgate.local. hostmaster.doomgate.local. (
        2011100907 ;Serial
        1d ;Refresh
        1h ;Retry
        1w ;Expire
        2h) ;Negative Cache TTL
;
        NS      dns.doomgate.local.
2       PTR     server.doomgate.local.
5       PTR     serverkvm.doomgate.lcoal.
10      PTR     webserver.doomgate.local.
20      PTR     dns.doomgate.local.
	

В этом файле должны быть только записи типа PTR, никаких IN тут быть не должно.
И в конце этого файла так же должна быть пустая строка.

Обновим информацию о зонах
$ rndc reload
И проверим файлы зон на наличие ошибок командой:
$ named-checkconf -z
Мы должны получить примерно вот такой вывод:

zone doomgate.local/IN: loaded serial 2
zone 0.168.192.in-addr.arpa/IN: loaded serial 1
zone localhost/IN: loaded serial 2
zone 127.in-addr.arpa/IN: loaded serial 1
zone 0.in-addr.arpa/IN: loaded serial 1
zone 255.in-addr.arpa/IN: loaded serial 1
	

Если никаких ошибок нет, то продолжаем дальше, если же есть, то вероятнее всего Вы допустили ошибку где-то в конфигурационном файле.

Теперь необходимо отредактировать resolv.conf для того, чтобы наш сервер брал настройки сам с себя: $ vim /etc/resolv.conf

Приводим его в следующий вид:

search doomgate.local
domain doomgate.local
nameserver 127.0.0.1
	

И наконец настало время проверить работу нашего днс-сервера!

Проверим зону прямого просмотра:
$ nslookup webserver.doomgate.local

Server:         127.0.0.1
Address:        127.0.0.1#53
Name:   webserver.doomgate.local
Address: 192.168.0.10
	

И зону обратного просмотра:
$ nslookup 192.168.0.2

Server:         127.0.0.1
Address:        127.0.0.1#53
2.0.168.192.in-addr.arpa        name = server.doomgate.local.
	

Если у Вас обе эти команды отработали с аналогичным результатом, то поздравляю, Вам удалось настроить bind!