Copyright (C) 2004 М. Альхименко.
Оригинал статьи находится на http://lithium.opennet.ru
По всем вопросам обращайтесь на articles <at> lithium.opennet.ru
Любая публикация и перепечатка этого документа разрешается только с предварительного разрешения автора. При публикации запрещается каким-либо
образом изменять содержимое документа.
В настоящей статье будет рассмотрена установка djbdns, настройка и запуск кэширующего DNS-сервера из состава djbdns. Следует иметь в виду, что в djbdns кэширующий и полномочный DNS-сервера разделены. Обоснование этого читайте на странице DJB. Imho весьма разумно. Функциональность кэширующего DNS-сервера обеспечивает программа dnscache. Полномочный DNS-сервер реализуется программой tinydns, сервер зонных пересылок — axfrdns. Про эти и другие программы вы можете почитать на странице djbdns.
К несомненным достоинствам dnscache можно отнести как минимум НЕ более сложную настройку по сравнению с BIND, нетребовательность к ресурсам и намного более высокий уровень безопасности (автоматический chroot, авторство DJB и отсутствие упоминания рассылках по уязвимостям).
Внимательно читаем все, что есть на http://cr.yp.to/djbdns.html ;)
Перед установкой djbdns у вас должны стоять последняя версия daemontools
и ucspi-tcp (если вы хотите переносить зоны с вашего DNS-сервера на BIND).
Для запуска dnscache хватит и daemontools. Установка ucspi-tcp была ранее описана в
статье о qmail. Сведения о установке и работе с daemontools см. в
соответствующей статье.
# cd /usr/src
скачиваем и распаковываем исходники (со временем версия и путь могут измениться)
# wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
# gunzip djbdns-1.05.tar
# tar -xf djbdns-1.05.tar
# cd djbdns-1.05
создаем каталог для патчей, скачиваем их и накладываем.
# mkdir patches
# cd patches
# wget ftp://moni.csi.hu/pub/glibc-2.3.1/djbdns-1.05.errno.patch (патч для совместимости с glibc-2.3.1 и выше)
# wget http://www.legend.co.uk/djb/dns/round-robin.patch
(патч для поддержки алгоритма round-robin для dnscache (не tinydns!))
# cd ..
# patch -p1 < patches/djbdns-1.05.errno.patch
# patch -p1 < patches/round-robin.patch
собираем и устанавливаем:
# make
# make setup check
Отправляем отчет об установке DJB (наверное, для статистики)
# ( echo 'First M. Last'; cat `cat SYSDEPS` ) | mail djb-sysdeps@cr.yp.to
Для начала неплохо было протестировать возможность обращения с нашей машины к внешним DNS-серверами. Попробуйте сделать
пару запросов к полномочным DNS-серверам, например:
# host -t ns mail.ru 198.6.1.181
или
# dig @ 198.6.1.181 -t ns mail.ru
или
# dnsq a www.aol.com 192.203.230.10 (утилита из состава djbdns)
Адреса полномочных серверов могут измениться, так что лучше их уточнить, если что-то не будет работать.
Если Вы собираетесь просто пересылать все запросы другим DNS-серверам (вышестоящего провайдера или своим собственным),
то можете подставить их ip-адреса.
Теперь следует создать учетные записи, под которыми будут работать dnscache и
multilog, ведущий логи dnscache.
В руководстве DJB описано создание аккаунтов Gdnscache and Gdnslog, однако в RH9 мне это сделать не удалось, useradd
не нравились большие буквы, поэтому можете назвать их как dnscache и dnslog.
# adduser -d /none -M -s /bin/false -c "DJBDNS dnscache user" dnscache
# adduser -d /none -M -s /bin/false -c "DJBDNS dnslog user" dnslog
Теперь вам нужно определиться с двумя параметрами:
Первоначальная настройка dnscache осуществляется командой dnscache-conf. Она создает нужную структуру
каталогов, настраивает основные параметры dnscache и имеет следующие параметры запуска:
dnscache-conf acct logacct D ip
где
В файле /etc/dnscache/root/servers/@ в настоящий момент хранятся адреса корневых серверов Internet. Если Вы хотите,
чтобы ваш кэш просто пересылал запросы другим DNS-серверам выполните следующие команды ( в этом примере 10.53.0.1
— адрес DNS-сервера, на который будут пересылаться запросы клиентов):
# echo 10.53.0.1 > /etc/dnscache/root/servers/@
(в этот файл можно поместить несколько адресов, если серверов несколько.
В этом случае не забудьте использовать ">>")
# echo 1 > /etc/dnscache/env/FORWARDONLY (указывает кэшу только пересылать запросы, если не найдено совпадение
в собственном кэше)
Следует обратить внимание, что если у вас есть DNS-сервера, полномочные для определенной зоны (например, local или
mydomain.ru) то можно создать в каталоге /etc/dnscache/root/servers/ файлы с именами, соответствующими вашим зонам и в
них поместить адреса полномочных серверов. После этого кэш будет посылать запросы для этих зон напрямую указанным серверам.
Сейчас у нас есть только записи серверов для зоны ".".
Теперь, если вы явно указывали на каком ip слушать сокет, следует разрешить доступ для ваших подсетей к кэшу, т.к.
по умолчанию все запросы игнорируются. В качестве примера мы разрешим принимать запросы с адресов 127.0.0.1 и из
сети 192.168.0.0/24.
Для этого надо поместить файлы с именами, соответствующими адресам сетей в каталог /etc/dnscache/root/ip/:
# touch /etc/dnscache/root/ip/127.0.0.1
# touch /etc/dnscache/root/ip/192.168.0
Логика тут очень простая: если надо дать доступ для сети 192.168.0.0/24, создается файл 192.168.0, если для сети
192.168.0.0/16 или для всех подсетей, начинающихся с 192.168, то создается файл 192.168.
После этого следует дать знать daemontools о существовании нового сервиса и проверить его работу:
# ln -s /etc/dnscache /service
ждем 5 секунд и проверяем, работает ли сервис
# svstat /service/dnscache
/service/dnscache: up (pid 32342) 7 seconds
Смотрим параметры readproctitle (ps -auxww) (см. статью про daemontools)
на наличие ошибок.
После этого надо прописать на клиентах (если вы делали кэш доступным извне) и на самом сервере ip-адрес, который он слушает
в /etc/resolv.conf (параметр nameserver). Все остальные записи этого типа можно закомментировать. Выглядит это примерно так:
если сервер слушает сокет на 127.0.0.1 :
nameserver 127.0.0.1 #разумеется, что это прописывается только на самом сервере
если сервер слушает сокет на 192.168.0.1 :
nameserver 192.168.0.1 #прописывается и на сервере, и на клиентах.
Подробнее — man resolv.conf
Рассмотрим вкратце основные возможности настройки dnscache. Все
параметры представляют из себя файлы, сгруппированные в определенных каталогах:
Здесь находятся файлы, определяющие адреса сетей, которым разрешен доступ к кэшу. Например, для
сети 10.0.0.0/8 (адреса 10.*) следует создать файл с именем "10", для подсети 192.168.100.0/24 (адреса 192.168.100.*)
— файл "192.168.100". Для хоста 192.168.200.34 — файл с таким же названием.
# djbroot.sed
/^$/d
/^ *$/d
/^;/d
/^\./d
s/[A-Z]\.ROOT-SERVERS\.NET\. *.*A *//
и заменить полученными данными файл "@", использовав команды: