Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||||||||||||||||||
www.lissyara.su
—> статьи
—> FreeBSD
|
|
После обновления портов, ставим NSD традиционным методом:
|
При первой установке, порт предлагает выбрать несколько опций конфигурации. По-умолчанию выбран вполне разумный набор, с которым можно согласиться. Опции же такие:
|
ROOT_SERVER — по-умолчанию NSD не разрешает запускать на себе корневую зону. Опция включает такую функциональность.
LARGEFILE - не берусь прокомментировать. В README эта опция описана как "Disable large file support (64 bit file lengths). Makes off_t a 32bit length during compilation" По-умолчанию включена.
DNSSEC - включает функциональность позволяющую подписывать DNS сообщения между серверами на основе шифрования с открытым ключом и использовать другие возможности DNSSEC.
CHECKING - полезно для debug, дополнительные внутренние проверки во время работы. Снижает производительность.
TSIG - включает функциональность позволяющую подписывать DNS сообщения между серверами на основе шифрования с общим симметричным ключом.
NSEC3 - расширение DNSSEC. Механизм пришел на замену NSEC. Используется в "подписаных" зонах для указания несуществующих записей. Старый механизм NSEC после каждой записи вставлял информацию о следующей за ней записи (что приводило к возможности провести энумерацию всех данных в зоне). Механизм NSEC3 вставляет хеш значения вместо текстовых, что исключает возможность проведения энумерации данных в зоне.
NSID - экспериментальное расширение позволяющее вставлять в каждый ответ DNS сервера метку однозначно идентифицирующую DNS сервер. Используется для debug.
DOCFILES - в /usr/loca/share/doc/nsd будет установлен набор полезных руководств.
MAXINT - позволяет указывать до 512 интерфейсов (директива ip-address) на которых сервер будет принимать запросы.
Сервер маленький, компиляция происходит очень быстро. Через пару минут порт будет собран и установлен.
Файлы устанавливаемые портом:
|
Установленные инструменты:
|
Главные инструменты с чем придется работать:
|
В процессе установки не создается никаких новых пользователей. NSD сразу же компилится так, чтобы запускаться от имени пользователя bind который уже присутствует в системе
Это все, что касается установки из порта. Далее идет настройка.
Настройка
Как и каждый правильный демон, NSD требует к себе уважения. Это означает, что его хозяину надо прочитать man nsd.conf, составить этот nsd.conf, и составить файлы данных зон. Синтаксис nsd.conf (файла конфигурации NSD) отличается от того, что принято в BIND. Синтаксис файлов зон такой же как и в BIND. NSD может работать в chroot окружении. Я поленился делать отдельный jail для запуска NSD и для большей секюрности решил использовать этот chroot. По умолчанию chroot не задействован.
Далее пошаговое описание настроек сделаных на master сервере
В /usr/local/etc/nsd создаем поддиректории со следующими правами доступа:
|
Права доступа для ./data такие, потому, что пользователь bind будет писать в нее.
На работающем master сервере там автоматически создаются файлы:
|
В директорию ./run на работающем сервере, будет писаться pid
|
Директория zones содержит:
|
Директория slave тут пустая, а в директории master созданы файлы с именами зон:
|
Создаем случайный общий ключ который будет использоваться в TSIG подписях при передаче зон между master и slave. Делаем это так:
|
Был создан ключ (6P0hiHgcfHHV/MBiHYtWlA==) из 16 случайных символов. Если по какой-либо причине есть желание использовать более длинные ключи то просто увеличивайте значение bs=.
NSD поддерживает такие алгоритмы TSIG подписей: hmac-sha1 hmac-sha256 hmac-md5
Конфигурационный файл nsd.conf на master такой:
|
Файл зоны domain.su на master такой (примерно):
|
Для примера привожу так же и реверс-зону. Соответсвенно, если у вас реверс-зона не используется то и не настраевайте ее. По сути же, разници между настройкой обычной и реверс-зоны в NSD нет.
Файл реверс-зоны 0.168.192.in-addr.arpa на master такой (примерно):
|
После создания nsd.conf и файла зоны, необходимо выполнить:
|
Если нет сообщений об ошибках то создаем базу nsd.database в которой собственно и будут храниться данные о записях зоны:
|
После этого база /usr/local/etc/nsd/data/nsd.database будет создана.
Вносим в /etc/rc.conf строку nsd_enable="YES" и запускаем сервер:
|
После этого создадутся файлы:
|
Проверяем что сервер запустился:
|
Все в порядке — master работает. Стоит проверить вывод ps auxw (там будет видно шесть процессов nsd), и /var/log/nsd.log, а так же через nslookup поспрашивать новый сервер и убедиться, что все ок.
Далее пошаговое описание настроек сделаных на slave сервере
В /usr/local/etc/nsd создаем поддиректории со следующими правами доступа:
|
Права доступа для ./data такие потому, что пользователь bind будет писать в нее. На работающем slave сервере там автоматически создаются файлы:
|
В директорию ./run на работающем сервере, будет писаться pid
|
Директория zones содержит:
|
Обе директории master и slave пока пустые:
Конфигурационный файл nsd.conf на slave такой:
|
После создания nsd.conf необходимо выполнить:
|
Если нет сообщений об ошибках то создаем базу nsd.database в которой собственно и будут храниться данные о записях зоны:
|
После этого база /usr/local/etc/nsd/data/nsd.database будет создана
Вносим в /etc/rc.conf строку nsd_enable="YES" и запускаем сервер:
|
После этого создадутся файлы:
|
Проверяем что сервер запустился:
|
Все в порядке — slave работает. Стоит проверить ps auxw (там будет видно шесть процессов nsd), и /var/log/nsd.log.
Последний шаг чтобы убедиться, что репликация между master и slave происходит как надо - заходим на master, открываем текстовый файл зоны /usr/local/etc/nsd/zones/master/domain.su и меняем там строку с серийным номером. Сохраняем файл зоны и выполняем:
|
Эта процедура пересоздает базу nsd.database на master (вносит туда изменения из отредактированного файла зоны) и отправляет сообщение NOTIFY на slave. Получив такое сообщение, slave запросит произвести AXFR передачу с master (192.168.0.1) и сохранит полученные данные в ixfr.db. Это важный момент! На slave база ixfr.db является своего рода логом транзакций полученных с master. Сразу после этого slave может обслуживать запросы. Текстовые файлы с данными пока еще НЕ созданы в директории ./zones/slave/
Завершающий штрих который необходимо сделать на slave сервере — это внести в crontab root'a (/etc/crontab) выполнение такой команды:
|
Команда nsdc patch выполняет две операции:
1 Переносит данные из лога ixfr.db в базу nsd.database, после чего удаляет лог.
2 Создает текстовые файлы с данными зон в ./zones/slave/domain.su и ./zones/slave/0.168.192.in-addr.arpa
Можно было бы не писать, но все же упомяну - все дальнейшие изменения в записях зоны domain.su вносятся в текстовый файл ./zones/master/domain.su на master сервере, после чего для перестройки базы и ее репликации на slave, выполняется тот же самый цикл команд:
|
Если в будущем к уже имеющимся зонам захочется добавить новую зону, и точно так же обеспечить ее репликацию между master и slave серверами, то последовательность действий такая:
1 Редактируем nsdc.conf на master сервере: по подобию со старыми записями, добавляем туда соответвующие записи для новой зоны, а так же генерируем и добавляем новый TSIG ключ.
2 Создаем на master сервере текстовый файл ./zones/master/novaja.zona с записями для новой зоны.
3 Выполняем на master сервере последовательность команд nsdc rebuild && nsdc reload && nsdc restart (перестраемаем бинарную базу, подгружаем ее в память, перезапускаем демона).
4 Редактируем nsdc.conf на slave сервере. По подобию со старыми записями, добавляем туда соответвующие записи для новой зоны, а так же добавляем новый TSIG ключ который уже был сгенерирован на master.
5 Выполняем на slave сервере nsdc restart (перезапускаем демона).
6 Выполняем на master сервере команду nsdc notify, а на slave сервере проверяем получил ли он данные с master (или с помошью nslookup спрашиваем slave про новую зону, или выполняем на slave команду nsdc patch и смотрим создались ли корректные текстовые файлы в ./zones/slave/novaja.zona)
После выполнения такой последовательности новая зона должна будет корректно реплицироваться между серверами используя при этом отдельный TSIG ключ.
Замечания
Почитав файлы README и NSD-FOR-BIND-USERS из комплекта поставки NSD удалось просветлиться по поводу таких моментов:
То, является ли зона типа master или типа slave определяется директивой request-xfr - у master ее нет, у slave она должна быть.
NSD master не поддерживает инкрементные передачи IXFR, поддерживаются только полные AXFR передачи. Если мастер (как в данном примере) работает под NSD, то в конфиге slave появляется request-xfr: AXFR 192.168.0.1 ns1-ns2.domain.su
Директива provide-xfr на master эквивалентна директивам allow-transfer и server для BIND
В BIND ассоциация TSIG ключей происходит с IP сервера с которым производится коммуникация. В NSD TSIG ключи ассоциируются с ALC записями и соответствующие ключи используются при проведении различных запросов/ответов. Таким образом при работе с одним сервером можно применять одни ключи для оповещении о изменении зоны, и другие ключи при передаче данных зоны (своя пара для notify; allow-notify и своя для provide-xfr; request-xfr)!
На TSIG запросы отсылаются TSIG ответы.
В отличии от BIND, где адреса slave серверов определяются непосредственно из данных зоны (какие NS там указаны, такие значит у зоны slave), в NSD это определяется только из настроек в nsd.conf (кто указан в параметрах notify - тот и slave).
xfrd.state - файл-состояния используемый на slave для отслеживания истечения срока годности записей slave зоны.
NSD может принимать и отвечать на рекурсивные запросы, но только для тех зоны, которые запущены на нем. Никакие другие рекурсивные запросы не обслуживаются.
Директивы notify и provide-xfr являются необязательными. Если по какой-то причине есть желание запустить мастер сервер у которого нет слейвов (и соответсвенно некому слать уведомления о изменениях в зоне), то можно их не указывать. В таком случае так же нет необходимости в TSIG ключах.
Запуск сервера производится через стандартный rc скрипт /usr/local/etc/rc.d/nsd start. Управление в процессе работы и остановка производятся через сервисную утилиту nsdc.
Недавно был найден первый и единственный баг в безопасности NSD. В версии NSD 3.2.2 было исправлено однобайтовое переполнение буфера - ошибка присутсвующая во многих версиях NSD начиная с NSD 2.0.0 до NSD 3.2.1. Эта ошибка могла быть использована для проведения атак с целью вызвать отказ в обслуживании и падение процесса сервера.
Важно чтобы на мастер и слейв серверах была запущена синхронизация времени так как TSIG подписи имеют срок жизни - если в системном времени серверов будет расхождение, то зоны не будут реплицироваться!
Имена TSIG ключей используемых между мастером и слейвом должны совпадать - иначе такой ключ не будет принят.
При добавлении записей в зону достаточно выполнять nsdc rebuild && nsdc reload. При изменениях в конфигурационном файле (добавление/удаление зон, серверов или ключей) надо полностью перезапускать сервер через nsdc restart
размещено: 2008-06-25,
последнее обновление: 2010-06-20,
автор: terminus
Kolesya, 2008-10-13 в 8:40:52
+1
Упустил настройку для нескольких зон. Пробовал у себя, получилось только с одной "key"-секцией для всех зон.
terminus, 2008-10-13 в 12:33:17
То есть как - создав еще один key: он не позволял использовать его с новыми зонами?
Блин - так не должно быть... Я проверю, и потом исправлю статью, если что.
Kolesya, 2008-10-14 в 14:51:23
В конце файла зоны должен обязательно быть перевод строки, иначе ругается
terminus, 2008-10-19 в 13:54:23
Я сейчас попробовал запустить еще одну зону с отдельным TSIG ключем, и все вроде получилось... У меня он корректно работает в такой конфигурации - репликация между мастером и слейвом идет.
Заметил одни грабли с добавлением новой зоны - пока не сделать restart как мастеру так и слейву, они не начинали обмен данными для новой зоны. Чуть поправлю статью - внесу пример с добавлением зон.
Andrey, 2009-09-03 в 9:41:38
Terminus, спасибо за статью. Но у меня почему то не получается выполнение команды nsd-checkconf /usr/local/etc/nsd/nsd.conf.
Пишет /usr/local/etc/nsd/nsd.conf:19: error: syntax error
В строке 19 файла nsd.conf вот что:
key:
name: "ns1.clover.local"
algorithm: hmac-md5
secret: "3bt0qx18jKS/KHKpUgqeXg=="
А вот результат выполнения команды
dd if=/dev/urandom bs=16 count=1 | openssl base64
1+0 records in
1+0 records out
16 bytes transferred in 0.000068 secs (235470 bytes/sec)
3bt0qx18jKS/KHKpUgqeXg=="
Не подскажите в чем возможна ошибка?
Хочу добавить, что я только вторую неделю юзаю FreeBSD и я не опытный пользователь :(
gpnoz, 2009-10-15 в 23:30:23
По данной статье все собралось и заработало. Ни на что не ругалось. жду обновление зон.
Klop, 2009-12-09 в 10:28:54
В файлах зон перевод строки обязателен, иначе error. :-)
kirgudu, 2010-03-12 в 15:07:21
Тормозное поделище. bind жрет меньше памяти и нет всяких убийственных процессов в виде компиляции зон и прочей ерунды. В авторитативном, тредовом варианте работает лучше nsd. В добавок ixfr кривой.
An, 2011-04-22 в 16:52:59
Конфигурационный файл nsd.conf на master такой:
У меня ругался на 26 строку. Синтаксис эррор и все. Пришлось стереть слово «zone:» которое было на этой строке. Ну и помогло. FreeBSD 8.1-RELEASE х64
An, 2011-04-22 в 16:54:58
root@ /usr/home/username> nsd-checkconf /usr/local/etc/nsd/nsd.conf
/usr/local/etc/nsd/nsd.conf:26: error: syntax error
/usr/local/etc/nsd/nsd.conf:26: error: last zone has no name
/usr/local/etc/nsd/nsd.conf:26: error: last zone has no zonefile
read /usr/local/etc/nsd/nsd.conf failed: 3 errors in configuration file
terminus, 2011-04-22 в 18:43:27
Так это - может конфиг скопировали неполностью или с ошибкой?
Если на 26й строке было только ключевое слово zone: без ничего, то это ошибка - зона без указания имени и файла с данными...
DarkHost, 2011-11-30 в 17:38:56
Дело в том, что BIND я не считаю за DNS сервер которому можно было бы доверить держать зону выставленную в интернет.
Паранойя цветет буйным цветом.
Pandora, 2011-12-21 в 4:46:35
есть проще решение для тех кто переходит с бинда
bind2nsd = http://bind2nsd.sourceforge.net/
skeletor, 2012-10-22 в 18:17:52
А можно как-то обойтись без nsdc patch? Хотелось бы получать изменения на сервере сразу, а не через пару минут.
WHAT CAN BE BETTE THEN SEX, 2014-05-05 в 15:12:59
NSD все еще такой же крутой как и был или бинд уже нормально сделали?
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [15 шт.]