Настройка bind9 во FreeBSD

Автор: Dark

Любой уважающий себя админ обязан иметь хотя бы один ДНС сервер. Может придется домен регистрировать, может в интернет выпускать локалку, или сделать свою зону, или отдать кому-то поддомен. Мало ли что?

Классическим ДНС сервером для unix систем является BIND (Berkley Internet Name Domain) или сокращенно named. В систему настройки ДНС исторически внеслись некоторые глупости, которые и по сей день вызывают недоумение у новичков, а потому, кто не понимает причины такого подхода, могут идти читать официальную документацию, а здесь вы видете шпаргалку, которую применяю я сам для своих нужд.

Итак, сначала установим... А вот на самом деле, named уже есть в штатной установке FreeBSD, но мы уж поставим что-нибудь посвежее, если из портов, то:

root@localhost# cd /usr/ports/dns/bind9 && make install

Либо из пакетов (что совсем просто):

root@localhost# pkg_add -r bind9

Особенностью полной сборки является утилита rndc, управляющая демоном named. А посему нам придется сгенерировать пару ключей для rndc и правильно их прописать. Поскольку named - это штатный демон для FreeBSD, то его конфиг находится в /etc/namedb (а не в /usr/local/etc/named, как обычно), а если еще точнее, то в /var/named/etc/namedb.

Итак запускаем rndc-confgen:

root@localhost# rndc-confgen

# Start of rndc.conf

key "rndc-key" {

algorithm hmac-md5;

secret "zDfVVNmsufD3PYiGeXNlmw==";

};

options {

default-key "rndc-key";

default-server 127.0.0.1;

default-port 953;

};

# End of rndc.conf

# Use with the following in named.conf,

# adjusting the allow list as needed:

# key "rndc-key" {

# algorithm hmac-md5;

# secret "zDfVVNmsufD3PYiGeXNlmw==";

# };

#

# controls {

# inet 127.0.0.1 port 953

# allow { 127.0.0.1; } keys { "rndc-key"; };

# };

# End of named.conf

Как мы видим, нам очень просто и наглядно дают понять что именно и в какой файл мы должны вписать, так и поступаем - делаем Copy/Paste в указанные файлы. Только не забываем, конечно, убрать комментарии ('#') в начале строки в из того, что указано для named.conf.

Cамое время вписать в /etc/rc.conf строку:named_enable="YES"

После чего лучше перегрузить компьютер, но если перезагружать очень не хочется, то можно запустить его командой /usr/sbin/named -t /var/named -u bind. Если на команду rndc reload сервер реагирует адекватно, значит все в порядке.

ДНС может использоваться следующими способами:

1. Кеширующий ДНС

2. Мастер ДНС - главный держатель зоны

3. Подчиненный ДНС - умеет скачивать доверенную зону, хранить у себя и обслуживать ДНС запросы на эту зону.

Итак наш named.conf:

#Это вносится от rndc-confgen

key "rndc-key" {

algorithm hmac-md5;

secret "zDfVVNmsufD3PYiGeXNlmw==";

};

controls {

inet 127.0.0.1 port 953

allow { 127.0.0.1; } keys { "rndc-key"; };

};

# В trusted вносим сервера вторичные, провайдерские, те которые могут скачивать зоны,

# то есть доверенные узлы. Остальным лишняя информация не нужна.

acl "trusted"

{

192.168.0.0/24;

127.0.0.1;

195.196.197.198;

195.196.197.199;

195.94.224.129;

};

# Описываем общие опции для всех зон:

options

{

directory "/etc/namedb";

pid-file "/var/run/named/pid";

dump-file "/var/dump/named_dump.db";

statistics-file "/var/stats/named.stats";

allow-transfer { trusted; }; # имеют права скачивать зону

allow-query { any; }; # имеют право отпралять запрос

allow-recursion { any; }; # позволять рекурсивные запросы

listen-on { any; }; # слушать ip со всех интерфейсов,

query-source address * port 53;

auth-nxdomain yes;

version "WinDNS 1.01"; # Просто для прикола

};

# как будут записываться логи

logging {

category lame-servers { null; };

category default { default_syslog;};

channel default_log {

file "/var/log/dns.log";

severity notice;

print-time yes;

print-category yes;

print-severity yes;

};

category queries { default_log;};

category xfer-in { default_log; };

category xfer-out { default_log; };

category security { default_log; };

category resolver { default_log; };

category client { default_log; };

category unmatched { default_log; };

category default { default_log; };

category database { default_log; };

};

# Для кеширующего ДНС-а нужна такая запись:

zone "." {

type hint;

file "named.root"; # обычно этот файл присутсвует в комплекте bind

};

# Зона локалхоста

zone "localhost" {

type master;

file "localhost.zone";

};

# описываем обратную зону для локалхоста

# для этого достаточно запустить скрипт sh /etc/namedb/make-localhost

zone "0.0.127.IN-ADDR.ARPA" {

type master;

file "localhost.rev";

notify no;

};

Файл /etc/named/localhost.zone

$ttl 1D

@ IN SOA dommain.ru. admin.domain.ru. (

2007110201 ;serial

108000 ;refresh

1800 ;retry

1209600 ;expiry

604800)

IN NS @

IN A 127.0.0.1

Пояснения:

1 Строка: "$TTL 1D" - Time To Live 1 Day. Именно со строчки TTL должен начинаться файл зоны. В противном случае named его не прочитает

2 строка: "@" (собачка :) - означает описанную зону в named.conf, в нашем случае localhost, IN - без комментариев, SOA (start of autherity кажется) ответсвенный сервер, dommain.ru. - наш домен (обязательно с точкой), admin.domain.ru. - наше мыло (ибо собачка используется как имя зоны). Во второй строке обязательно должна присутсвовать SOA-запись .

3 строка: серийный номер для обновления. Если в зону вносятся любые изменения номер должен быть увеличен. Обычно, номер делают как ГГГГ-ММ-ДД 01-99. Благодря, такой нехитрой формуле можно гарантировать возрастающую уникальность серийного номера зоны.

4 строка: обновляться каждые 30 часов

5 строка: повтроять через полчаса

6 строка: истечение срока 1209600 сек = 2 недели

8 запись типа: " IN NS @" - сокращенная, полная выглядит так:

localhost. IN NS @ или

@ IN NS @ что в сущности одно и то же из named.conf

Этой строкой мы объясняем кто будет мастер-сервером ДНС (выражение IN NS) для этой зоны. Как оказывается он сам и будет.

9 запись типа " IN A 127.0.0.1" тоже сокращенная, полный вариант описан чуть выше. Этой строкой мы объясняем на какой ip-адрес мы присваиваем имя localhost.

Синаксис достаточно труднопонимаемый, но принципиально несложный. Если изложено непонятно, то рекомендую почитать Handbook, написано как раз так, чтобы понял каждый.

Итак, после такого конфига у нас должен быть работающий кеширующий DNS-сервер. Пробуем:

root@localhost# rndc reload

server reload successful

root@localhost# echo "nameserver 127.0.0.1" > /etc/resolv.conf

root@localhost# host mail.ru

mail.ru has address 194.67.57.126

mail.ru has address 194.67.57.226

mail.ru has address 194.67.57.26

mail.ru mail is handled by 10 mxs.mail.ru.

В ответ на команду "host" приходит ответ, значит наш DNS на 127.0.0.1 работает. Вообщем, кеширующий ДНС мы запустили.

Теперь самое время прописать какую-нибудь зону. Например ounix.ru - домен второго уровня, полностью принадлежит нам. Тогда в /etc/namedb/named.conf вписываем:

zone "ounix.ru" {

type master;

file "ounix.ru";

allow-transfer { trusted;};

};

А в файле "ounix.ru" мы уже описываем нашу зону и все её поддомены, NS и MX записи:

$TTL 38400

@ IN SOA ns1.ounix.ru. admin.ounix.ru. (

2007102501 ;serial

108000 ;refresh

1800 ;retry

1209600 ;expiry

604800)

@ IN NS ns1.ounix.ru. ; Первый (master) DNS сервер

@ IN NS ns2.ounix.ru. ; Вторичный (slave) сервер зоны

@ IN MX 10 mail.ounix.ru. ; MX-запись на поддомен mail, опишем чуть позже

@ IN A 195.91.211.84 ; Сама зона присваивается машине 195.91.211.84

mail IN A 195.91.211.84 ; поддомен mail присваеваем ip 195.91.211.84

ns1 IN A 195.91.211.84 ; поддомен ns1 туда же

ns2 IN A 195.94.224.129 ; а вот поддомен ns2 уйдет на другой сервер

ftp IN A 195.91.211.84 ; Ну далее все должно быть понятно

www IN A 195.91.211.84

dark IN A 195.91.211.84

unix IN A 195.91.211.84

test IN A 195.91.211.84

jabber IN A 195.94.224.129

Хочется обратить внимание что NS и MX записи могут быть только на доменные имена, но никак не на ip адреса. Если мы пишем имя хоста полностью, обязательно ставим точку в конце, в противном случае к записи без точки добавляется имя зоны. Например, "mail" тождественно "mail.ounix.ru."

Таким образом, мы описали зону на master-сервере DNS. А как же вторичные сервера прописывают у себя зоны? А вот так:

zone "ounix.ru" {

type slave;

file "slave/ounix.ru";

masters { 195.91.211.84; };

};

Мы указали, что являемся подчиненным DNS сервером для этой зоны, что мастер у нас 195.91.211.84, что скачивать зону на ounix.ru надо с него, а хранить ее надо в /etc/namedb/slave/ounix.ru

И после перезапуска BIND-а, если нигде нет ошибок, на подчиненном сервере появится копия файла зоны ounix.ru

http://www.ounix.ru/index.php?page=article&id=20

Обновлено: 12.03.2015