Настройка DNS сервера BIND

В данной статье я расскажу о том, как настроить стандартный DNS сервер (BIND) в системе FreeBSD версии 8.1. На DNS сервер (BIND) будут возложены следующие функции: кеширование DNS запросов и обслуживание доменных зон. Все необходимые для работы сервера файлы содержатся в директории /etc/namedb. В данной директории содержится:

  • dynamic - директория, в которой хранятся динамические зоны.
  • master - директория, в которой хранятся зоны, которые обслуживает данный сервер.
  • slave - директория, в которой хранятся зоны, для которых этот DNS сервер является вторичным.
  • working - директория, в которой работает сервер после chroot,а.
  • named.conf - главный конфигурационный файл.
  • rndc.key - ключ, необходимый для работы утилиты rndc
  • named.root - список корневых серверов.

Как было сказано ранее, главный конфигурационный файл имеет имя named.conf. Его-то нам и предстоит отредактировать. Итак, поехали:

// В файле хранится ключ, который используется утилитой rndc
// для получения доступа к DNS серверу.
include "/etc/namedb/rndc.key";

// ACL,ка, которая описывает внутренние подсети
acl internal_net { localhost; 192.168.1.0/24; 192.168.7.0/24; };

// Определяем с каких хостов и каким ключом разрешено управлять сервером.
controls {
    inet 127.0.0.1 allow { localhost; } keys { rndc-key; };
};

// Настройка ведения логов
logging {
 channel default_flog {
   file "log/default.log" versions 3 size 512K;
   severity notice;
   print-category yes;
   print-time yes;
 };

 channel config_flog {
   file "log/config.log" versions 1 size 512K;
   severity notice;
   print-category yes;
   print-time yes;
 };

 channel queries_flog {
   file "log/queries.log" versions 3 size 512K;
   severity notice;
   print-category yes;
   print-time yes;
 };

 channel qerror_flog {
   file "log/qerror.log" versions 3 size 256K;
   severity notice;
   print-category yes;
   print-time yes;
 };

 category default { default_flog; };
 category config { config_flog; };
 category queries  { queries_flog; };
 category query-errors { qerror_flog; };
};

options {
 // Все пути воспринимаются как относительные директории chroot,
 // поэтому везде нужно указывать полный путь.
 directory    "/etc/namedb/working";
 pid-file    "/var/run/named/pid";
 dump-file    "/var/dump/named_dump.db";
 statistics-file    "/var/stats/named.stats";

 // На каких интерфейсах (адресах) обслуживать запросы.
 listen-on { any; };

 // Пустые зоны.
 disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
 disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
 disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";

 // Разрешать передачу зоны только клиентам из внутренней сети.
 allow-transfer { internal_net; };
 // Разрешить всем запросы к серверу.
 allow-query { any; };
 // Разрешить рекурсивные запросы клиентам из внутренней сети.
 allow-recursion { internal_net; };
 // Будет выдаваться при запросе о версии.
 version "Domain nameserver";
 max-ncache-ttl 3600;
};

// DNS сервер скачает зоны с корневых серверов, что позволит
// производить поиск необходимых серверов быстрее. То есть
// не придется обращаться к корневым серверам каждый раз,
// когда запрашивается домен, которого нет в кеше.
zone "." {
    type slave;
    file "/etc/namedb/slave/root.slave";
    masters {
        192.5.5.241;    // F.ROOT-SERVERS.NET.
    };
    notify no;
};

zone "arpa" {
    type slave;
    file "/etc/namedb/slave/arpa.slave";
    masters {
        192.5.5.241;    // F.ROOT-SERVERS.NET.
    };
    notify no;
};

/*
 Обслуживание следующих зон локально позволит быстрее обрабатывать
 запросы и не нагружать сеть лишним трафиком.
*/

// RFC 1912 (and BCP 32 for localhost)
zone "localhost"    { type master; file "/etc/namedb/master/localhost-forward.db"; };
zone "127.in-addr.arpa"    { type master; file "/etc/namedb/master/localhost-reverse.db"; };
zone "255.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };

// RFC 1912-style zone for IPv6 localhost address
zone "0.ip6.arpa"    { type master; file "/etc/namedb/master/localhost-reverse.db"; };

// "This" Network (RFCs 1912 and 3330)
zone "0.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };

// Private Use Networks (RFC 1918)
zone "10.in-addr.arpa"       { type master; file "/etc/namedb/master/empty.db"; };
zone "16.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "17.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "18.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "19.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "20.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "21.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "22.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "23.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "24.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "25.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "26.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "27.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "28.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "29.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "30.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "31.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

// Link-local/APIPA (RFCs 3330 and 3927)
zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

// TEST-NET-[1-3] for Documentation (RFC 5737)
zone "2.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "100.51.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "113.0.203.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

// IPv6 Range for Documentation (RFC 3849)
zone "0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };

// Domain Names for Documentation and Testing (BCP 32)
zone "test" { type master; file "/etc/namedb/master/empty.db"; };
zone "example" { type master; file "/etc/namedb/master/empty.db"; };
zone "invalid" { type master; file "/etc/namedb/master/empty.db"; };
zone "example.com" { type master; file "/etc/namedb/master/empty.db"; };
zone "example.net" { type master; file "/etc/namedb/master/empty.db"; };
zone "example.org" { type master; file "/etc/namedb/master/empty.db"; };

// Router Benchmark Testing (RFC 3330)
zone "18.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "19.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };

// IANA Reserved - Old Class E Space
zone "240.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "241.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "242.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "243.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "244.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "245.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "246.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "247.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "248.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "249.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "250.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "251.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "252.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "253.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "254.in-addr.arpa"    { type master; file "/etc/namedb/master/empty.db"; };

// IPv6 Unassigned Addresses (RFC 4291)
zone "1.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "3.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "4.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "5.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "6.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "7.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "8.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "9.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "a.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "b.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "c.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "d.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "e.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "0.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "1.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "2.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "3.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "4.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "5.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "6.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "7.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "8.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "9.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "a.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "b.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "0.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "1.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "2.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "3.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "4.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "5.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "6.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "7.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };

// IPv6 ULA (RFC 4193)
zone "c.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "d.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };

// IPv6 Link Local (RFC 4291)
zone "8.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "9.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "a.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "b.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };

// IPv6 Deprecated Site-Local Addresses (RFC 3879)
zone "c.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "d.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "e.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };
zone "f.e.f.ip6.arpa"    { type master; file "/etc/namedb/master/empty.db"; };

// IP6.INT is Deprecated (RFC 4159)
zone "ip6.int"        { type master; file "/etc/namedb/master/empty.db"; };


// Настройка собственной зоны
zone "info-x.org" IN {
 type master;
 file "/etc/namedb/master/info-x.org.db";
};

Описание зоны у меня выглядит так:

$TTL 10800      ; 3 hours
info-x.org.     IN SOA  ns0.info-x.org. webmaster.info-x.org. (
                   2012041800 ; serial
                   10800      ; refresh (3 hours)
                   900        ; retry (15 minutes)
                   604800     ; expire (1 week)
                   3600       ; minimum (1 day)
)

$ORIGIN info-x.org.
@                   IN NS      ns0.info-x.org.

@                   IN A       212.220.113.125
mx                  IN A       212.220.113.125
ns0                 IN A       212.220.113.125
*                   IN A       212.220.113.125

@                   MX         10 mx.info-x.org.

@                   IN TXT     "v=spf1 +a +mx ~all"

После подготовки всех конфигурационных файлов можно добавлять BIND в автозагрузку и собственно запускать его.

# echo 'named_enable="YES"' >> /etc/rc.conf
# /etc/rc.d/named start

Проверим, запустился ли он:

# sockstat -4 -l | grep named
bind     named      1053  21 tcp4   127.0.0.1:53          *:*
bind     named      1053  23 tcp4   127.0.0.1:953         *:*
bind     named      1053  26 tcp4   212.220.113.125:53    *:*
bind     named      1053  513 udp4  127.0.0.1:53          *:*
bind     named      1053  517 udp4  212.220.113.125:53    *:*

Если демон named не стартовал, то проверяйте конфиг, смотрите логи и ищите ошибку. Проверим, корректно ли обслуживает нашу зону DNS сервер.

# nslookup info-x.org 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   info-x.org
Address: 212.220.113.125

Как видно все работает. Полезно знать про утилиту rndc, которая позволяет управлять DNS сервером. С помощью нее, например, можно перечитать конфигурационный файл без перезапуска демона named, сбросить кеш, посмотреть статистику и т.д. За подробностями идем в ман. Также стоит отметить полезные утилиты, которые помогают в повседневной жизни при работе с DNS: nslookup, dig, host.

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Яндекс.Метрика