Debian: установка и настройка DNS – BIND

Автор: | 20/03/2013
 

bind-named-logoВ дополнение к статье FreeBSD: установка и настройка сервера BIND – описание процесса на Debian, так как имеются некоторые различия.

UPD: Обращайте внимание на дату поста – с годами всё меняется.

Установка производится на:

[simterm]

# cat /etc/issue
Debian GNU/Linux 6.0

[/simterm]

Приступаем к установке:

[simterm]

# aptitude -y install bind9 dnsutils

Adding group `bind’ (GID 109) …
Done.
Adding system user `bind’ (UID 106) …
Adding new user `bind’ (UID 106) with group `bind’ …
Not creating home directory `/var/cache/bind’.
wrote key file “/etc/bind/rndc.key”
#
Starting domain name service…: bind9.
Setting up geoip-database (1.4.7~beta6+dfsg-1) …

[/simterm]

dnsutils нам требуется, так как пакет включает в себя такие утилиты, как dig, nslookup и прочие полезные вещи.

Переходим в каталог с утановленным BIND:

[simterm]

# cd /etc/bind

[/simterm]

Создадим каталог, в котором будут храниться файлы зон:

[simterm]

# mkdir zones

[/simterm]

И отдельный каталог для master-зон:

[simterm]

# mkdir zones/master

[/simterm]

Для зон, которым мы будем назначены secondary:

[simterm]

# mkdir zones/secondary

[/simterm]

Приступаем к конфигурированию. В отличии от FreeBSD – в Debian/Ubuntu несколько файлов конфигурации. Начнём с редактирования главного файла – /etc/bind/named.conf.options. В него добавляем/редактируем такие опции:

# DNS провайдера, или любые другие, у которых можно получить информацию об неизвестных доменах.
forwarders { 77.120.112.133; 8.8.8.8; };

# Кто имеет право запрашивать (и получать ответ :-)) у нашего сервера информацию, any - разрешить всем, про ограничения - в конце статьи:
allow-query { any; };

# secondary-сервера DNS, которым будем передавать информацию при обновлении зон у нас, для доменов которым мы выступа5ем в качестве master:
allow-transfer { 82.144.220.21; };

# Адреса и/или подсети, из которых разрешено принимать рекурсивные запросы:
allow-recursion { 127.0.0.1; };

# На самом деле allow-recursion - очень важная опция. Про DDoS с помощью рекурсивных запросов можно почитать в статье DNS Amplification DDoS: Анатомия атаки и защиты. Часть 1

# Разрешаем принудительное уведомление всех secondary-серверов, указанных в файлах зон:
notify yes;

# Так же уведомлять перечисленные secondary-сервера, даже если их нет в файле зоны:
also-notify { 11.22.33.45; 192.168.0.2; };

# ?
auth-nxdomain no;

# Обрабатывать ли запросы по протоколу IPv6. «none» означает — не ожидать и
# игнорировать; «any» означает ожидать от всех компьютеров.
listen-on-v6 { none; };

Без комментариев файл выглядит так:

# cat named.conf.options
options {
#    directory "/var/cache/bind";
auth-nxdomain no;
listen-on-v6 { none; };
allow-query { any; };
allow-recursion { 127.0.0.1; };
forwarders { 77.120.112.133; 8.8.8.8; };
allow-transfer { 82.144.220.21; };
notify yes;
#    also-notify { 11.22.33.44; };
}

Сохраняем файл.

Редактируем файл named.conf. В нём указаны файлы зон для доменов, которые будет обслуживать наш сервер. Добавим в конце списка строку:

include "/etc/bind/named.conf.zones";

В файле /etc/bind/named.conf.zones мы будем описывать домены, которые обслуживаем. Отредактируем этот файл, и добавим запись для домена domain.org.ua, которому мы будем выступать в качестве Master (или Primary) NS:

zone "domain.org.ua" {
type master;
file "/etc/bind/zones/master/domain.org.ua";
};

Создаём и редактируем файл зоны для домена domain.org.ua

$TTL    3600
@               IN      SOA     ns.setevoy.org.ua. root.setevoy.org.ua.  (
2012080403      ; Serial
3600            ; Refresh
900             ; Retry
3600            ; Expire
3600            ; Minimum
)
@               IN      NS      ns.setevoy.org.ua.
@               IN      NS      ns3.dc.volia.com.
@               MX      10      mail.domain.org.ua.
@               IN      A       195.***.***.97
www             IN      CNAME   @
mail            IN      A       77.120.106.40

Описание файла можно найти в статье FreeBSD: установка и настройка сервера BIND – между FreeBSD и любыми другими операционными система в этом вопросе различий нет.

[simterm]

# rndc reload
rndc: ‘reload’ failed: unexpected end of input

[/simterm]

При возникновении подобных ошибок – можно легко определить причину её возникновения, выполнив:

[simterm]

# named -g -u bind
20-Mar-2013 09:05:53.557 starting BIND 9.7.3 -g -u bind
20-Mar-2013 09:05:53.557 built with ‘–prefix=/usr’ ‘–mandir=/usr/share/man’ ‘–infodir=/usr/share/info’ ‘–sysconfdir=/etc/bind’ ‘–localstatedir=/var’ ‘–enable-threads’ ‘–enable-largefile’ ‘–with-libtool’ ‘–enable-shared’ ‘–enable-static’ ‘–with-openssl=/usr’ ‘–with-gssapi=/usr’ ‘–with-gnu-ld’ ‘–with-dlz-postgres=no’ ‘–with-dlz-mysql=no’ ‘–with-dlz-bdb=yes’ ‘–with-dlz-filesystem=yes’ ‘–with-dlz-ldap=yes’ ‘–with-dlz-stub=yes’ ‘–with-geoip=/usr’ ‘–enable-ipv6’ ‘CFLAGS=-fno-strict-aliasing -DDIG_SIGCHASE -O2’ ‘LDFLAGS=’ ‘CPPFLAGS=’
20-Mar-2013 09:05:53.557 adjusted limit on open files from 1024 to 1048576
20-Mar-2013 09:05:53.557 found 4 CPUs, using 4 worker threads
20-Mar-2013 09:05:53.557 using up to 4096 sockets
20-Mar-2013 09:05:53.561 loading configuration from ‘/etc/bind/named.conf’
20-Mar-2013 09:05:53.561 /etc/bind/named.conf:14: unexpected end of input
20-Mar-2013 09:05:53.561 loading configuration: unexpected end of input

[/simterm]

Обращаем внимание на строку:

20-Mar-2013 09:05:53.561 /etc/bind/named.conf:14: unexpected end of input

В файле /etc/bind/named.conf, в строке include “/etc/bind/named.conf.zones”; была не закрыта кавычка.

[simterm]

# rndc reload
server reload successful

[/simterm]

Теперь проверим с внешнего узла – отвечает ли наш BIND на запросы:

# dig @ns.setevoy.kiev.ua domain.org.ua

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 49240

status: REFUSED” – ошибка. Снова выполняем:

[simterm]

# named -g -u bind

[/simterm]

И видим ошибку такого плана:

20-Mar-2013 09:08:41.613 zone domain.org.ua/IN: loading from master file /etc/bind/zones/master/domain.org.ua failed: bad dotted quad

Проверим синтаксис файла зоны, выполнив:

[simterm]

# named-checkzone zonename zones/master/domain.org.ua
dns_rdata_fromtext: zones/master/domain.org.ua:13: near ‘@’: bad dotted quad
zone zonename/IN: loading from master file zones/master/domain.org.ua failed: bad dotted quad
zone zonename/IN: not loaded due to errors.

[/simterm]

Файл зоны копировался с другого сервера, и немного редактировался. При редактировании была допущена ошибка – вместо `IN CNAME @` осталась прежняя запись – `IN A @`.

Ещё раз проверяем:

[simterm]

# dig @ns.setevoy.kiev.ua domain.org.ua

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8798
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;domain.org.ua.            IN    A

;; ANSWER SECTION:
domain.org.ua.        3600    IN    A    195.***.***.97

[/simterm]

Сервер готов к работе.

Если вы хотите разрешить запросы к серверу только с определённых IP/сетей – добавьте в начале файла /etc/bind/named.conf.options строку:

acl allownetwork {192.168.0.0/24; 127.0.0.1; };

Так вы зададите Access Control List (ACL) для сервера.

В блоке options – добавляем такую строку:

allow-query { allownetwork; };