По-умолчанию, BIND устанавливается вместе с системой. Но лучше перепроверить версию.
Выполняем:
# /usr/sbin/named -v
BIND 9.8.1-P1
И смотрим – что у нас есть в портах:
# make search name=bind9 | less
Находим последнюю версию:
…
Port: bind99-9.9.1.2
…
Значит – установим более новую версию.
Не забываем обновить порты:
# portsnap fetch update
Переходим и запускаем конфигурирование:
# cd /usr/ports/dns/bind99
# make config-recursive
В первом окне выбираем опцию:
[*] REPLACE_BASE Replace base BIND with this version
что бы обновить установленную версию BIND-а.
ВАЖНО: каталог сервера named – /var/named/etc/namedb/, однако сервер работает в chroot-окружении, поэтому все пути указываются как /etc/namedb/, который в то же время является ссылкой на /var/named/etc/namedb/.
Проверить это можно так:
# ls -i /etc/namedb/ /var/named/etc/namedb/
/etc/namedb/:
94731 dynamic 94732 master 94735 named.conf 94736 named.root 94741 rndc.conf.sample 94750 rndc.key 94733 slave 94747 touch 94734 working
/var/named/etc/namedb/:
94731 dynamic 94732 master 94735 named.conf 94736 named.root 94741 rndc.conf.sample 94750 rndc.key 94733 slave 94747 touch 94734 working
С ключем -i указывается т.н. “номер инноды” (“inode number”). Если они совпадают – значит это один и тот же файл.
Приступаем к конфигурированию.
Создадим файлы логов и изменим владельца:
# touch /var/log/bind/named.log
# touch /var/log/bind/query.log
# chown -R bind:bind /var/log/bind/
Настроим дополнительное логгирование. В конец файла /etc/syslog.conf добавляем две строки:
!named
*.* /var/log/named.log
Создаем файл лога:
# touch /var/log/named.log
Устанавливаем владельца:
# chown bind:bind /var/log/named.log
Перезапускаем демон:
# /etc/rc.d/syslogd restart
Переходим в каталог сервера BIND и создадим копию файла конфигурации (на всякий случай):
# cd /var/named/etc/namedb/
# cp named.conf /home/setevoy/backups/configs/named.conf.default
Удалим старый файл named.conf:
# pwd
/var/named/etc/namedb
# rm named.conf
Создадим новый и заполним его:
options {
directory “/etc/namedb”;
dump-file “/var/named/data/cache_dump.db”;
pid-file “/var/run/named/pid”;
statistics-file “/var/named/data/named_stats.txt”;
memstatistics-file “/var/named/data/named_mem_stats.txt”;
listen-on port 53 { 77.120.106.40; };
# allow-query { localhost; };
# recursion yes;
allow-recursion{
127.0.0.1;
10.0.0.0/24;
};
forwarders {
77.120.112.133;
82.144.220.2;
82.144.220.7;
};
version “this is my bind :)”;
};
logging {
channel default-log {file “/var/log/bind/named.log”; severity debug; print-severity yes; };
category default {default-log;};
channel “querylog” { file “/var/log/bind/query.log”; print-time yes;};
category queries {querylog;};
};
zone “.” {
type hint;
file “named.root”;
};
zone “localhost” {
type master;
file “master/localhost-forward.db”;
};
zone “127.in-addr.arpa” {
type master;
file “master/localhost-reverse.db”;
};
zone “website.co.ua” {
type master;
file “/var/named/zones/master/website.co.ua”;
};
zone “setevoy.org.ua” {
type master;
file “/var/named/zones/master/setevoy.org.ua”;
};
zone “it-news.in.ua” {
type slave;
file “/var/named/zones/slave/it-news.in.ua”;
masters{46.164.129.74; };
};
Опции named.conf
Рабочая директория сервера BIND, менять не надо:
directory “/etc/namedb”;
Файл для хранения кеша ответов сервера:
dump-file “/var/named/data/cache_dump.db”;
Тут хранится запись номера PID демона named, менять не надо:
pid-file “/var/run/named/pid”;
Файл для хранения статистики запросов к серверу:
statistics-file “/var/named/data/named_stats.txt”;
Файл для хранения статистики использования памяти:
memstatistics-file “/var/named/data/named_mem_stats.txt”;
Указать определенный IP и порт для работы named (например – можно “завернуть” его только внутрь локальной сети):
listen-on port 53 { 77.120.106.40; };
Разрешить запросы к серверу всем:
allow-query { any; };
Разрешить рекурсивные запросы всем клиентам о любых доменах:
recursion yes;
Разрешить рекурсивные запросы только с определенных IP и/или сетей (более правильное решение):
allow-recursion{
127.0.0.1;
10.0.0.0/24;
};
Адреса серверов DNS, которым будем отправлять рекурсивные запросы, необязательный параметр, у меня указаны DNS дата-центра:
forwarders {
77.120.112.133;
82.144.220.2;
82.144.220.7;
};
Прячем версию нашего BIND:
version “this is my bind :)”;
Далее идет перечисление файлов зон.
Корневая всех доменов:
zone “.” {
type hint;
file “named.root”;
};
Наша локальная зона:
zone “localhost” {
type master;
file “master/localhost-forward.db”;
};
Обратная локальная зона (содержит PTR-запись):
zone “127.in-addr.arpa” {
type master;
file “master/localhost-reverse.db”;
};
Далее идет описание обслуживаемых доменов.
Для домена setevoy.org.ua это сервер будет primary DNS, т.е. основным сервером:
zone “setevoy.org.ua” {
type master;
file “/var/named/zones/master/setevoy.org.ua”;
};
Для домена it-news.in.ua мы будем secondary DNS, т.е. вторичным сервером:
zone “it-news.in.ua” {
type slave;
file “/var/named/zones/slave/it-news.in.ua”;
masters{46.164.129.74; };
};
Создадим файл зоны для setevoy.org.ua:
# cat /var/named/zones/master/setevoy.org.ua
$TTL 3600
@ IN SOA ns1.setevoy.org.ua. root.setevoy.org.ua. (
2012080401 ; Serial
3600 ; Refresh
900 ; Retry
3600 ; Expire
3600 ; Minimum
)
@ IN NS ns1.setevoy.org.ua.
@ IN NS ns3.dc.volia.com.
@ MX 10 mx.setevoy.org.ua.
@ IN A 77.120.106.40
www IN A 77.120.106.40
mx IN A 77.120.106.40
ns1 IN A 77.120.106.40
ВАЖНО: после каждого изменения строка Serial должна увеличиваться на 1 цифру в конце, иначе secondary NS не обновит у себя файл зоны домена. Подробно описывать файл не буду.
Перезапускаем named:
# service named restart
И смотрим логи /var/log/named/log, должно быть примерно такое:
Aug 3 23:48:11 akira named[1459]: all zones loaded
Aug 3 23:48:11 akira named[1459]: running
Одна из самых частых ошибок выглядит в логе так:
Aug 3 23:48:11 akira named[1459]: zone website.co.ua/IN: loading from master file /var/named/zones/master/website.co.ua failed: file not found
Aug 3 23:48:11 akira named[1459]: zone website.co.ua/IN: not loaded due to errors.
Ошибка была в самом файле зоны /var/named/zones/master/website.co.ua – не там поставил скобку.
Далее настроим утилиту rndc.
Выполняем команду:
# rndc-confgen
и получаем такое сообщение:
# Start of rndc.conf
key “rndc-key” {
algorithm hmac-md5;
secret “*****************************”;
};
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 “”*****************************”;
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { “rndc-key”; };
# };
# End of named.conf
Создаем файл rndc.conf и в него вписываем содержимое строк между # Start of rndc.conf и # End of rndc.conf:
# cat rndc.conf
# Start of rndc.conf
key “rndc-key” {
algorithm hmac-md5;
secret “*****************************”;
};
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:” добавляем в конец файла named.conf и убираем комментарии, получаем:
key “rndc-key” {
algorithm hmac-md5;
secret “*****************************”;
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { “rndc-key”; };
};
И перезагружаем named, пока старым способом:
# service named restart
Stopping named.
Starting named.
Теперь сервером можно управлять с помощью команд утилиты rndc.
Перезапустить named:
# rndc reload
WARNING: key file (/etc/namedb/rndc.key) exists, but using default configuration file (/etc/namedb/rndc.conf)
server reload successful
Проверить статус сервера:
# rndc status
WARNING: key file (/etc/namedb/rndc.key) exists, but using default configuration file (/etc/namedb/rndc.conf)
version: 9.9.1-P2 (this is my bind :))
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 38
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
Команд много, добавлю их попозже в другой статье.
Добавляем named в автозапуск при старте системы в файл /etc/rc.conf:
#Enable and configure BIND
named_enable=”YES”
named_uid=”bind”
named_chrootdir=””
named_flags=”-s”
И можно перезагрузить сервер для полной уверенности:
# shutdown -r now
Shutdown NOW!
shutdown: [pid 1953]
Во время загрузки пошли ошибки:
# less /var/log/bind/named.log | grep failed
error: zone it-news.in.ua/IN: loading from master file /var/named/zones/slave/it-news.in.ua failed: end of file
debug 1: managed-keys-zone: loading from master file managed-keys.bind failed: file not found
error: isc_stdio_read failed: end of file
Решение – создать файл managed-keys.bind в рабочем каталоге named:
# touch /var/named/etc/namedb/working/managed-keys.bind
# chmod bind:bind /var/named/etc/namedb/working/managed-keys.bind
Теперь проверим как сервер отвечает на запросы:
02:35:34 [setevoy@perun ~] $ dig @77.120.106.40 setevoy.org.ua
…
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61430
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;setevoy.org.ua. IN A
;; ANSWER SECTION:
setevoy.org.ua. 3600 IN A 77.120.106.40
;; AUTHORITY SECTION:
setevoy.org.ua. 3600 IN NS ns1.setevoy.org.ua.
setevoy.org.ua. 3600 IN NS ns3.dc.volia.com.
;; ADDITIONAL SECTION:
ns1.setevoy.org.ua. 3600 IN A 77.120.106.40
…
Вывод немного сократил, но основное видно – мы получили status: NOERROR и ответ ANSWER SECTION: setevoy.org.ua. 3600 IN A 77.120.106.40.
Проверим домен, для которого являемся secondary:
02:56:19 [setevoy@perun ~] $ dig @77.120.106.40 it-news.in.ua
…
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18743
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;it-news.in.ua. IN A
;; ANSWER SECTION:
it-news.in.ua. 600 IN A 77.120.106.52
;; AUTHORITY SECTION:
it-news.in.ua. 600 IN NS gamma.freehost.com.ua.
it-news.in.ua. 600 IN NS beta.freehost.com.ua.
it-news.in.ua. 600 IN NS alpha.freehost.com.ua.
Тоже все отлично.
В файл /etc/resolv.conf добавим наш сервер:
# cat /etc/resolv.conf
nameserver 127.0.0.1
Полезные ссылки:
http://www.lissyara.su/articles/freebsd/programms/bind/
http://www.lissyara.su/articles/freebsd/programms/named_9.7.0/
http://subnets.ru/blog/?p=38
http://muff.kiev.ua/content/bind-9-nastroika-dns-servera
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/network-dns.html
http://info.nic.ru/st/8/out_259.shtml