Постановка задачи: У нас есть сеть, у нас есть сервер, у нас уже настроен интернет на сервере. Но вот беда, - у провайдера периодически падает сервер имён (DNS) или частенько оказывается так сильно загружен, что скорость отдачи зон (резолвинг) оставляет желать лучшего. Устанавливаем собственный кэширующий DNS сервер (bind 9) с вымышленной зоной исключительно для нашей сети. C последующим помещением его в "песочницу" (chroot). (У нас нет купленного доменного имени, но есть статический ip)
1. Устанавливаем Bind 9
2. Если все установилось без ошибок то останавливаем его
Из соображений безопасности лучше запускать Bind в chroot среде, для этого проделайте несколько простых операций.
3. Отредактируйте файл /etc/default/bind9, туда надо добавить строку о среде chroot которая будет находится у нас в /var/lib/named.
Измените строку OPTIONS=” -u bind” на OPTIONS=”-u bind -t /var/lib/named”
Замечание: Здесь важно то, что изменять надо файл в папке default, а не в папке init.d!
4. Теперь создадим все необходимые для работы bind9 директории. кому привычнее в mc, кому из консоли.
5. Переместите директорию с конфигурацией bind9 из /etc в /var/lib/named/etc:
6. Создадим символическую ссылку на новую директорию с файлами конфигурации bind на случай если в дальнейшем вы соберётесь обновить пакет, это поможет избежать проблем.
7. Создадим необходимые устройства и установим права на каталоги
8. Далее надо немного изменить стартовый скрипт демона sysklogd для того что бы сообщения bind попадали в syslog. Отредактировать надо файл /etc/default/sysklogd, измените там строку SYSLOGD="" на SYSLOGD="-u syslog -a /var/lib/named/dev/log"
Опять же очень многие пытаются найти сточку SYSLOGD="" в файле /etc/init.d/sysklogd а её там нет и быть не должно – смотреть надо в директории /etc/default/sysklogd. Иногда sysklogd ругается на опцию «-u»,тогда укажите SYSLOGD="-a /var/lib/named/dev/log".
И перезапуск службы:
Замечание: От себя добавлю, что при настройке в Lenny я уже службы такой не нашел. Появилась служба более глобального масштаба – rsyslog объединяющая две службы syslogd и klogd. Поэтому надо идти в папку /etc/rsyslog.d и создать там файл bind-chroot.conf (владелец root, прав достаточно будет 640)
server:/# touch /etc/rsyslog.d/bind-chroot.conf
server:/# chown root:root /etc/rsyslog.d/bind-chroot.conf
server:/# chmod 640 /etc/rsyslog.d/bind-chroot.conf
server:/# vim /etc/rsyslog.d/bind-chroot.conf
Для того, чтобы Bind 9 на платформе Lenny помещенный в chroot сумел найти системный лог добавьте в этот файл только одну строчку:$AddUnixListenSocket /var/lib/named/dev/log
Вроде бы всё, – можно настраивать сам сервер имен... Но давайте заранее создадим папку /var/lib/named/var/log для последующего хранения файла с логами:
Вот теперь можно приступать к настройке DNS сервера.
1. I этап - настройка зон – создаем отдельный файл конфигураций для наших зон ( в данном случае у нас будет одна зона описывающая несуществующий домен .ex):
2. Теперь отредактируем файл конфигурации нашей зоны .ex (имя вашего домена)
в файл вносим следующее (.ex - имя вашего домена)
В данном случаем мы специально создаем «несуществующую зону», так как настраиваем BIND для локальной сети – основная задача настроить кэширующий ДНС с возможностью обработки локальных имен/адресов (посредством создания зоны .ex и прямой и обратной зоны для локальной сети 192.168.1.0/24)
3. Теперь создадим файл зоны (прямой) для локальной сети
и заполните файл как показано ниже
$TTL 86400 ; 1 day
@ IN SOA ex. root.ex. (
2009031404 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
@ IN NS ns.ex.
ns A 127.0.0.1
server A 192.168.1.1 ; адрес вашего сервера в вашей сети
Замечание: Обратите внимание на так называемый серийный номер зоны(serial). Дело в том, что сервер имён не использует конфигурации с тем же серийным номером или младше чем был указан. Поэтому, всякий раз, когда Вы вносите исправления в любой из файлов зон, - обязательно "увеличивайте" этот номер на какое то значение. Я делаю так: за первую часть - беру дату последнего редактирования файла в фомате (YYYYMMDD)+ сколько раз редактировался этот файл в этот день (01,02,03,04...) Так, по-моему, удобнее!
4. Теперь создадим файл обратной зоны для локальной сети local.rev
и заполните его:
$TTL 604800
@ IN SOA ex. root.ex. (
2009031404 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
1 PTR server.ex.
5.Редактируем файл /var/lib/named/etc/bind/named.conf.options
и впишите туда
6. Напоследок отредактируем файл /var/lib/named/etc/named.conf
во первых включим в конце в конец файла наш файл зон
В начале файла, до включения файла с опциями (named.conf.options), создадим список acl для указания, что будет обслуживать наш сервер BIND, указав нашу подсеть, обратную петлю и оба ДНС провайдера
acl homenet {
192.168.1.0/24;
127.0.0.1;
82.209.240.241;
82.209.243.241;
};
Для возможности работы передачи зоны с подписью TSIG включаем rndc.key и указываем кто сможет управлять нашим сервером и по какому порту controls
include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys {rndc-key;};
};
И в конце файла добавляем настройку обратной зоны для локальной сети
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/local.rev";
};
и подключаем файл с нашей зоной myzones.conf
Для того, чтобы логи собирались в отдельный файл named.log, и не "сорили" в системные файлы – создадим в нашей "песочнице" (в папке, созданной ранее /var/lib/named/var/log), файл для логов и сделаем символическую ссылку в обычную папку log:
И добавим в файл конфигурации в самый конец детальную настройку работы логов:
logging {
channel myfile {
file "/var/log/named.log" versions 10 size 1m;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
category config {
myfile;
};
category default {
myfile;
};
category queries {
myfile;
};
// Вот LAME сервера лучше сразу сбрасывать в null. Достают они ну просто
// катастрофически! (Для тех кто в танке, - это когда сервер не обслуживает
// делегированную ему зону)
category lame-servers {
null;
};
};
7. В итоге, если убрать комментарии и свести все воедино файл named.conf приобретет такой вид:
acl homenet {
192.168.1.0/24;
127.0.0.1;
82.209.240.241;
82.209.243.241;
};
include "/etc/bind/named.conf.options";
include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys {rndc-key;};
};
zone "." {
type hint;
file "/etc/bind/db.root";
};
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/local.rev";
};
include "/etc/bind/myzones.conf";
logging {
channel myfile {
file "/var/log/named.log" versions 10 size 1m;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
category config {
myfile;
};
category default {
myfile;
};
category queries {
myfile;
};
category lame-servers {
null;
};
};
Замечание: Заметьте, что по умолчанию обратная зона в стандартной установке отключена и два файла конфигурации просто не задействованы: db.empty и zones.rfc1918 - с учетом того, что поддержка отключена в файле named.conf.local:
// Do any local configuration here // Consider adding the 1918 zones here, if they are not used in your // organization // include "/etc/bind/zones.rfc1918";
Смело можно удалить все три этих файла, а из файла конфигурации named.conf, удалить в самом конце включение файла named.conf.local. Мы ведь уже создали свои файлы зон (прямую и обратную) для обслуживания локальной сети :)
8.Изменим файл /etc/resolv.conf, вписав туда свой домен первой строкой, в нашем случае это
9. Перезапускаем bind9 и перечитываем файлы зон
У меня оказалось, что утилита nslookup и dig не установлена – пришлось поставить пакеты hosts и dnsutils командой
Замечание: В Lenny пакет host а не hosts!
10. И проверка на сервере:
server:/# nslookup
> set q=any
> localhost
Server: 82.209.240.241
Address: 82.209.240.241#53
localhost
origin = localhost
mail addr = root.localhost
serial = 1
refresh = 604800
retry = 86400
expire = 2419200
minimum = 604800
localhost nameserver = localhost.
Name: localhost
Address: 127.0.0.1
> 127.0.0.1
Server: 82.209.240.241
Address: 82.209.240.241#53
1.0.0.127.in-addr.arpa name = localhost.
> ya.ru
Server: 82.209.240.241
Address: 82.209.240.241#53
Non-authoritative answer:
ya.ru mail exchanger = 10 mx1.yandex.ru.
ya.ru mail exchanger = 10 mx2.yandex.ru.
Name: ya.ru
Address: 213.180.204.8
ya.ru nameserver = ns5.yandex.ru.
Authoritative answers can be found from:
ya.ru nameserver = ns1.yandex.ru.
ya.ru nameserver = ns5.yandex.ru.
mx1.yandex.ru internet address = 77.88.21.89
11. Проверка из локальной сети (Пуск->Выполнить->cmd):
Microsoft Windows XP [Версия 5.1.2600] (С) Корпорация Майкрософт, 1985-2001. C:\Documents and Settings\Dmitry Vl. Ivanov>nslookup Default Server: server.ex Address: 192.168.1.1 > set q=any > server.ex Server: server.ex Address: 192.168.1.1 server.ex internet address = 192.168.1.1 ex nameserver = ns.ex ns.ex internet address = 127.0.0.1
Ответов: 4
Ответ #6 дата : Mon July 19, 2010, 09:14:01