# portsnap fetch # portsnap extract
После обновления портов, ставим Unbound традиционным методом:
# cd /usr/ports/dns/unbound # make install clean
При первой установке, порт предлагал выбрать только одну опцию конфигурации.
Options for unbound 1.0.0_1 [ ] LIBEVENT is useful when using many (10000) outgoing ports
Я ее выбрал. Это приводит к установке дополнительного порта libevent-1.3e и линковке с ним Unbound в процессе компиляции. Более детально ознакомиться с тем, что такое libevent можно на официальном сайте проекта http://www.monkey.org/~provos/libevent/ Там же есть красивые графики с результатами «до» и «после». Результат с «после» мне понравился - тем более, что абсолютно за бесплатно...На машине Pentium 4 2,53GHz сборка порта заняла три-четыре минуты. Файлы установленные портом:
/usr/local/man/man1/unbound-host.1.gz /usr/local/man/man3/libunbound.3.gz /usr/local/man/man5/unbound.conf.5.gz /usr/local/man/man8/unbound.8.gz /usr/local/man/man8/unbound-checkconf.8.gz /usr/local/etc/unbound/unbound.conf.sample /usr/local/include/unbound.h /usr/local/lib/libunbound.so.0 /usr/local/lib/libunbound.so /usr/local/lib/libunbound.la /usr/local/lib/libunbound.a /usr/local/sbin/unbound /usr/local/sbin/unbound-checkconf /usr/local/sbin/unbound-host /usr/local/share/doc/unbound/CREDITS /usr/local/share/doc/unbound/Changelog /usr/local/share/doc/unbound/FEATURES /usr/local/share/doc/unbound/LICENSE /usr/local/share/doc/unbound/README /usr/local/share/doc/unbound/README.svn /usr/local/share/doc/unbound/README.tests /usr/local/share/doc/unbound/TODO /usr/local/share/doc/unbound/plan /usr/local/share/doc/unbound/requirements.txt /usr/local/etc/rc.d/unbound
Управление запуском/перезапуском/остановкой будет вестись через стандартный rc.d скрипт установленный вместе с портом. Для проверки правильности unbound.conf удобно применять unbound-checkconf. Все просто.В процессе установки порта, в систему автоматически добавляется новый пользователь из-под которого будет работать демон unbound:
unbound:*:59:1:unbound dns resolver:/nonexistent:/usr/sbin/nologin
НастройкаТрадиционно подразумевается необходимость внимательного прочтения man unbound.conf и осознания прочитанного в свете личных требований. Опций много. Я выбирал и помещал в свой конфиг только те, которые считал нужными себе, и оставлял с настройками по-умолчанию остальные. В комментариях придется описать некоторые наиболее интересные. Unbound позволяет запускать себя в chroot окружении. Я решил использовать эту возможность чтобы не замарачиваться с настройкой jail.Для обеспечения полноценной работы в chroot, придется сделать один дополнительный маневр. Дело в том, что unbound необходим доступ к /dev/urandom. Я посчитал, что правильным решением будет ограниченное монтирование devfs в подкаталог ./dev в каталоге unbound.В директории /usr/local/etc/unbound создаем новую поддиректорию ./dev:
drwxr-xr-x 3 unbound wheel 512 5 июл 17:54 . drwxr-xr-x 37 root wheel 1536 3 июл 20:53 .. dr-xr-xr-x 4 root wheel 512 5 июл 20:00 dev
В файле /etc/devfs.rules прописываем новый devfs releset:
[unbound_ruleset=20] add hide add path null unhide add path zero unhide add path crypto unhide add path random unhide add path urandom unhide
В файле /etc/fstab прописываем монтирование devfs:
devfs /usr/local/etc/unbound/dev devfs rw 0 0
В файле /etc/rc.conf прописываем применение созданного devfs releset к точке монтирования:
devfs_set_rulesets="/usr/local/etc/unbound/dev=unbound_ruleset"
В результате всех этих танцев с бубном, после каждой перезагрузки компа будим иметь в ./dev:
[root@dns /usr/local/etc/unbound/dev]# ls -la total 0 crw-rw-rw- 1 root wheel 0, 13 5 июл 20:22 null crw-rw-rw- 1 root wheel 0, 19 5 июл 20:00 random lrwxr-xr-x 1 root wheel 6 5 июл 17:00 urandom -> random crw-rw-rw- 1 root wheel 0, 14 5 июл 17:00 zero
Стоит перезапустить FreeBSD и проверить, что devfs красиво подмонтировалась в /usr/local/etc/unbound/dev со всеми ограничениями как положено.Далее продолжаем настройку unbound:Переходим в /usr/local/etc/unbound и скачиваем туда свежий hint-файл named.cache с информацией о адресах корневых серверов:
# cd /usr/local/etc/unbound # fetch ftp://FTP.INTERNIC.NET/domain/named.cache
На работающем сервере каталог /usr/local/etc/unbound будет выглядеть так:
[root@dns /usr/local/etc/unbound]# ls -la total 13 drwxr-xr-x 3 unbound wheel 512 5 июл 17:54 . drwxr-xr-x 37 root wheel 1536 3 июл 20:53 .. dr-xr-xr-x 4 root wheel 512 5 июл 20:00 dev -rw-r--r-- 1 root wheel 2879 4 фев 10:00 named.cache -rw-r--r-- 1 root wheel 1419 5 июл 17:54 unbound.conf -rw-r--r-- 1 unbound wheel 5 5 июл 17:54 unbound.pid
Конфиг unbound.conf:
server: verbosity: 0 num-threads: 8 interface: 0.0.0.0 port: 53 outgoing-range: 256 outgoing-port-permit: 32768-65000 msg-cache-size: 16m msg-cache-slabs: 4 num-queries-per-thread: 1024 rrset-cache-size: 32m rrset-cache-slabs: 4 cache-max-ttl: 86400 infra-host-ttl: 900 infra-lame-ttl: 900 infra-cache-slabs: 4 infra-cache-numhosts: 10000 infra-cache-lame-size: 10k do-ip4: yes do-ip6: no do-udp: yes do-tcp: yes do-daemonize: yes access-control: 0.0.0.0/0 refuse access-control: 192.168.1.0/24 allow access-control: 127.0.0.0/8 allow access-control: ::0/0 refuse access-control: ::1 allow access-control: ::ffff:127.0.0.1 allow chroot: "/usr/local/etc/unbound" username: "unbound" directory: "/usr/local/etc/unbound" #logfile: "/usr/local/etc/unbound/unbound.log" logfile: "" use-syslog: no pidfile: "/usr/local/etc/unbound/unbound.pid" root-hints: "/usr/local/etc/unbound/named.cache" identity: "DNS" version: "1.0" hide-identity: yes hide-version: yes harden-glue: yes do-not-query-address: 127.0.0.1/8 do-not-query-address: ::1 do-not-query-localhost: yes module-config: "iterator" #local-zone: "mail.ru." transparent # local-data: "www.mail.ru. 300 IN A 10.10.10.10" # local-data: "ftp.mail.ru. 300 IN A 172.16.1.2" #stub-zone: # name: "times.lv." # stub-addr: 193.108.185.34 # forward-host: #forward-zone: # name: "rus.delfi.lv." # stub-addr: # forward-host: ns.nic.lv.
Прописываем в /etc/rc.conf:
unbound_enable="YES"
В общем-то на этом все. Запускаем unbound-checkconf и, если нет сообщений об ошибках, то можно командовать команду:
# /usr/local/etc/rc.d/unbound start
И сервер заведется.После этого стоит проверить, что все успешно запустилось:
# ps auxw | grep unbound unbound 4018 0,0 0,8 34152 8488 ?? Is 17:36 0:00,03 /usr/local/sbin/unbound # netstat -an | grep *.53 tcp4 0 0 *.53 *.* LISTEN udp4 0 0 *.53 *.*
А так же поспрашивать с помошью nslookup наш новый ресольвер и убедиться, что все в порядке.Если в будущем понадобиться менять какие-либо параметры в unbound.conf то, для того чтобы сервер перечитал свой конфиг, достаточно выполнения традиционного:
/usr/local/etc/rc.d/unbound reload
КомментарииОпции unbound.conf:
outgoing-range: 256 outgoing-port-permit: 32768-65000
- Эти две опции указывают на то, сколько различных случайных портов может использовать каждый thread при проведении запросов, и на то из какого диапазона можно брать эти порты. Каждый новый запрос к авторитарным DNS серверам отправляется со своего порта — это сделано для секюрности.Стоит учитывать, что сокет = открытый файл. На максимальное количество файлов которые может открыть процесс, влияют настройки из /etc/login.conf. По-умолчанию для пользователя default уже установлено openfiles=unlimited.
msg-cache-size: 16m msg-cache-slabs: 4 rrset-cache-size: 32m rrset-cache-slabs: 4 cache-max-ttl: 86400
- Эти опции указывают на то, каким будет размер кеша принимаемых запросов и, собственно, кеша DNS записей. cache-max-ttl указывает на максимальный срок жизни записей в кеше даже не смотря на их оригинальный TTL.
num-queries-per-thread: 1024
- Указывает сколько клиентских запросов может обработать один поток. При превышении, лишние запросы будут дропаться.
access-control: 192.168.1.0/24 allow
- Кому разрешено посылать рекурсивные запросы (пользоваться кешем)
logfile: "" use-syslog: no
- Полное отключение любого логирования. Мне не нужно. Если надо — можно включить и установить уровень verbosity от 1 до 4. В отличии от NSD, Unbound пишет в свои логи очень много разной статистики. При вербозности 4, вывод в лог по насыщенности практически напоминает tcpdump.
module-config: "iterator"
- Устанавливает режим работы как исключительно DNS кеша. Еще один вариант этой настройки "validator iterator". В таком случае появляется возможность использовать DNSSEC расширения.
local-zone:
- Возможность «засорить» кеш своими данными приоритет которых будет выше чем у данных оригинальной зоны. Параметр устанавливаемый после имени local-zone указывает на режим как надо отвечать на данные которые предварительно не были указаны. Варианты:
deny - serves local data (if any), else, drops queries. efuse - serves local data (if any), else, replies with error. static - serves local data, else, nxdomain or nodata answer. transparent - serves local data, else, resolves normally . direct - serves the zone data for any subdomain in the zone. nodefault - can be used to normally resolve AS112 zones.
stub-zone:
- Перенаправление всех запросов к этой зоне на указанный авторитарный сервер. Запросы отсылаются как итерационные.
forward-zone:
- Перенаправление всех запросов к этой зоне на указанный кеширующий сервер. Запросы отсылаются как рекурсивные. Это способ форвардинга запросов. Если указать здесь:
forward-zone: name: "." stub-addr: 192.168.2.1
То все запросы направляемые на наш сервер, будут перенаправляться на 192.168.2.1 который уже будет проводить всю рекурсию и возвращать ответ.