Настройка BIND
В данном топике я постараюсь описать полноценную конфигурацию DNS-сервера BIND для нужд подходящих малой организации или небольшого провайдера.
1. Файл конфигурации BIND named.conf:
Расположение файла настройки BIND может меняться в зависимости от ОС. К примеру во FreeBSD он хранится в /etc/namedb/named.conf. Chroot-директория: /var/named/.
# Ключ идентификации.
key "rndckey" {
algorithm hmac-md5;
secret "945Gа8BNiQ+NvPeklas+Bu==";
};options {
# Указываем какие IPv6-адреса будет слушать сервер. В данном примере “none;” – не слушать IPv6.
listen-on-v6 { none; };
# Указываем какие IPv4-адреса будет слушать сервер.
# 127.0.0.1 – Loopback
# 192.168.0.1 – Интерфейс локальной сети. На него будут обращаться локальные клиенты.
# 100.100.100.100 – Внешний интерфейс. На нем будут обрабатываться запросы из глобальной сети.
listen-on port 53 { 127.0.0.1; 192.168.0.1; 100.100.100.100; };
# Какие запросы обрабатывать. В данном примере “any;” – обрабатываются любые запросы.
# При необходимости можно указать сети или конкретные узлы чьи запросы допускается обрабатывать. К примеру указав “192.168.0.1/24; 127.0.0.1;” мы разрешили бы обвечать клиентам только из подсети 192.168.0.1/24 и себе серез loopback интерфейс.
allow-query { any; };
# Куда переадресовывать запросы. При необходимости можно переадресовать запросы к DNS серверу своего провайдера к примеру для экономии трафика. В данном примере используется только в корневой зоне.
forwarders { };
# Запрещаем изменение (обновление) таблиц зон.
allow-update { none; };
# Дополнительные параметры. Расположение рабочей директории, PID-файла, дамп файла и файла статистики. При необходимости можно изменить. Все пути относительно Chroot-директории.
directory “/etc/namedb”;
pid-file “/var/run/named/pid”;
dump-file “/var/dump/named_dump.db”;
statistics-file “/var/stats/named.stats”;
# Скрываем версию нашего BIND сервера.
version “0”;
};# Access Control List – списки контроля доступа
# ACL “user” – наши локальные клиенты.
acl “user” { 192.168.0.0/24; 127.0.0.1; };
# ACL “inet” – все те, кто не входит в ACL “user”
acl “inet” { !user; };# View – представления
# Мы будем использовать ACL для разграничения доступа к разным представлениям.# View “all” – представление для всех запросов.
view “all” {
# Указываем, что данное представление только для всех клиентов.
match-clients { any; };
# Запрещаем рекурсивные запросы.
recursion no;# Мастер зона test.com
zone “test.com” {
# Тип зоны “slave” – это вторичный DNS сервер для доменной зоны “test.com”.
# Можно использовать “stub”. В этом случае таблицы зон храниться не будут (будут храниться только NS записи), а запросы будут перенаправляться на объявленные DNS сервера.
type slave;
# Файл таблицы зоны.
file “slave/test.com.hosts”;
# Указываем первичный DNS сервер доменной зоны “test.com”.
masters { 100.100.100.201; };
};# DynDNS зона dyn.example.com.
zone “dyn.example.com” {
# Тип зоны “master” – это первичный DNS сервер для этой доменной зоны.
type master;
file “dynamic/dyn.example.com.hosts”;
# Разрешаем изменение (обновление) таблицы зон по ключу.
allow-update { key “rndckey”; };
};# Обратная зона для глобальной подсети “100.100.100.100/24”.
zone “100.100.in-addr.arpa” {
type master;
file “master/100.100.rev.hosts”;
};
}# View “user” – представление для наших локальных клиентов.
view “user” {
# Указываем, что данное представление только для клиентов входящих в ACL “user”
match-clients { user; };
# Разрешаем локальным клиентам рекурсивные запросы.
recursion yes;# Описываем зоны для View “user”
# Зона “localhost”.
zone “localhost” in {
type master;
file “master/localhost.hosts”;
};# Мастер зона example.com.
zone “example.com” {
type master;
file “master/user/example.com.hosts”;
};# Обратная зона для локальной подсети “192.168.0.0/24”.
zone “0.168.192.in-addr.arpa” {
type master;
file “master/user/192.168.0.rev.hosts”;
};# Обратная зона для “localhost”.
zone “0.0.127.in-addr.arpa” {
type master;
file “master/127.0.0.rev.hosts”;
};# Корневая зона DNS.
zone “.” {
# Тип зоны “hint” – кеширующий сервер. Не хранит никаких таблиц зон.
type hint;
file “named.root”;
# Переадресовываем запросы на DNS сервер провайдера (100.100.100.201 – DNS сервер провайдера).
forwarders { 100.100.100.201; };
};
};# View “inet” – представление для запросов из глобальной сети.
view “inet” {
match-clients { inet; };
# Запрешаем рекурсивные запросы.
recursion no;
notify no;# Мастер зона example.com.
zone “example.com” {
type master;
file “master/inet/example.com.hosts”;
};
};
2. Таблица зоны example.com для представления «user»:
$ttl 38400
example.com. IN SOA ns.example.com. root.example.com. (
2011101101 ; Serial - серийный номер зоны в формате YYYYMMDDNN.
; YYYY - год, MM - месяц, DD - день, NN - порядковый номер изменения таблицы за текущий день.
10800 ; Refresh - Время указывающее, как часто необходимо проверять таблицу мастер сервера на необходимость сделать update.
3600 ; Retry - время указывающее, как скоро делать повторную попытку при неудачном соединении с мастер сервером.
604800 ; Expiry - время устаревания таблицы, по истечению этого времени таблица считается устаревшей и считывается заново.
38400 ; TTL - время указывающее, как долго хранить таблицу в кеше. По истечению этого времени сервер перечитывает таблицу заново.
); Указываем Name-сервера данной зоны.
example.com. IN NS ns.example.com.
example.com. IN NS ns.r01.ru.
; “прямая” (преобразует имя в адрес) запись.
ns.example.com. IN A 100.100.100.100
# “почтовая” (указывает на почтовые серверы домена) запись. 10 – очередность.
example.com. IN MX 10 mx.example.com.
; Используем локальные адреса для прямой записи хоста example.com.
example.com. IN A 192.168.0.2
sip.example.com. IN A 192.168.0.3
mx.example.com. IN A 192.168.0.4; Указываем что www.example.com это синоним example.com
www.example.com IN CNAME example.com.; Указываем расположение сервисов на примере SIP телефонии.
; _sip._udp – тип сервиса;
; SRV – тип записи;
; 0 – приоритет записи;
; 0 – нагрузка которую могут обработать системы (не обязательный параметр);
; 5060 – номер порта, по которому SIP сервер принимает запросы;
; sip.example.com – имя хоста SIP сервера._sip._udp.sip.example.com. SRV 0 0 5060 sip.example.com.
3. Таблицы зоны example.com для представления «inet» (внешние клиенты к SIP телефонии доступа не имеют)
$ttl 38400
example.com. IN SOA ns.example.com. root.example.com. (
2011101101 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expiry
38400 ; TTL
)example.com. IN NS ns.example.com.
example.com. IN NS ns.r01.ru.
example.com. IN MX 10 mx.example.com.ns.example.com. IN A 100.100.100.100
; Используем внешние адреса для прямой записи хоста example.com.
example.com. IN A 100.100.100.101
mx.example.com. IN A 100.100.100.102www.example.com IN CNAME example.com.
4. Таблица обратных зон для локальной подсети «192.168.0.0/24»
$ttl 38400
0.168.192.in-addr.arpa. IN SOA ns.example.com. root.example.com. (
2011101101 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expiry
38400 ; TTL
)
0.168.192.in-addr.arpa. IN NS ns.example.com.
; "обратная" запись (преобразует адрес в имя)
1.0.168.192.in-addr.arpa. IN PTR ns.example.com.
2.0.168.192.in-addr.arpa. IN PTR www.example.com
3.0.168.192.in-addr.arpa. IN PTR sip.example.com.
4.0.168.192.in-addr.arpa. IN PTR mx.example.com.
Заключение
Остальные таблицы зон, создаются аналогично представленным в примере.
И в заключении хотелось бы сказать: «Это легче, чем кажется на первый взгляд». Настройка BIND завершена.
Список используемых источников:
subnets.ru/blog/?p=38
dlc.sun.com/osol/docs/content/SYSADV5/dnsref-13.html
sshd.su/pages/viewpage.action?pageId=5210143
ulsu-is.narod.ru/lab08.htm