Настройка axfrdns из djbdns в NetBSD
Содержание
Введение
axfrdns
- это авторитетный TCP-сервер DNS из пакета djbdns
авторства небезызвестного Дэниела Бернштайна.
Для запуска axfrdns
будем использовать пакет 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
Создание пользователя и группы для axfrdns
Создадим группу и пользователя, от имени которых будет работать tinydns
:
# groupadd djbdns
# useradd -g djbdns axfrdns
Настройка axfrdns
Создадим файл /usr/pkg/etc/axfrdns/tcp
, содержащий правила ограничения доступа к axfrdns
по IP-адресу клиента, и файл /usr/pkg/etc/tinydns/Makefile
для компиляции этих правил в двоичный вид в файл /usr/pkg/etc/axfrdns/tcp.cdb
:
# mkdir /usr/pkg/etc/axfrdns
# printf "# sample line: 1.2.3.4:allow,AXFR=\"heaven.af.mil/3.2.1.in-addr.arpa\"\n:deny\n" > /usr/pkg/etc/axfrdns/tcp
# printf "tcp.cdb: tcp\n\ttcprules tcp.cdb tcp.tmp < tcp" > /usr/pkg/etc/axfrdns/Makefile
Настроим запуск axfrdns
через daemontools
:
# mkdir /service/.axfrdns
# cat > /service/.axfrdns/run <<END
#!/bin/sh
exec 2>&1
exec \
envdir ./env \
envuidgid axfrdns \
softlimit -d 300000 \
tcpserver -vDRHl0 -x /usr/pkg/etc/axfrdns/tcp.cdb -- 0.0.0.0 53 \
/usr/pkg/bin/axfrdns
END
# chmod +x /service/.axrfdns/run
Обратите внимание, что IP-адрес, на котором axfrdns
будет ожидать входящих подключений, указывается в скрипте /service/.axfrdns/run
. В примере выше это адрес 0.0.0.0
, то есть входящие подключения будут ожидаться на всех локальных IP-адресах.
Зададим переменную окружения ROOT
, в которой поместим путь к каталогу, который axfrdns
будет использовать в качестве корневого:
# mkdir /service/.axfrdns/env
# echo -n "/usr/pkg/etc/tinydns" > /service/.axfrdns/env/ROOT
Настроим ведение журналов axfrdns
с помощью утилиты multilog
из пакета daemontools
:
# mkdir /service/.axfrdns/log
# cat > /service/.axfrdns/log/run <<END
#!/bin/sh
exec \
setuidgid multilog \
multilog t /var/log/axfrdns/
END
# chmod +x /service/.axfrdns/log/run
Создадим каталог /var/log/axfrdns/
для журналов axfrdns
:
# mkdir /var/log/axfrdns/
# chown multilog:multilog /var/log/axfrdns/
Настройка разрешений на передачу зон
Для того, чтобы с любого IP-адреса можно было выполнять запросы единичных записей по протоколу TCP, нужно поместить в файл /usr/pkg/etc/axfrdns/tcp
такую строчку:
:allow,AXFR=""
Для того, чтобы позволить IP-адресу 192.168.252.1
полное копирование зоны stupin.su
, нужно добавить в файл /usr/pkg/etc/axfrdns/tcp
такую строчку:
192.168.252.1:allow,AXFR="stupin.su"
Для разрешения передачи нескольких зон их можно перечислить через косую черту, вот так:
192.168.252.1:allow,AXFR="stupin.su/kuramshin.me/252.168.192.in-addr.arpa/253.168.192.in-addr.arpa/254.168.192.in-addr-arpa"
Для того, чтобы разрешить передавать указанному IP-адресу любую имеющуюся зону, нужно опустить атрибут AXFR полностью:
192.168.252.1:allow
После редактирования файла не забудьте выполнить в каталоге /usr/pkg/etc/axfrdns
команду make
:
# make
Изменения вступаю в силу немедленно, перезапуск сервиса axfrdns
при этом не требуется.
Запуск и проверка axfrdns
Запустим сервис:
# mv /service/.axfrdns /service/axfrdns
Проверить, что он действительно запустился, можно с помощью команды следующего вида:
# netstat -anf inet | fgrep .53
tcp 0 0 *.53 *.* LISTEN
udp 0 0 *.53 *.*
Как видно, теперь кроме UDP-сокета прослушивается ещё и TCP-сокет.
Проверить, что axfrdns
отвечает на TCP-запросы, можно, например, с помощью утилиты dig
:
$ dig stupin.su @192.168.252.5 +tcp -t MX
Проверить передачу зоны можно следующим образом:
$ dig stupin.su @192.168.252.5 +tcp -t AXFR
Дополнительные материалы
Настройка авторитетного UDP-сервера DNS, который называется tinydns
, описана в статье Настройка tinydns из djbdns в NetBSD.
Настройка файлов зон для обоих серверов описана в статье Настройка файлов зон для tinydns и axfrdns из djbdns.