NSD – высокопроизводительный ДНС сервер, который хранит записи о зоне в своей базе данных, которая полностью располагается в оперативной памяти сервера.
За счет єтого достигается очень высокая скорость ответа на запросы
Так как все записи хранятся в ОЗУ, возникает вопрос – а сколько ему надо? Для расчета потребления памяти есть калькулятор тут. Если вы ставите сервер для личного пользования на 1-2 доменых зоны, то волноваться не о чем…
В стандартном дереве Portage я не смог найти ebuild для nsd. Гугл подсказал, что єтот пакет есть в овєрлее (overlay) sunrise. Приступим к добавлению овєрлея
Ищем Layman
emerge -s layman
Sunrise организован на базе subversion
USE="subversion" emerge -av app-portage/layman
echo "source /var/lib/layman/make.conf" >> /etc/make.conf
Ищем NSD:
emerge -s nsd
Добавляем кейворд для последней версии
echo ">=net-dns/nsd-3.2.8 ~amd64" >> /etc/portage/package.keywords
ну и собственно устанавливаем NSD3
emerge -av nsd
Конфигурационные файлы располагаются в каталоге /etc/nsd/ , там же находится пример конфигурационного файла nsd.conf.sample по которому можно поглядеть на структуру и синтаксис.
Перед тем как начнем творить нужно создать ключ для взаимодействия master и slave серверов.
dd if=/dev/urandom bs=16 count=1 | openssl base64
WIuUwDmLvvTG3GNPIkcKww==
1+0 записей считано
1+0 записей написано
скопировано 16 байт (16 B), 3,471e-05 c, 461 kB/c
После єтого нужно создать структуру каталогов внутри /etc/nsd:
drwxrwxrwx 2 root root 4096 Окт 5 14:36 data
-rw-r--r-- 1 root root 875 Окт 5 14:28 nsd.conf
drwxr-xr-x 3 root root 4096 Окт 5 13:19 zones
Внутри каталога zones находится две директории master и slave
Ну и собственно конфиг:
/etc/nsd/nsd.conf
server:
chroot: "/etc/nsd"
ip-address: 0.0.0.0
ip4-only: yes
identity: "DNS"
hide-version: yes
database: "/etc/nsd/data/nsd.database"
logfile: "/var/log/nsd.log"
server-count: 4
pidfile: "/etc/nsd/nsd.pid"
zonesdir: "/etc/nsd/zones"
difffile: "/etc/nsd/data/ixfr.db"
xfrdfile: "/etc/nsd/data/xfrd.state"
key:
name: "ns.test.ua"
algorithm: hmac-md5
secret: "UlRZ9i9GnNxQvDq5lfoLvw=="
zone:
name: "info.com.ua"
zonefile: "./master/info.com.ua"
notify: 89.252.89.252 NOKEY
provide-xfr: 89.252.89.252 NOKEY
zone:
name: "info2.com.ua"
zonefile: "./master/info2.com.ua"
notify: 89.252.89.252 ns.test.ua
provide-xfr: 89.252.89.252 ns.test.ua
Вкратце:
Все, что написано до server-count думаю будет интуитивно понятно, значение server-count устанавливает кол-во потоков (демонов) запущеных на сервере. Далее указывается где будут хранится файлы. После этого идет раздел key в котором описывается навание и алгоритм ключа, а так же сам ключ который был сгенерирован накануне. После чего идет секция zone, ту описываются сами днс-зоны которые обслуживает данный сервер. Параметр notify указывает на какой сервер будут посылаться уведомления в случае изменений на мастер-сервере, вторым параметром указано либо NOKEY – без ключа, либо название ключа. provide-xfr указывает кому разрешено получать файл зоны.
Файл описывающий саму зону имеет такой вид:
$ORIGIN info.com.ua.
$TTL 60
info.com.ua. IN SOA ns.test.ua. root.test.ua. (
2011092813 ; serial
3600 ; refresh
9600 ; retry
120960 ; expire
400 ; minimum TTL
)
@ NS ns.test.ua.
@ NS ns2.test.ua.
A 89.252.89.252
www A 89.252.89.252
mail A 89.252.89.252
Тоесть ничем не отличается от такового в Bind (Named), главное в конце файла поставить перенос строки.
После наполнения файла используются 3команді.
Рестарт сервиса
/etc/init.d/nsd restart
Генерация конфигурации из созданых нами файлов:
nsdc rebuild
И применение изменений:
nsdc reload
Сравнение скорости отклика можно почитать на Хабре