Было решено использовать 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. Итак. Создаем директорию, где будет проходить весь процесс: # mkdir /usr/local/src # cd /usr/local/src Скачиваем дистрибутив с FTP сервера ftp.isc.org: # fetch ftp://ftp.isc.org/isc/BIND9/9.2.3/bind-9.2.3.tar.gz Распаковываем, и заходим в полученную папку: # tar -xzf bind-9.2.3.tar.gz # cd bind-9.2.3 Мы хотим что бы наш BIND 9 стал вместо штатного BIND 8. # ./configure --prefix=/usr --sysconfdir=/etc/namedb Далее, если конфигурация прошла успешно, приступаем к сборке пакета: # 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 peter Exp $ ; ; 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 В ответ на этот запрос мы должны получить некий положительный ответ, например: # dig @127.0.0.1 ya.ru ; <<>> DiG 9.2.1 <<>> @127.0.0.1 ya.ru ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36843 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0 ;; QUESTION SECTION: ;ya.ru. IN A ;; ANSWER SECTION: ya.ru. 36000 IN A 213.180.193.123 ;; AUTHORITY SECTION: ya.ru. 36000 IN NS ns1.yandex.ru. ya.ru. 36000 IN NS ns2.yandex.ru. ya.ru. 36000 IN NS ns3.yandex.ru. ya.ru. 36000 IN NS ns.ispm.ru. ;; Query time: 2639 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Jun 13 22:28:50 2004 ;; MSG SIZE rcvd: 122 Если ответа нет, идем смотреть логи системы в /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-серверу: # nslookup yandex.ru Server: localhost.domain.com Address: 127.0.0.1 Non-authoritative answer: Name: yandex.ru Address: 213.180.216.200 Если получен ответ, аналогичный тому, что вы видите выше, значит, обращение происходит успешно. С целью уменьшения трафика от вашего 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, при необходимости исправив список разрешенных для авторизации хостов: key "rndc-key" { algorithm hmac-md5; secret "SW8ldl5IOMfhvlqxyRuRVw=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; #Конец секции для named.conf Теперь нужно добавить в самое начало файла конфигурации DNS сервера (named.conf) следующую секцию файла rndc.conf: key "rndc-key" { algorithm hmac-md5; secret "SW8ldl5IOMfhvlqxyRuRVw=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; После этого можно перезапустить named: # killall -HUP named Давайте проверим, работает ли наша утилита для удаленного администрирования 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. Параметры в файле доменной зоны.
|