Настройка Bind9
![]() |
Рассмотрим примерный конфигурационный файл кеширующего DNS-сервера для отдельно стоящего сервера. Кэширующий сервер имён – это сервер имён, не отвечающий ни за какую зону. Он просто выполняет запросы от своего имени и сохраняет результаты для своего последующего использования. О сетевом сервисе DNS и настройке BIND9 еще можно почитать в Главе 25 Руководства FreeBSD. По умолчанию во FreeBSD используется одна из версий программы BIND (Berkeley Internet Name Domain), являющейся самой распространенной реализацией протокола DNS. |
DNS – это протокол, при помощи которого имена преобразуются в IP-адреса и наоборот. FreeBSD в настоящее время поставляется с сервером DNS – BIND9, предоставляющим расширенные настройки безопасности, новую схему расположения файлов конфигурации и автоматические настройки для chroot(8). К тому же BIND9 считается наименее уязвимой для внешних атак (FreeBSD автоматически запускает named в ограниченном окружении (chroot(8))). Эта версия DNS-сервера поддерживает списки управления доступом для запросов, передачи зон подчиненным (вторичным) DNS-серверам, а также динамические обновления своих зон с вышестоящих (первичных) DNS-серверов. Этой версией поддерживается стандарт динамических обновлений и уведомления об изменениях зоны, а так же он использует механизм инкрементальной передачи зоны, позволяющий подчиненным DNS-серверам запрашивать у вышестоящих DNS-серверов только изменения зональных данных. Это позволяет намного ускорить передачу зон.
На момент написания статьи я настраивал BIND 9.6.1-P1 на сервере под управлением FreeBSD 7.2-RELEASE.
# cat /etc/namedb/named.conf
// так выглядит комментарий
acl self { 127.0.0.1; }; // задаем переменную self, в которой перечислим ip-адреса нашего сервера,\
на которых будет работать bind
acl trust { self; }; // задаем переменную, в которой перечислим ip-адреса, с которых будет разрешено\
посылать запросы через наш DNS-сервер
// секция глобальных параметров
options {
directory "/etc/namedb"; // рабочий каталог bind, относительно которого ниже мы будем обозначать\
остальные каталоги
pid-file "/var/run/named/pid"; // pid-файл
dump-file "/var/dump/named_dump.db"; // расположение dump-файла корневой зоны при временной потере\
доступа ко всем корневым серверам
statistics-file "/var/stats/named.stats"; // расположение файла статистики
listen-on { self; }; // указываем bind на каких интерфейсах работать
listen-on-v6 { none; }; // запрещаем использовать IPv6
version "Hello, pal!"; // здесь вы можете указать версию вашего bind (для безопасности рекомендуют\
этого не делать)
allow-query { self; }; // от кого разрешаем принимать запросы
forwarders { 12.34.56.78; }; // для снижения нагрузки на свой сервер вы можете указать тут DNS-сервера\
своего провайдера
};
...
Теперь предлагаю немного отвлечься от настройки файла named.conf. Предлагаю вам рассмотреть интересный способ удаленного администрирования вашим DNS-сервером – утилита rndc. Для того, чтобы начать ей пользоваться, вам необходимо создать для нее конфигурационный файл и секретный ключ, с помощью которых она будет взаимодействовать с вашим bind. Для это задачи существует команда rndc-confgen.
Выполняя команду:
# rndc-confgen
вы получите на стандартном выводе что-то вроде:
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "34f88008d07deabbe65bd01f1d233d47";
};
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 "34f88008d07deabbe65bd01f1d233d47";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
Незакомментированную часть вывода помещаете в файл /etc/namedb/rndc.conf
# cat /etc/namedb/rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "34f88008d07deabbe65bd01f1d233d47";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
Закомментированную часть вывода команды rndc-confgen помещаете в конфигурационный файл /etc/namedb/named.conf:
...
key "rndc-key" {
algorithm hmac-md5;
secret "34f88008d07deabbe65bd01f1d233d47";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
...
В результате работы команды rndc-confgen в каталоге /etc/namedb/ должен появиться файл rndc.key, со следующим содержимым:
# cat /etc/namedb/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "34f88008d07deabbe65bd01f1d233d47";
};
Если у вас уже существовал там ключ, удалите его и замените новым.
Во всех случаях строчка secret “34f88008d07deabbe65bd01f1d233d47”; у вас должна быть одинаковой! Значение secret сгенерировала команда rndc-confgen.
Проверить сделанную вами работу вы сможете, когда полностью настроите свой DNS-сервер и запустите его. Тогда, при выполнении команды:
# rndc status
если вы увидите что-то похожее на:
version: 9.6.1-P1 (Hello, pal!) CPUs found: 2 worker threads: 2 number of zones: 14 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
— значит утилита rndc успешно подключилась к вашему bind, авторизовалась с помощью ключа, который мы только что создали, и запросила у bind статус DNS-сервера, что вам и показали.
Существует множество полезных ключей, с помощью которых данная утилита позволит вам мониторить и управлять вашим DNS-сервером. Достаточно запустить ее без аргументов и вы увидите доступные команды и помощь по ним. (Советую сразу же создать дамп-файл командой rndc dumpdb).
Продолжим пояснения по конфигурационному файлу /etc/namedb/named.conf:
...
zone "." {
type hint;
file "named.root"; //как получить актуальный файл корневой зоны написано ниже
};
zone "0.0.127.in-addr.arpa" {
type master;
file "master/localhost.rev";
notify no;
};
...
Файл localhost.rev выглядит примерно так:
# cat /etc/namedb/master/localhost.rev
$TTL 3600
@ IN SOA host.your_domain.ru. root.host.your_domain.ru. (
2009110601 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS host.your_domain.ru.
1 IN PTR localhost.your_domain.ru.
Следующими настройками мы будем собирать и записывать логи bind в различные фалы. Формат секции записи логов по каналам имеет вид:
channel имя-канала {
( file имя-файла
[ versions ( число | unlimited ) ]
[ size максимальный-размер ]
| syslog syslog_facility
| stderr
| null ); // мы тут будем указывать имя файла, в который будем писать логи этого канала (относительно\
рабочего каталога); количество версий файлов логов; размер файла, при котором\
происходит перенумерация файла лога. если количество версий указано не будет, логирование\
прекратиться по достижению указанного размера файла.
[ severity (critical | error | warning | notice |
info | debug [ уровень ] | dynamic ); ] // фильтр логов, кукую именно информацию мы будем заносить\
в этот канал
[ print-category yes-или-no; ] // заносим или нет в лог тип категории события
[ print-severity yes-или-no; ] // заносим или нет в лог тип "серьезности" собфтия
[ print-time yes-или-no; ] // заносим или нет в лог время события
};
Итак – это мои настройки в файле /etc/namedb/named.conf:
...
logging { // параметры логирования
channel default_ch { // обозначаем канал логирования default_ch
file "/var/log/named.log" versions 3 size 800k;
severity info;
print-time yes;
print-category yes;
};
channel security_ch { // обозначаем канал логирования security_ch
file "/var/log/security.log" versions 3 size 800k;
severity info;
print-time yes;
print-category yes;
};
channel transfer_ch { // обозначаем канал логирования transfer_ch
file "/var/log/transfer.log" versions 3 size 800k;
severity info;
print-time yes;
print-category yes;
};
channel lame-ch { // обозначаем канал логирования lame-ch
file "/var/log/lamers.log" versions 3 size 800k;
severity info;
print-time yes;
print-category yes;
};
category lame-servers { lame-ch; }; // пишем в канал lame-ch события от "кривых" DNS-серверов
category default { default_ch; }; // пишем в канал default_ch все, для чего нет собственного канала
category security { security_ch; }; // пишем в канал security_ch о событиях безопасности
category xfer-in { transfer_ch; }; // пишем в канал transfer_ch об отдаче зон
category xfer-out { transfer_ch; }; // пишем в канал transfer_ch о приеме зон
category notify { transfer_ch; }; // пишем в канал transfer_ch уведомления и факты регистрации
};
Теперь, после окончания настройки bind, вам осталось только с помощью команды wget или fetch получить актуальный файл корневой зоны (named.root) с сервера:
# fetch ftp://ftp.internic.net/domain/named.root
и положить его в каталог /etc/namedb/ с заменой существующего. Желательно периодически повторять эту процедуру, или настроить эту операцию через cron.
Теперь настало время запустить наш DNS-сервер:
/etc/rc.d/named start
Проверяем работу утилитой rndc, как было описано выше.
Для начала выполните команду:
# ps -ax | grep named 476 ?? Is 0:01,19 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/run/log -s 704 ?? Is 0:00,04 /usr/sbin/named -t /var/named -u bind 1022 p0 R+ 0:00,00 grep named
Если вы видите примерно это же – то процесс запущен.
Для пущей уверенности можно выполнить следующую команду (если она у вас есть):
# lsof -i tcp | grep LISTEN | grep named named 704 bind 20u IPv4 0xc845a000 0t0 TCP localhost:domain (LISTEN) named 704 bind 21u IPv4 0xc449a740 0t0 TCP localhost:rndc (LISTEN) named 704 bind 20u IPv4 0xc845a000 0t0 TCP localhost:domain (LISTEN) named 704 bind 21u IPv4 0xc449a740 0t0 TCP localhost:rndc (LISTEN) named 704 bind 20u IPv4 0xc845a000 0t0 TCP localhost:domain (LISTEN) named 704 bind 21u IPv4 0xc449a740 0t0 TCP localhost:rndc (LISTEN) named 704 bind 20u IPv4 0xc845a000 0t0 TCP localhost:domain (LISTEN) named 704 bind 21u IPv4 0xc449a740 0t0 TCP localhost:rndc (LISTEN) named 704 bind 20u IPv4 0xc845a000 0t0 TCP localhost:domain (LISTEN) named 704 bind 21u IPv4 0xc449a740 0t0 TCP localhost:rndc (LISTEN)
Теперь надо настроить наш сервер на работу с только что установленным DNS-сервером. Для этого вам необходимо внести изменения в файл /etc/resolv.conf. Приведите его к следующему виду:
# cat /etc/resolv.conf domain your_domain.ru nameserver 127.0.0.1
В комплекте с сервером BIND9 поставляются утилиты DNS dig, host и nslookup для исследования доменного пространства. С их помощью мы проверим, как работает только что настроенный и запущенный вами DNS-сервер.
Утилита host позволяет получать значения RR указанного типа для указанного доменного имени. Формат вызова:
host [ -управляющие-ключи ] [ -ключи-запроса ] доменное-имя-или-адрес [ опрашиваемый-сервер ].
По умолчанию, используется сервер, описанный при настройке клиентской библиотеки. Доменные имена считаются абсолютными и список поиска не используется. Более подробная информация на man host.
Утилита dig позволяет получать значения RR указанного типа для указанного доменного имени в формате файла зоны. В виде комментариев выдается масса вспомогательной информации, в т.ч. интерпретация пакета, полученного в ответ на запрос. Формат вызова:
dig [ @опрашиваемый-сервер ] [ -опции-dig ] доменное-имя [ тип-записи ] [ класс-записи ] [ +опции-запроса ]
По умолчанию, используется сервер, описанный при настройке клиентской библиотеки. Доменные имена считаются абсолютными и список поиска не используется. В качестве требуемого типа записи можно использовать также псевдотипы AXFR (зона передается только от уполномоченного сервера), ixfr=опорный-номер-версии и ANY, по умолчанию: A. В одной командной строке можно сделать несколько запросов.
Утилита nslookup объявлена устаревшей и навязчиво напоминает об этом при каждом запуске (даже документация не поставляется, отсутствует команда help и некоторые другие). Формат вызова:
nslookup [ -ключи ] доменное-имя [ опрашиваемый-сервер ]
Выполните команду:
# dig @127.0.0.1 ya.ru
; <<>> DiG 9.6.1-P1 <<>> @127.0.0.1 ya.ru
; (1 server found)
;; global options: +cmd
;; Got answer:
;; >>HEADER<< opcode: QUERY, status: NOERROR, id: 51090
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;ya.ru. IN A
;; ANSWER SECTION:
ya.ru. 2843 IN A 213.180.204.8
ya.ru. 2843 IN A 77.88.21.8
ya.ru. 2843 IN A 93.158.134.8
;; AUTHORITY SECTION:
ya.ru. 2843 IN NS ns1.yandex.ru.
ya.ru. 2843 IN NS ns5.yandex.ru.
;; ADDITIONAL SECTION:
ns1.yandex.ru. 79700 IN A 213.180.193.1
ns5.yandex.ru. 79701 IN A 213.180.204.1
;; Query time: 2 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Dec 4 14:04:11 2009
;; MSG SIZE rcvd: 146
Если в результате ее работы вы видите примерно тоже самое – значит вам DNS-сервер отработал команду правильно.
Теперь выполните команду:
# host ya.ru ya.ru has address 77.88.21.8 ya.ru has address 93.158.134.8 ya.ru has address 213.180.204.8 ya.ru mail is handled by 10 mx.yandex.ru.
Если ваш DNS-сервер ответил примерно таким образом – значит он работает правильно!
Если данные команды не вернули никаких результатов, надо смотреть лог /var/log/messages на предмет ошибок, которые заносит туда ваш bind. Анализируя их, постарайтесь понять, с чем связана некорректная работа DNS-севера. Основным недосмотром является неправильная настройка сетевых файерволов.
В заключении хочу сказать о некоторых встроенных в bind командах диагностики.
- named-checkzone – проверяет синтаксис и целостность файлов зон. Такие же проверки выполняются каждый раз перед их загрузкой bind’ом. Но считаю полезным все-таки это делать перед их загрузкой сервером имен.
- named-compilezone – выполняет более строгие проверки, чем named-checkzone, т.к. в результате ее работы сформируется дамп актуальных зон, который в свою очередь будут использоваться named.
- named-checkconf – утилита проверки файла-конфигурации named.conf
Удачи!












Здравствуйте. У меня в локальной сети три компа, к нету имеет доступ только один и хочу чтобы так всё и осталось, но нужно оббновлять антивирусник, тему как это делать нашёл тут:http://wiki.drweb.com/index.php/%D0%9B%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%97%D0%B5%D1%80%D0%BA%D0%B0%D0%BB%D0%BE_%D0%BD%D0%B0_http_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5_%D0%B4%D0%BB%D1%8F_Dr.Web_7
Апач настроил прописал на своём и на компах в сети адреса DNS сервера, но не могу сам DNS сервер настроить. Подскажите как мне это сделать, или если можно настроики для BIND. Заранее благодарен.