понедельник, 10 октября 2011 г.

Настройка DNS сервера BIND9 на Debian Squeeze howto

Всё время хотел сделать себе локальный домен для удобства работы с сайтами, и наконец в прошлые выходные мне это удалось. Поднял на Debian Squeeze bind в котором создал прямую и обратную зоны для домена doomgate.local. Попытку сделать подобное я уже предпринимал несколько раз, и в первые разы всё закончилось правкой файла hosts, но мне уж очень хотелось, избавиться от необходимости редактировать этот файл на разных системах каждый раз, и вот сейчас я расскажу как настроить свою зону в bind.

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

И так, приступим!

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

Ставим bind
# aptitude 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!

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

  1. 1. bind9 - это не днс сервер.
    2. домен local - неблагодарный. Советую сменить по известным обстоятельствам
    3. что-то я форвардинга dns не наблюдаю? или твой сервак на гугл не должен пускать?

    ОтветитьУдалить
  2. А я вот не делал обратных зон... Все-равно с внешним ip они не связаны (а провайдер - плохой и ему лень)

    ОтветитьУдалить
  3. 1. Berkeley Internet Name Daemon - открытая и наиболее распространённая реализация DNS-сервера.

    2. Это чисто внутренний домен, я его сделал исходя из тех соображений, что doomgate.ru у меня уже есть и некоторые субдомены на нём уже заняты, а этот домен предназначается чисто для моей локалки.

    3. Хожу куда угодно, никаких проблем.

    4. Зону обратного просмотра сделал чисто для себя. Да и вообще хотел сделать как правильно.

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

    ОтветитьУдалить
  4. BIND (Berkeley Internet Name Domain) is an implementation of the DNS protocols and provides an openly redistributable reference implementation of the major components of the Domain Name System, including:

    Domain Name System server
    Domain Name System resolver library
    Tools for managing and verifying the proper operation of the DNS server

    The BIND DNS Server, named, is used on the vast majority of name serving machines on the Internet


    Ссылку на офф. сайт кинуть? ))
    bind9.net
    Там этот отрывок на главной странице написан. DNS-сервер - это named, а bind9 - это целый комплекс)

    ОтветитьУдалить
  5. Домен local предлагаю переименовать, например, в my
    Так будет проще с локальными почтовиками (если такие вообще нужны)

    3. может быть сейчас в дебиане при установке конфиги как-то правятся... у меня в gnu/linux надо было форвардинг еще дописать

    4. это хорошо, а я ленив)

    ОтветитьУдалить
  6. Вообще же говоря в Дебиане по-моему только конфиг named.conf называется, а сервис всё-таки называется bind. А вот во FreeBSD да, named.

    Мне никогда не нравились зоны типа .my или или как у моего интернет-провайдера .nw. По одной простой причине - домен MY является официальным доменом Малайзии. И какие ещё изменения произойдут неизвестно. А вот домен .local явно никто не схватит.

    Все остальные конфиги дефолтные. Пробовал развернуть bind на FreeBSD 8.2 с незначительной правкой конфигов всё так же прекрасно заработало.

    А по-поводу почты, какие там могут быть подводные камни? Я не знаю как на счёт ближайшего, будущего, но вообще планирую развернуть почтарь.

    ОтветитьУдалить
  7. KorG, а вообще же, как говорит Майкл Лукас в своей книге "FreeBSD - подробное руководство" - решать споры относительно программного обеспечения нужно с оружием в руках.

    ОтветитьУдалить
  8. Как тебе домен .night ?

    Почтари (на примере постфикса и ексима) отказываются работать в домене .local
    Хотя в новых версиях эту "фишку" возможно убрали.

    ... а если нет оружия, то добудьте себе его в бою
    -)
    Да и спора-то тут нету никакого. Я, например, санось больше уважаю, нежели чем фрю. Решать чем пользоваться - тебе. Я лишь откомментировал для тех, кто возможно будет читать твои пост)

    ОтветитьУдалить
  9. Можно и так конечно, но тогда уж проще завести всё это в поддомен home.doomgate.ru единственное, что длинновато его писать каждый раз.

    ОтветитьУдалить
  10. Спасибо за статью. Не хватает нескольких вещей:
    - смена зоны $ORIGIN
    - DDNS из DHCP
    - настройки и записи для почтаря

    ОтветитьУдалить
  11. Спасибули за статью. Всё просто и понятно объеснено.

    ОтветитьУдалить
  12. nslookup webserver.mysite.local

    Server: 127.0.0.1
    Address: 127.0.0.1#53

    ** server can't find webserver.mysite.local: NXDOMAIN

    nslookup 192.168.0.2

    ** server can't find 2.0.168.192.in-addr.arpa.: NXDOMAIN

    ОтветитьУдалить
  13. Сергей, MX запись прописывается очень просто.
    В Файле зоны прямого просмотра:
    doomgate.local. IN MX 0 mail.doomgate.local.

    Игорь, выполните:
    named-checkconf -z
    И посмотрите в логах, из-за чего не удалось загрузить зону.

    К тому же нужно не забыть в /etc/bind/named.conf.options дать разрешение отвечать на запросы из своей сети:
    acl mynetwork {192.168.0.0/24; 127.0.0.1; };

    ОтветитьУдалить
  14. Подскажите, я настроил как вы описывали, всё нормально, все команды в терминале выдают то что написано в вашей статье, один вопрос, должна ли команда
    host serverkvm
    выдавать
    host not found
    ?

    Или это нормальное явление?

    Я такое спрашиваю потому как смотрю сейчас курсы по линукс системам, и там сейчас описывается настройка DNS сервера, я попробовал на виртуальной машине сделать, ничего не вышло, пишет то же что host not found.
    Если я сделаю например две виртуальные машины и на каждой настрою DNS то будет ли команда host выдавать мне ip-адрес машины? Или я чего не понимаю просто?

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