В дополнение к статье 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; };