Настройка tinydns из djbdns в NetBSD

Содержание

Введение

tinydns - это авторитетный UDP-сервер DNS из пакета djbdns авторства небезызвестного Дэниела Бернштайна.

Для запуска tinydns будем использовать пакет daemontools, а для ведения журналов - утилиту multilog из этого пакета. Подробнее об установке и использовании пакета и утилиты можно прочитать в статье ?Использование daemontools в NetBSD.

Сборка и установка djbdns

Пропишем в файл /etc/mk.conf опции сборки:

PKG_OPTIONS.djbdns=             -djbdns-cachestats -djbdns-ignoreip2 -djbdns-listenmultiple -djbdns-mergequeries -djbdns-tinydns64

Установим пакет:

# cd /usr/pkgsrc/net/djbdns
# make install

Создание пользователя и группы для tinydns

Создадим группу и пользователя, от имени которых будет работать tinydns:

# groupadd djbdns
# useradd -g djbdns tinydns

Настройка tinydns

Создадим каталог /usr/pkg/etc/tinydns, в котором будут храниться файлы конфигурации tinydns:

# mkdir /usr/pkg/etc/tinydns
# chmod +st /usr/pkg/etc/tinydns

Создадим пустой файл базы данных DNS, скрипты для добавления новых записей в этот файл и Makefile для преобразования базы данных в двоичный вид:

# touch /usr/pkg/etc/tinydns/data
# printf "#!/bin/sh\n\nexec /usr/pkg/bin/tinydns-edit data data.new add alias \${1+\"\$@\"}\n" > /usr/pkg/etc/tinydns/add-alias
# printf "#!/bin/sh\n\nexec /usr/pkg/bin/tinydns-edit data data.new add childns \${1+\"\$@\"}\n" > /usr/pkg/etc/tinydns/add-childns
# printf "#!/bin/sh\n\nexec /usr/pkg/bin/tinydns-edit data data.new add host \${1+\"\$@\"}\n" > /usr/pkg/etc/tinydns/add-host
# printf "#!/bin/sh\n\nexec /usr/pkg/bin/tinydns-edit data data.new add mx \${1+\"\$@\"}\n" > /usr/pkg/etc/tinydns/add-mx
# printf "#!/bin/sh\n\nexec /usr/pkg/bin/tinydns-edit data data.new add ns \${1+\"\$@\"}\n" > /usr/pkg/etc/tinydns/add-ns
# printf "data.cdb: data\n\t/usr/pkg/bin/tinydns-data\n" > /usr/pkg/etc/tinydns/Makefile
# chmod +x /usr/pkg/etc/tinydns/add-*

Настроим запуск tinydns через daemontools:

# mkdir /service/.tinydns
# cat > /service/.tinydns/run <<END
#!/bin/sh

exec 2>&1

exec \
envdir ./env \
envuidgid tinydns \
softlimit -d 3000000 \
/usr/pkg/bin/tinydns
END
# chmod +x /service/.tinydns/run

Зададим переменные окружения для tinydns:

# mkdir /service/.tinydns/env
# echo -n "0.0.0.0" > /service/.tinydns/env/IP
# echo -n "/usr/pkg/etc/tinydns" > /service/.tinydns/env/ROOT

Назначение переменных окружения:

  • IP - IP-адрес, на котором tinydns будет ожидать поступления входящих запросов,
  • ROOT - каталог, который tinydns будет использовать в качестве корневого.

Настроим ведение журналов tinydns с помощью утилиты multilog из пакета daemontools:

# mkdir /service/.tinydns/log
# cat > /service/.tinydns/log/run <<END
#!/bin/sh

exec \
setuidgid multilog \
multilog t /var/log/tinydns/
END
# chmod +x /service/.tinydns/log/run

Создадим каталог /var/log/tinydns/ для журналов tinydns:

# mkdir /var/log/tinydns/
# chown multilog:multilog /var/log/tinydns/

Запуск и проверка tinydns

Запустим сервис:

# mv /service/.tinydns /service/tinydns

Проверить, что он действительно запустился, можно с помощью команды следующего вида:

# netstat -anf inet | fgrep .53
udp        0      0  *.53                   *.*     

Проверить, что axfrdns отвечает на TCP-запросы, можно, например, с помощью утилиты dig:

$ dig stupin.su @192.168.252.5 -t A

Дополнительные материалы

Настройка авторитетного TCP-сервера DNS, который называется axfrdns, описана в статье Настройка axfrdns из djbdns в NetBSD.

Настройка файлов зон для обоих серверов описана в статье Настройка файлов зон для tinydns и axfrdns из djbdns.