20.06.2017

Собственный DNS-сервер на базе Bind (named) во FreeBSD 11

В собственной локальной сети чаще всего возникает необходимость в своем DNS-сервере, который будет отвечать на запросы не только про хосты из внешнего мира, но и обслуживать внутреннюю сеть. Рассмотрим, как поднять такой сервер на базе Bind. Я буду описывать процесс во FreeBSD, но аналогичная конфигурация присутствует  и в других операционных системах.

1. Устанавливаем необходимые пакеты

cd /usr/ports/dns/bind911

make install clean

Для корректной работы данной версии Bind нужно пересобрать ядро с опцией

options TCP_RFC7413

И добавить в /etc/sysctl.conf

net.inet.tcp.fastopen.enabled=1

Иначе будем получать ошибки со ниже указанным текстом, а сам DNS-сервер будет работать.

Jun 19 17:23:41 test_free named[476]: setsockopt(21, TCP_FASTOPEN) failed with Operation not permitted

Jun 19 17:23:41 test_free named[476]: socket.c:5694: unexpected error:

В предыдущих версиях  такого не наблюдается, но все же я рекомендую включить данную опцию в ядра, так она может дать прирост производительности. Более подробно о ней можно почитать тут: https://en.wikipedia.org/wiki/TCP_Fast_Open

Как пересобрать ядро, описано в статье "Обновление ядра FreeBSD"

2. Настройка и запуск

Конфигурационного файла «из коробки» достаточно для запуска и работы, но отвечать на запросы сервер будет к 127.0.0.1. Для проверки можем выполнить

/usr/local/etc/rc.d/named onestart

Starting named.

# nslookup google.ru 127.0.0.1

Server:         127.0.0.1

Address:        127.0.0.1#53

Non-authoritative answer:

Name:   google.ru

Address: 172.217.18.67

Name:   google.ru

Address: 2a00:1450:400d:802::2003

Для полноценной работы его нужно настроить.

Исходные данные:

ИП-адрес нашего сервера 10.10.0.1

Будем обслуживать запросы из подсетей 10.10.0.0/24 и 10.10.1.0/24

Прямая зона example.org

Обратные зоны будут для наших подсетей

Редактируем конфигурационный файл /usr/local/etc/namedb/named.conf

В самое начало файла добавляем строку

acl ACCESS { 127.0.0.1; 10.10.0.0/24; 10.10.1.0/24};

Указываем перечень ИП-адресов и подсетей, на запросы с которых будет отвечать, остальные будут получать отказ. Я обычно предпочитаю произвести подобное ограничение  при помощи фаервола

Редактируем секцию options

listen-on { 127.0.0.1; 10.10.0.1; };  //# указываем IP-адреса интерфейсов которые будет слушать сервер

allow-recursion { ACCESS; };

forwarders {8.8.8.8;} //# Если у Вашего провайдера есть свои ДНС-сервера, здесь можно указать их IP-адреса, тогда наш ДНС-сервер будет сразу обращаться к ним. В противном случае, закомментируйте данную строку.

Добавляем секции для наших зон

zone "example.org" {

        type master;

        file "/usr/local/etc/namedb/master/example.org";

};

zone "0.10.10.in-addr.arpa" {

type master;

file "/usr/local/etc/namedb/master/0.10.10.in-addr.arpa";

};

zone "1.10.10.in-addr.arpa" {

type master;

file "/usr/local/etc/namedb/master/1.10.10.in-addr.arpa";

};

Создаем файл зоны /usr/local/etc/namedb/master/example.org 

$TTL    3600 ;# Время жизни (сколько будет находиться в кэше) в секундах

@       IN      SOA     ns.example.org. test.test.com ;( # Имя DNS-сервера и e-mail адрес администратора (вместо @ ставим «.»)

2017061901;     Serial

3600;           Refresh

900;            Retry

360000;         Expire

3600;           Minimum

)

@ IN      NS      ns.example.org.

@ IN A 10.10.0.1

localhost       IN      A       127.0.0.1

example.org.       IN      A       10.10.0.1

ns    IN      A       10.10.0.1

home            IN      A       10.10.0.1 ; Мой домен 3-го уровня home.example.org

svn            IN      A       10.10.1.2 ; Мой домен 3-го уровня svn.example.org

Создаем файлы с описанием обратных зон /usr/local/etc/namedb/master/0.10.10.in-addr.arpa 

$TTL 3600

@       IN      SOA     ns.example.org. test.test.com. (

                        2017061901 ;

                        3600 ;

                        600 ;

                        2419200 ;

                        86400 )

@ IN NS ns.example.org.

1 IN PTR home.example.org

/usr/local/etc/namedb/master/0.10.10.in-addr.arpa 

$TTL 3600

@       IN      SOA     ns.example.org. test.test.com. (

                        2017061901 ;

                        3600 ;

                        600 ;

                        2419200 ;

                        86400 )

@ IN NS ns.example.org.

2 IN PTR svn.example.org

Добавляем в автозагрузку

echo 'named_enable="YES"' >> /etc/rc.conf

И запускаем

/usr/local/etc/rc.d/named restart

Если нигде не допустили ошибок, у нас заработал кэшируюший DNS-сервер с поддержкой внутренних зон.

Можем проверить работоспособность при помощи команды nslookup или dig

nslookup 10.10.0.1 127.0.0.1

1.0.10.10.in-addr.arpa     name = home.example.org.

nslookup home.example.org 127.0.0.1

Server:         127.0.0.1

Address:        127.0.0.1#53

Name:   home.example.org

Address: 10.10.0.1

Использованные материалы:

https://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/network-dns.html

https://www.lissyara.su/articles/freebsd/programms/named_9.7.0/

https://rtfm.co.ua/freebsd-ustanovka-i-nastrojka-servera-bind/

http://mediaunix.com/bind9-na-freebsd-v-kachestve-keshiruyushhego-dns-servera/

https://www.opennet.ru/base/net/dns_inst.txt.html

В следующей статье мне понравилось описание директив конфигурации:

http://www.bog.pp.ru/work/bind.html

Комментариев нет:

Отправить комментарий