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

By | 03/20/2013
 

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

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

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

cat /etc/issue
Debian GNU/Linux 6.0

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

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) …

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

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

cd /etc/bind

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

mkdir zones

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

mkdir zones/master

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

mkdir zones/secondary

Приступаем к конфигурированию. В отличии от 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 и любыми другими операционными система в этом вопросе различий нет.

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

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

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

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

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”; была не закрыта кавычка.

rndc reload
server reload successful

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

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

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

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

named -g -u bind

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

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

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

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.

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

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

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

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

Если вы хотите разрешить запросы к серверу только с определённых 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; };

  • Nurlan
     

    Отличная статья

  • Dmytro D
     

    вы хоть проверяйте потом всю эту конфигурацию, пишите статьи под шаблон сдирая с других ресурсов….

    одни ошибки при проверке bind, конфигурация не годная

    •  

      Дмитрий, 99.9% постов в этом блоге писались и пишутся во время непосредственно установки-настройки чего-то, а не “шаблоны сдирая”.
      Я не исключаю, что возможны ошибки – ибо не всегда пишется ровненько и/или установка получается с первого раза, что-то где-то могло меняться в процессе установки и написания, но ещё раз – нет, это не скопированный откуда-то пост, а все конфиги, приведённые тут – использовались на моём сервере с BIND.
      И ещё момент – смотрите на дату поста. Этому – 4 года, и за четыре года 100 раз могло что-то поменяться.
      Удачи вам в вашем сетапе.