BIND9 на FreeBSD в качестве кэширующего DNS-сервера

Делаем локальный кеширующий DNS-сервер (Domain Name System) на FreeBSD, используя BIND версии 9, необходимый для того, чтобы «отвечать на запросы быстрее, чем это происходит при прямом опросе внешнего сервера имён».
Итак приступим к делу, всё выполняем от имени root’а.
Версия ОС:
uname -a
FreeBSD 7.1-RELEASE

Смотрим установленную версию DNS-сервера BIND:
named -v
BIND 9.4.2-P2

Забэкапимся на всякий случай:
cp -r /etc/namedb/ /etc/namedb_0/

Правим основной конфигурационный файл:
ee /etc/namedb/named.conf

Заполняем его так:
// "bsd"-произвольное название, обьединяющее все подсети(перечислены в скобках),
// которым разрешено обращаться к нашему dns-серверу
acl "bsd" { 192.168.1.0/24; 10.36.1.0/24; 127.0.0.1; };
// directory, pid-file, dump-file и statistics-file уже были прописаны
// в стандартном named.conf
options {
// Relative to the chroot directory, if any
directory "/etc/namedb";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";

// forwarders - адреса dns-серверов провайдера, так как они ближе всего к нам
forwarders {
217.24.112.2;212.48.193.41;212.48.192.6;217.24.122.10;
};

// allow-query - разрешаем запросы только от обьединённых в "bsd"
// подсетям (см. выше опцию acl)
allow-query { "bsd"; };
};

Файл /etc/namedb/named.conf подправьте под свои реалии, а именно укажите свои подсети и ДНС-сервера провайдера.

в /etc/rc.conf дописываем строку:
named_enable="YES"

а в /etc/resolv.conf пишем только строку:
nameserver 127.0.0.1
остальные ДНС-сервера, перечисленные в этом файле resolv.conf не нужны

стартуем BIND:
/etc/rc.d/named start
wrote key file "/var/named/etc/namedb/rndc.key"
Starting named.

проверяем:
nslookup mediaunix.com

видим:
Server: 127.0.0.1
Address: 127.0.0.1#53

Non-authoritative answer:
Name: mediaunix.com
Address: 78.36.111.40

и ещё так проверить можно:
dig @10.36.1.10 google.com

где 10.36.1.10 — наш ДНС-сервер.
Если видим следующий ответ, значит всё в порядке:
; <<>> DiG 9.6.1-P1 <<>> @10.36.1.10 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11898 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 4, ADDITIONAL: 4 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 237 IN A 74.125.232.50 google.com. 237 IN A 74.125.232.52 google.com. 237 IN A 74.125.232.49 google.com. 237 IN A 74.125.232.48 google.com. 237 IN A 74.125.232.51 ;; AUTHORITY SECTION: google.com. 147327 IN NS ns2.google.com. google.com. 147327 IN NS ns1.google.com. google.com. 147327 IN NS ns3.google.com. google.com. 147327 IN NS ns4.google.com. ;; ADDITIONAL SECTION: ns3.google.com. 277159 IN A 216.239.36.10 ns2.google.com. 277159 IN A 216.239.34.10 ns1.google.com. 277159 IN A 216.239.32.10 ns4.google.com. 277159 IN A 216.239.38.10 ;; Query time: 70 msec ;; SERVER: 10.36.1.10#53(10.36.1.10) ;; WHEN: Sun Feb 6 19:36:05 2011 ;; MSG SIZE rcvd: 244

Если вы настраивали dhcp в сети и автоматически давали адреса dns-серверов как в этой статье, то подправьте в конфигурационном файле /usr/local/etc/dhcpd.conf строку:
option domain-name-servers 217.24.112.2;

указав вместо адреса 217.24.112.2 IP-адрес вашего кеширующего сервера и перестартуйте сервис dhcp:
/usr/local/etc/rc.d/isc-dhcpd.sh restart

Клиентам после этого нужно перезапустить сетевое соединение, чтобы получить новый адрес.
Если же DHCP не используется, то в /etc/resolv.conf впишите перед остальными dns-серверами(если таковые имеются, но они уже станут не нужны-закомментируйте их) строку:
nameserver 10.36.1.10

В случае с клиентом на ms w!n пропишите адрес dns-сервера в настройках сетевого соединения. Но лучше 1 раз настроить dhcp-сервер и забыть про ручное прописывание параметров сетевого соединения. Вобщем то и всё, но есть небольшая плюшка.

rndc

Можно настроить rndc для управления нашим демоном сервера имён. Утилита позволяет контролировать работу демона named, в BIND8 она называлась ndc, а в BIND9 переименована в rndc. Она не обязательна, но кто хочет, настраиваем.

Выполняем:
/usr/sbin/rndc-confgen > /etc/namedb/rndc.conf

смотрим создавшийся /etc/namedb/rndc.conf:
cat /etc/namedb/rndc.conf

видим:
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "куча_символов";
};

options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "куча_символов";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

Исходя из содержимого rndc.conf в начало /etc/namedb/named.conf дописываем:

key "rndc-key" {
algorithm hmac-md5;
secret "куча_символов";
};

controls {
inet 127.0.0.1 port 953
allow { 10.36.1.0/24; 127.0.0.1; } keys { "rndc-key"; };
};

Это те самые закомментированные строки из /etc/namedb/rndc.conf, только я добавил туда ещё свою подсеть(10.36.1.0/24) в параметр allow, но это делать не обязательно.
Перестартуем bind9:
/etc/rc.d/named reload
server reload successful

проверим работоспособность rndc:
rndc status
number of zones: 11
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

Для очистки кэша BIND9 достаточно выполнить:
rndc flush
Полный список команд можно посмотреть запустив rndc без параметров.

P.S.: Не забываем открыть в фаерволе порты 53(DNS) и 953(rndc)
иначе rndc не заработает выдав:
rndc: connection to remote host closed
This may indicate that
* the remote server is using an older version of the command protocol,
* this host is not authorized to connect,
* the clocks are not syncronized, or
* the key is invalid.

BIND9 на FreeBSD в качестве кэширующего DNS-сервера: Один комментарий

  1. Уведомление: Настройка DNS сервера на FreeBSD   Freebsd_Chernigov

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