Документация по ОС FreeBSD Среда, 08.05.2024, 04:56
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » DNS

Конфигурирование DNS-сервера BIND

Введение

DNS-сервис является одним из важных сервисов для нормального функционирования Internet сети. Его основная задача состоит в определении соответствия между сетевыми адресами узлов сети и их удобочитабельными названиями. Существует два варианта определения этого соответствия - прямое и реверсивное определение. При прямом разрешении DNS-сервер по имени определяет и выдает сетевой адрес, а при реверсивном - по адресу ищет соответствующее имя. Это необходимо учитывать при настройке DNS-сервиса, поскольку для осуществления данных механизмов используются разные таблицы.

В операционной системе Sun Solaris, как, в прочем, и в других UNIX-системах, в качестве DNS-сервера используется BIND-сервер версии 8.х и выше. Хотя, нужно заметить, в Solaris-е есть возможность использования и сервера версии 4.х. Система определяет какой версии DNS-сервер запускать по тому, какой конфигурационный файл существует в каталоге /etc. Если используется файл - named.boot, то запускается старая версия сервиса, а если - named.conf - то, соответственно, новая (в Solaris 9 старой версии уже нет). Лучше естественно использовать BIND 8.х и выше. Если у вас остались конфигурационные файлы named.boot и вы хотите перевести ваш DNS-сервер на новую версию, то можно воспользоваться скриптом /usr/sbin/named-bootconf который конвертирует конфигурационный файл BIND 4.x в BIND 8.x.

Строгое имя сборки вычисляет кэш или контрольную сумму подписываемой сборки и тем самым гарантирует ее подлинность для клиентского приложения (или почти гарантирует).

Технология использования “strong name” определяется правилами использования криптографических ключей в конкретной организации. Рассмотрим алгоритм формирования строгих имен сборок в наиболее общем виде.

Конфигурирование BIND 8.x

Конфигурирование BIND-сервера состоит из двух этапов - настройка конфигурационного файла /etc/named.conf и создания и заполнения таблиц доменных зон.

BIND 8.х позволяет создавать 4 типа доменных зон:

·         master (раньше называлась - primary). Данный DNS-сервер является головным для данного домена.

·         slave (раньше называлась - secondary). Такие DNS-серверы хранят копии доменных зон, которые скачивают и периодически обновляют с master-сервера.

·         hint (раньше называлась - cache). Кэширующий сервер. Не хранит никаких таблиц зон, а просто собирает с объявленных root-серверов кэш резолвенных адресов. Используется для повышения эффективности работы DNS-сервера.

·         stub аналог slave зоны, но в отличие от нее таблиц зоны не хранит, только NS-записи, и просто перенаправляет запросы на объявленные DNS-сервера.

Очевидно, что вы можете настроить так ваш BIND-сервер, что он одновременно может обслуживать несколько разных доменных зон и для одних он может быть master-ом, для других - slave и тд.

В любом случае, какие-бы типы зон вы не настраивали, две зоны будут присутствовать у вас почти всегда - это зона hint и localhost (прямая и реверсивная).

Итак, начнем с просто кэширующего DNS-сервера. Создаем /etc/named.conf и прописываем там глобальные параметры и те две "стандартные" зоны о которых я только что упоминал:

//Конфигурационный файл /etc/named.conf для кэширующего DNS-сервера

options {
directory "/var/named";
listen-on { 192.168.6.1; localhost; };
version "Go away!";
allow-transfer { none; };
allow-query { 192.168.6.0/24; localhost; };
forward first;
forwarders { 192.168.1.1; };
};

zone "localhost" in {
type master;
file "/var/named/localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" in {
type master;
file "/var/named/127.0.0.zone";
allow-update { none; };
};

zone "." in {
type hint;
file "/var/named/root.hint";
};

Синтаксис этого файла очень похож на С++. Структура options - описывает глобальные параметры для сервера, а структуры zone - описывают, соответственно, доменные зоны.

-directory - указывает каталог расположения таблиц зон

-listen-on - позволяет указать на какие сетевые интерфейсы будет "вешаться" демон. Тут прописываем адрес локального интерфейса, у меня это 192.168.6.1, и не забываем указать и 127.0.0.1

-version - строка, которая будет выдаваться на запрос определения версии DNS-сервера

-allow-transfer - устанавливает возможность передачи зон для slave-серверов. В нашем случае трансфер запрещен.

-allow-query - а этот параметр указывает кому разрешается подавать запросы к нашему серверу. Мы прописали нашу локальную сетку 192.168.6.0 и 127.0.0.1

-forward - этот параметр позволяет указать каким образом сервер обрабатывает запрос клиента. Я указал first - это означает что сервер сначала перенаправит запрос выше и если не получит положительного результата, то посмотрит в своем кэше. Если указать only - то у себя смотреть не будет

-forwarders - а тут вы и указываете куда перенаправлять запросы клиентов. Я указал, для примера, свой вышестоящий DNS-сервер 192.168.1.1

-type - тип зоны

-file - имя файла таблицы зоны

-allow-update - разрешить или нет, и кому если разрешить, возможность изменения(обновления) таблицы зоны

Теперь добавим записи для master-зон:

//Конфигурационный файл /etc/named.conf для master DNS-сервера

options {
directory "/var/named";
listen-on { 192.168.6.1; localhost; };
version "Go away!";
allow-transfer { none; };
allow-query { 192.168.6.0/24; localhost; };
};

zone "localhost" in {
type master;
file "/var/named/localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" in {
type master;
file "/var/named/127.0.0.zone";
allow-update { none; };
};

zone "." in {
type hint;
file "/var/named/root.hint";
};

zone "sun.urix.ru" in {
type master;
file "/var/named/sun.urix.zone";
};

zone "6.168.192.in-addr.arpa" in {
type master;
file "/var/named/192.168.6.zone";
};

Я добавил две структуры: "прямую" зону - sun.urix.ru и реверсивную - 6.168.192.in-addr.arpa. Удалил опции определяющие форвард запросов и пока не разрешаю трансфер своих таблиц. Таким образом у меня получился мастер DNS-сервер для моего домена sun.urix.ru.

Теперь настроим наш BIND в случае когда у нас существуют и slave-серверы. Сначала необходимо подправить на мастер-сервере возможность передачи таблиц зон. Для этого нужно только разрешить трансфер зон:

allow-transfer { 192.168.6.2; 192.168.6.3; };

Здесь 192.168.6.2 и 192.168.6.3 - мои slave-серверы. А теперь на slave-сервере делаем конфигурационный файл:

//Конфигурационный файл /etc/named.conf для slave DNS-сервера

options {
directory "/var/named";
listen-on { 192.168.6.2; localhost; };
version "Go away!";
allow-transfer { none; };
allow-query { 192.168.6.0/24; localhost; };
};

zone "localhost" in {
type master;
file "/var/named/localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" in {
type master;
file "/var/named/127.0.0.zone";
allow-update { none; };
};

zone "." in {
type hint;
file "/var/named/root.hint";
};

zone "sun.urix.ru" in {
type slave;
file "/var/named/sun.urix.zone";
masters { 192.168.6.1; };
};

zone "6.168.192.in-addr.arpa" in {
type slave;
file "/var/named/192.168.6.zone";
masters { 192.168.6.1; };
};

Все, теперь когда демон на slave-сервере будет запускаться он прочитает адрес, прописанный в masters, и скачает таблицу зоны, а в последствии будет ее и обновлять.

Несколько слов о том, как запускать и останавливать bind-демон и где читать логи:

#/usr/sbin/in.named - так запускается демон

#pkill in.named - а так его можно "убить"

/var/log/messages - файл логов куда и демон in.named пишет свои логи.

Таблицы зон

Теперь приступаем к созданию таблиц зон. Понятно, что для slave-сервера большинство таблиц будут скачены с master-сервера. Первым делом пропишим таблицы для localhost и зоны hint. Мы объявили, что /var/named - каталог где помещаются таблицы - вот и идем туда и создаем необходимые таблицы.

//Файл /var/named/localhost.zone

$ttl 38400
localhost.
IN SOA localhost. root.localhost. (

2004071001 ;serial
108000 ;refresh
1800 ;retry
1209600 ;expiry
604800)

localhost.

IN

NS

solaris.

 

 

 

 

localhost.

IN

A

127.0.0.1

 

//Файл /var/named/127.0.0.zone

$ttl 38400
0.0.127.in-addr.arpa.
IN SOA localhost. root.localhost. (

2004071001 ;serial
108000 ;refresh
1800 ;retry
1209600 ;expiry
604800)

0.0.127.in-addr.arpa.

IN

NS

solaris.

 

 

 

 

1.0.0.127.in-addr.arpa.

PTR

 

localhost.

 

//Файл /var/named/root.hint

.

3600000

IN

NS

A.ROOT-SERVERS.NET.

A.ROOT-SERVERS.NET.

3600000

A

 

198.41.0.4

 

Разберемся теперь в формате этих таблиц. localhost.zone и 127.0.0.zone - это прямая и реверсивная таблицы loopback интерфейса, а файл root.hint - используется для кэширующего сервера. Эти три файла, как мы помним, присутствуют неизменно на любом DNS-сервере.

Что касается файла root.hint, то его, как правило, берут у своего провайдера. Данные в нем периодически устаревают и меняются, поэтому выкачивать его у своего провайдера - это самый оптимальный вариант. Но я хочу посоветовать вам упростить этот файл всего до одной-двух записей рутовых серверов и указать их на DNS-серверы вашего провайдера. Что это даст? Дело в том, что ваш сервер при каждом запуске и по истечении параметра TTL(time-to-live) будет обращаться ко всем серверам из этого файла и, таким образом, создаст вам огромный трафик, хотя накопленной информации, хранящейся на сервере вашего провайдера, вполне для вас будет достаточно. В качестве примера я написал только один адрес А-root сервера, если вы хотите добавить еще сервера, то создайте B,C,D... и т.д.

Расшифровка полей файлов зон:

-2004071001 ;serial - серийный номер версии таблицы. Самый лучший формат - ГГГГММДДNN, где NN - номер изменения таблицы за текущий день

-108000 ;refresh - время в секундах, указывающее как часто необходимо проверять таблицу мастер-сервера на необходимость update-а

-1800 ;retry - время в секундах, которое сервер ожидает при ошибочном сеансе refresh-а чтобы начать его заново

-1209600 ;expiry - максимальный предел в секундах времени хранения таблицы, по его истечении таблица считается устаревшей и скачивается заново.

-604800 ;ttl - параметр time-to-live. Время в секундах, которое указывает серверу сколько хранить в кэше данные таблицы. По его истечении срвер перечитывает таблицу заново.

 

//Файл /var/named/sun.urix.zone

$ttl 38400
sun.urix.ru.
IN SOA solaris. root.solaris.sun.urix.ru. (

2004071001 ;serial
108000 ;refresh
1800 ;retry
1209600 ;expiry
604800)

sun.urix.ru.

IN

NS

solaris.

sun.urix.ru.

IN

MX 10

solaris.sun.urix.ru.

 

 

 

 

solaris

IN

A

192.168.6.1

class

IN

A

192.168.6.10

slave

IN

A

192.168.6.2

www

IN

CNAME

solaris

 

//Файл /var/named/192.168.6.zone

$ttl 38400
6.168.192.in-addr.arpa.
IN SOA solaris. root.solaris.sun.urix.ru. (

2004012001 ;serial
108000 ;refresh
1800 ;retry
1209600 ;expiry
604800)

6.168.192.in-addr.arpa.

IN

NS

solaris.

 

 

 

 

1

IN

PTR

solaris.sun.urix.ru.

2

IN

PTR

slave.sun.urix.ru.

10

IN

PTR

class.sun.urix.ru.

 

-NS - указывает name-серверы для данной зоны

-MX - указывает на почтовые серверы домена, очередность - 0,10,20,

-A - "прямая" запись ресурса (имя-адрес)

-PTR - "реверсивная" запись (адрес-имя)

-CNAME - псевдоним

Точка в конце некоторых названий означает, что не нужно дописывать название доменной зоны. Если ее не ставить, то сервер автоматически допишет название домена для которого данная таблица и составляется. Не забывайте про это.

Вот и все, если таблицы готовы, то теперь можно и запускать ваш сервер. Как это делать мы уже рассмотрели выше.

Передача зон по защищенному ключу

Если перед вами стоит задача повысить уровень безопасности при трансфере таблиц между master и slave серверами, то необходимо наложить дополнительную аутентификацию на этот механзм. Вообще, механизм аутентификации по ключу, который мы сейчас настроим, может применяться не только при передаче зон, но и даже при обработке запросов клиент-сервер. Но это уже особый случай повышенной безопасности.

Естественно, перед тем как настраивать DNS-сервер на использование ключей аутентификации их необходимо сначала сгенерировать. Вот и запускаем следующую команду, которая создаст нам нужный ключ:

#dnskeygen -H 128 -z -n ns1

-H - указывает что необходимо сгенерировать ключ HMAC-MD5, диапазона [1..512]. Я указал - 128.

-z - ключ генерируется для зоны

-n - указывает имя ключа

В результате в текущем каталоге создаются два файла - Kns1.+157+00000.key и ns1.+157+00000.private. Заглянем в них:

//Содержимое файла Kns1.+157+00000.key

ns1. IN KEY 257 3 157 cArC69abJAYH8sqijvyxjw==

 

//Содержимое файла Kns1.+157+00000.private

Private-key-format: v1.2
Algorithm: 157 (HMAC)
Key: cArC69abJAYH8sqijvyxjw==

Как видите, и в одном и в другом присутствует необходимый нам ключ (я его выделил наклонным шрифтом). Так что, открываете любой из этих файлов и списываете себе ключ, после чего файлы необходимо удалить.

Теперь возвращаемся к конфигурационному файлу /etc/named.conf на master-сервере и приводим его к следующему виду:

//Конфигурационный файл /etc/named.conf для master DNS-сервера с использованием ключа при трансфере зон

key ns1 {
algorithm hmac-md5;
secret "cArC69abJAYH8sqijvyxjw==";
};

server 192.168.6.2 {
keys { ns1; };
};

server 192.168.6.3 {
keys { ns1; };
};

options {
directory "/var/named";
listen-on { 192.168.6.1; localhost; };
version "Go away!";
allow-transfer { key ns1; };
allow-query { 192.168.6.0/24; localhost; };
};

zone "localhost" in {
type master;
file "/var/named/localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" in {
type master;
file "/var/named/127.0.0.zone";
allow-update { none; };
};

zone "." in {
type hint;
file "/var/named/root.hint";
};

zone "sun.urix.ru" in {
type master;
file "/var/named/sun.urix.zone";
};

zone "6.168.192.in-addr.arpa" in {
type master;
file "/var/named/192.168.6.zone";
};

Как видно, добивились две новые структуры - key и server. Первая задает нам ключ, а вторая - какие серверы этим ключем подписываются. В моем примере я указал две структуры для моих slave-серверов и обоим приписал один ключ. Конечно, вы можете генерировать ключи для каждого сервера отдельно и даже несколько ключей на один сервер и использовать их потом для разных целей.

На slave-серверах необходимо, так же, прописать аналогичные структуры. Причем структура key - "один в один" - иначе не пройдет аутентификация, а вот структура server должна быть одна с адресом вашего master-сервера.

Вот и все, запускаете службу и если не ошиблись при наборе ключа серверы начнут трансфер зон. Единственно на что еще хочется обратить внимание - это на синхронизацию времени между master и slave серверами. Если трансфер зон не прошел, то читайте лог - там причина будет описана. Если ошиблись в ключе - проверяйте его идентичность, если не совпадает время - синхронизируйте его (команды date, rdate либо запустите ntp механизм) и все будет - ОК!

DNS-клиент

Для настройки DNS-клиента первое что необходимо сделать - это подправить файл /etc/nsswitch.conf. Найдите там следующую строчку и допишите как это показано у меня:

hosts: files dns

Таким образом вы указываете системе откуда и в каком порядке определять сетевые адреса. Теперь создаем файл /etc/resolv.conf и прописываем туда следующее:

domain sun.urix.ru

nameserver 127.0.0.1

nameserver 192.168.6.2

nameserver 192.168.6.3

Domain - указывает клиентом какого домена вы являетесь, а nameserver - адреса DNS-серверов. Причем опрос идет в порядке сверху-вниз и максимальное количество объявленных северов - три. Адрес 127.0.0.1 нужно указывать только если вы настраиваете клиента на самом сервере. Вот и все что нужно сделать, все значения система подхватывает "на лету".
 
 
Автор: Юрий Кажаров

Не хочется утомлять Вас банальностями, объясняющими влияние полнолуния на безопасность информационных систем…

Категория: DNS | Добавил: oleg (11.11.2007)
Просмотров: 2600 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024