Настройка DNS сервера BIND в choot при обновлении FreeBSD 9.3 до 10 версии
Пришла пора обновлять некоторые сервера с установленной на них FreeBSD 9.3. В FreeBSD 10 версии из базовой системы был удален сервер BIND, и если продолжать его использование и далее, то требуется установить его из портов.
После обновления системы у меня быстро изменив пару строк конфигов не получилось запустить BIND в chroot`e на FreeBSD 10, поэтому я и решил детально расписать этот процесс. Возможно кому-то это сэкономит время.
Устанавливаем BIND из портов.
cd /usr/ports/dns/bind99 && make install clean
Оставшаяся конфигурация от 9.Х находится по пути /var/named/etc/namedb. И если действовать в соответствии со стандартами, то конфигурацию перемещаем в /usr/local/var/named/etc/namedb, т.к. даже сама система нам говорит, что в /var/named/ у нас ничего не должно быть.
root@:/usr/src # make check-old
>>> Checking for old files
/var/named/etc/namedb/named.root
>>> Checking for old libraries
>>> Checking for old directories
/var/named/dev
/var/named/etc
/var/named/etc/namedb
/var/named/etc/namedb/dynamic
/var/named/etc/namedb/master
/var/named/etc/namedb/working
/var/named/etc/namedb/slave
/var/named/var
/var/named/var/dump
/var/named/var/log
/var/named/var/run
/var/named/var/run/named
/var/named/var/stats
/var/run/named
To remove old files and directories run '/usr/obj/usr/src/make.amd64/bmake delete-old'.
To remove old libraries run '/usr/obj/usr/src/make.amd64/bmake delete-old-libs'.
Создаем рабочую директорию для BIND.
mv /var/named /usr/local/var
Удаляем ставшую уже ненужной ссылку
rm /etc/namedb
Файлы конфигурации созданные инсталлятором будут находиться по пути /usr/local/etc/namedb. На всякий случай резервируем их.
mv /usr/local/etc/namedb /usr/local/etc/namedb.orig
Создаем ссылку на наши конфигурационные файлы в директории /usr/local/etc/
ln -s /usr/local/var/named/etc/namedb /usr/local/etc/namedb
Создаем ссылку на конфигурационные файлы внутри chroot`a
mkdir -p /usr/local/var/named/usr/local
cd /usr/local/var/named/usr/local ln -s ../../etc
cp /usr/local/etc/namedb.orig/named.root /usr/local/var/named/etc/namedb
Создаем правила для devfs. Правим /etc/devfs.conf.
# Custom rules for the named chroot dev
[devfsrules_named_chroot=4]
add hide
add path run unhide
add path random unhide
Добавляем в /etc/fstab.
devfs /usr/local/var/named/dev devfs rw,ruleset=4 0 0
Монтируем.
mount /usr/local/var/named/dev
Правим /etc/rc.conf примерно следующего содержания.
named_enable="YES" # Run named, the DNS server (or NO).
named_program="/usr/local/sbin/named" # path to named, if you want a different one.
named_chrootdir="/usr/local/var/named" # Chroot directory (or "" not to auto-chroot it)
named_conf="/usr/local/etc/namedb/named.conf" # Path to the configuration file
named_flags="-4" # Flags for named
named_uid="bind" # User to run named as
named_chroot_autoupdate="YES" # Automatically install/update chrooted
# components of named. See /etc/rc.d/named.
named_symlink_enable="YES" # Symlink the chrooted pid file
#named_wait="NO" # Wait for working name service before exiting
#named_wait_host="localhost" # Hostname to check if named_wait is enabled
#named_auto_forward="NO" # Set up forwarders from /etc/resolv.conf
#named_auto_forward_only="NO" # Do "forward only" instead of "forward first"
Правим конфигурационный файл /usr/local/etc/namedb/named.conf
directory "/usr/local/etc/namedb";
Выставляем правильные права доступа на конфигурационные файлы.
chown -R bind:wheel /usr/local/var/named/etc/namedb
На данный момент нужно еще поправить /usr/local/etc/rc.d/named иначе при остановке сервиса появляется ошибка.
Stopping named.
umount: /var/namedb/usr/local/lib/engines: statfs: No such file or directory
umount: /var/namedb/usr/local/lib/engines: unknown file system
Вносим следующие изменения
named_poststop()
{
- if [ -n "${named_chrootdir}" -a -c ${named_chrootdir}/dev/null ]; then
+ if [ -d ${_openssl_engines} -a -n "${named_chrootdir}" -a -c ${named_chrootdir}/dev/null ]; then
Запускаем BIND
/usr/local/etc/rc.d/named start
В статье использовались материалы:
http://ximalas.info/2015/01/06/missing-chroot-for-dnsbind9910/
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=201423