From: Dmitriy Donchenko <http://zmey.kahovka.net>
Newsgroups: http://ru-board.com
Date: Mon, 18 Jun 2004 14:31:37 +0000 (UTC)
Subject: Кеширующий DNS сервер для локальной сети на основе BIND 9
Кеширующий DNS сервер для локальной сети на основе BIND 9
Этот документ описывает установку и начальную конфигурацию пакета BIND
9 для работы в качестве кэширующего DNS сервера для локальной сети.
Было решено использовать 9-ю версию пакета BIND, так как она наименее
уязвима для внешних атак.
BIND 9 поддерживает списки управления доступом для запросов, передачи
зоны, а также динамических обновлений. Кроме того, этой версией
поддерживается стандарт динамических обновлений и уведомления об
изменениях зоны, она может использовать механизм инкрементальной
передачи зоны, позволяющий вторичным DNS серверам запрашивать у
первичных серверов только изменения зональных данных. Это позволяет
ускорить передачу зон.
В качестве ОС на сервере установлена FreeBSD 4.10.
Получение, сборка и установка пакета BIND из исходных кодов
-----------------------------------------------------------
На момент написания статьи последней стабильной версией BIND 9
являлась 9.2.3.
Исходные коды BIND 9.2.3 доступны для загрузки с публичного FTP
сервера: ftp://ftp.isc.org/isc/BIND9/9.2.3/bind-9.2.3.tar.gz.
Итак.
Создаем директорию, где будет проходить весь процесс:
Далее, если конфигурация прошла успешно, приступаем к сборке пакета:
# make
# make install
На моей системе (FreeBSD 4.10) все собралось и установилось без
каких-либо проблем.
Проверяем версию named которая у нас теперь стоит:
# named -v
BIND 9.2.3
Пусть вас не пугает, что мы устанавливаем BIND, а для проверки
запускаем named. Так называется исполняемый файл, который, собственно
говоря, и выполняет роль DNS сервера.
На этом первый этап нашей затеи окончен, BIND 9 скомпилирован и
установлен в вашей системе, можно порадоваться за себя. :)
Установка BIND 9 из портов FreeBSD
----------------------------------
Если порты у вас обновляются регулярно, то переходим в соответствующую
директорию:
# cd /usr/ports/dns/bind9
Если не регулярно, то, вероятно, ваш BIND 9 нужно искать здесь:
# cd /usr/ports/net/bind9
Если портов у вас совсем нет, то устанавливайте BIND 9 из исходных
кодов (см. выше).
Итак делаем следующие шаги.
Переходим в каталог BIND9 в ваших портах и компиллируем BIND 9:
# cd /usr/ports/dns/bind9
# make PORT_REPLACES_BASE_BIND9=yes install
Данная операция необходима для того, чтобы BIND 9 был установлен
вместо штатного BIND 8.
Система сама скачает дистрибутив, распакует, сконфигурирует и
установит.
После того, как закончится установка, предлагаю убедиться, что теперь
у вас установлен именно BIND 9:
# named -v
BIND 9.2.3
На этом установка BIND 9 закончена, теперь можно переходить к
конфигурированию и запуску. :)
Маленькая ремарка: я предпочитаю установку из портов, потому что в
дальнейшем очень удобно обновлять пакет при помощи portupgrade,
например, и потому, что устанавливать из портов просто удобнее.
Начальное конфигурирование и запуск BIND 9
------------------------------------------
Если у вас был установлен BIND 8, который идет в поставке с системой,
то, вероятно, в папке /etc/namedb вы найдете файл конфигурации bind и
некоторые дополнительные файлы, которые могут понадобиться для работы
BIND. Если таких файлов у вас нет, никогда не было, и вы не знаете,
где их взять, придется писать их с нуля. Я, например, нашел эти файлы
в исходных кодах системы /usr/src/etc/namedb/.
Если вы обнаружили у себя соответствующие файлы, внимательно делайте
необходимые правки в них. Будьте особенно осторожны, если вы решились
писать конфигурационные файлы с нуля.
Итак, сначала создадим самый главный файл - файл конфигурации.
Возьмите свой любимый текстовый редактор и создайте новый файл с
именем named.conf. Содержание у него будет примерно такое:
# cat named.conf
--------------------
// Первой строкой задаем сети, которым будет разрешено
//посылать запросы через наш DNS-сервер:
acl "corpnets" { 192.168.1.0/24; 192.168.2.0/24; 127.0.0.1; };
options {
// Рабочая директория:
directory "/etc/namedb";
// Pid файл создавать тоже в рабочей директории, хотя можно
// написать любую другую, например /var/run/named/named.pid:
pid-file "named.pid";
// Разрешаем посылать запросы только от тех сетей, которые мы
// указали выше:
allow-query { "corpnets"; };
};
// Указатели корневых серверов:
zone "." {
type hint;
file "named.root"; };
// Настраиваем обратное отображение
// для адреса 127.0.0.1:
zone "0.0.127.in-addr.arpa" {
type master;
file "localhost.rev";
notify no; };
--------------------
С файлом named.conf пока все. Теперь нужно создать файлы, на которые
мы ссылаемся в named.conf, а именно: named.root и localhost.rev.
Файл named.root скачиваем c FTP-сервера ftp.internic.net:
# fetch ftp://ftp.internic.net/domain/named.root
Желательно периодически повторять эту процедуру или настроить на
автоматическое обновление через cron.
Файл localhost.rev можно написать вручную, а можно воспользоваться
специальной утилитой make-localhost, которая находится в исходных
кодах системы: /usr/src/etc/namedb/make-localhost.
Выглядит он примерно так:
# cat localhost.rev
--------------------
; From: @(#)localhost.rev 5.1 (Berkeley) 6/30/90
; $FreeBSD: src/etc/namedb/PROTO.localhost.rev,v 1.6 2000/01/10 15:31:40 peterExp $
;
; This file is automatically edited by the 'make-localhost' script in
; the /etc/namedb directory.
;
$TTL 3600
@ IN SOA zm.domain.com. root.zm.domain.com. (
20040603 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS zm.domain.com.
1 IN PTR localhost.domain.com.
--------------------
С файлом localhost.rev тоже закончили.
Теперь можно попробовать запустить и проверить наш bind:
# named
# ps -ax|grep named
Если процес запущен и работает, пробуем послать запрос через наш
DNS-сервер:
# dig @127.0.0.1 ya.ru
В ответ на этот запрос мы должны получить некий положительный ответ,
например:
Если ответа нет, идем смотреть логи системы в /var/log/messages,
читаем, что нам пишет наш bind, и пытаемся понять, с чем это может
быть связано.
Надеюсь, вы догадаетесь при необходимости настроить соответствующим
образом ваш фаервол для работы DNS-сервера.
Если положительный ответ получен, значит ваш DNS-сервер работает и
теоретически может обслуживать вашу сеть :)
Теперь давайте настроим ваш компьютер на работу с установленным
DNS-сервером. Для этого необходимо внести изменения в файл
/etc/resolv.conf. Выглядеть он будет примерно следующим образом:
# cat /etc/resolv.conf
# Ваш домен
domain domain.com
# IP адрес либо 127.0.0.1 либо адрес вашей машины
nameserver 127.0.0.1
Проверяем, обращается ли ваша машина к установленному DNS-серверу:
Если получен ответ, аналогичный тому, что вы видите выше, значит,
обращение происходит успешно.
С целью уменьшения трафика от вашего DNS сервера имеет смысл указать
ему адреса DNS серверов вашего провайдера. В этом случае при попытке
резольвинга DNS имени ваш DNS сервер будет сначала обращаться к кэшу
на сервере провайдера.
Для этого необходимо добавить в наш файл конфигурации (named.conf)
опцию forwarders.
В секции options добавляем следующую строку:
forwarders { 195.5.45.17; };
Не забудьте изменить IP адрес на адрес DNS сервера вашего провайдера.
Секция options в файле конфигурации должна выглядеть вот так:
options {
directory "/etc/namedb"; // Working directory
pid-file "named.pid"; // Put pid file in working dir
allow-query { "corpnets"; };
forwarders { 195.5.45.17; };
};
После изменения файла конфигурации необходимо перестартовать named,
для чего можно воспользоваться командой:
# killall -HUP named
Настройка DNS-сервера для работы с утилитой удаленного администрирования rdnc
-----------------------------------------------------------------------------
Теперь настроим наш DNS сервер для работы с утилитой удаленного
администрирования rndc, которая в дальнейшем вам очень пригодится.
Чтобы решить эту задачу, нам необходимо создать файл конфигурации для
утилиты rndc.conf и добавить несколько строк в конфигурационный файл
нашего сервера.
Копируем содержимое файла /usr/sbin/rndc-confgen в файл
/etc/namedb/rndc.conf, который будет служить конфигурационным файлом
для утилиты rndc:
# /usr/sbin/rndc-confgen > /etc/namedb/rndc.conf
В результате выполнения этой команды мы получим файл rndc.conf
примерно следующего содержания:
# Начало файла rndc.conf
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "SW8ldl5IOMfhvlqxyRuRVw==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# Конец файла rndc.conf
# Начало секции для named.conf
# Для использования ключа авторизации необходимо добавить следующие строки в файл
# named.conf, при необходимости исправив список разрешенных для авторизации хостов:
Давайте проверим, работает ли наша утилита для удаленного
администрирования DNS сервера:
# rndc status
number of zones: 3
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
server is up and running
Если выполнение данной команды прошло успешно, и вы получили примерно
то, что получилось выше, значит утилита смогла подключиться к вашему
named, успешно авторизовалась при помощи ключа, который мы создали, и
попросила показать статус DNS сервера.
При помощи утилиты rndc можно делать очень много различных операций с
вашим DNS сервером. Запустите ее без аргументов и увидите список
доступных команд. :)
На этом установка и конфигурация вашего DNS сервера закончена. После
ее окончания должен получиться DNS сервер, который может обслуживать
вашу локальную сеть, использовать кэш DNS-сервера провайдера для
оптимизации распознания имен Интернет и поддерживает удаленное
управление при помощи утилиты rndc.
В следующей части статьи мы рассмотрим такие темы, как:
1. Настройка DNS сервера для поддержки домена.
2. Повышение безопасности DNS сервера.
3. Параметры в файле доменной зоны.
Автор: Дмитрий Донченко.
Огромное спасибо всем кто помогал написать эту статью. Отдельное
спасибо bm-у, моему лучшему другу и коллеге, который высматривал
очепятки и неправильности в том, что я тут насочинял.
812 Прочтений • [Кеширующий DNS сервер для локальной сети на основе BIND 9 (bind cache dns freebsd)] [08.05.2012] [Комментариев: 0]