В релизе FreeBSD 10.0 DNS-сервер BIND заменен на связку из кеширующего DNS-сервера Unbound и библиотеки LDNS. Разбираясь с нововведениями, решил заодно ознакомиться и с настройкой Unbound.
Unbound распространяется под лицензией BSD, имеет модульную структуру и поддерживает работу резолвера в рекурсивном и кэширующем режиме. Во время работы сервера, кеш целиком распологается в памяти. Также имеется возможность проверки валидности DNSSEC-сигнатур, асинхронных запросов и библиотеки для интеграции кода резолвера в пользовательские приложения (stub-resolvers). Вначале прототип сервера был написан на языке Java, после чего был переписан на языке Си, что позволило значительно увеличить его производительность. По сравнению с BIND, стоит отметить скромные размеры и высокую производительность.
Итак, приступим к настройке... Поиск примера конфигурационного файла в только установленной системе результатов не дал... Однако на помощь пришла утилита unbound-checkconf:
# unbound-checkconf [1393875321] unbound-checkconf[1362:0] error: Could not open /var/unbound/unbound.conf: No such file or directory |
Конфигурационный файл unbound.conf должен находиться в каталоге /var/unbound. С доступными опциями решил ознакомиться на страницах руководства man unbound.conf. Как оказалось, пример конфигурационного файла был предложен именно там. Попробуем собрать небольшой файл конфигурации, отталкиваясь от предложеного примера и доступных опций.
server: # Уровень логирования - 0 (только ошибки) verbosity: 0 # Порт, на котором "слушать" запросы port: 53 # Описываем интерфейсы, на которых будем "слушать" запросы interface: 127.0.0.1 interface: 10.3.159.254 # Указываем исходящий интерфейс outgoing-interface: 10.12.59.30 # Указываем сети, чьи запросы будем обрабатывать access-control: 10.3.159.0/24 allow # разрешаем ip4 tcp/udp и запрещаем поддержку ipv6 do-ip4: yes do-ip6: no do-udp: yes do-tcp: yes # От чьего имени работает daemon unbound username: unbound # Указываем лог-файл и отключаем использование syslog logfile: "unbound.log" use-syslog: no # Указываем путь к pid-файлу pidfile: "/var/run/local_unbound.pid" # "Прячем" версию софта hide-version: yes |
После создания конфигурационного файла проверим конфигурацию с помощью уже известной утилиты unbound-checkconf:
# unbound-checkconf unbound-checkconf: no errors in /var/unbound/unbound.conf |
Кажется все в порядке. Добавим загрузку демона при старте системы:
# echo '# DNS server' >> /etc/rc.conf # echo 'local_unbound_enable="YES"' >> /etc/rc.conf |
Кажется ничего не пропустили... Даем команду на запуск:
# sh /etc/rc.d/local_unbound start Starting local_unbound. |
Проверим, запустился ли процесс:
# ps -ax | grep unbound | grep -v grep 2340 - Is 0:00,03 /usr/sbin/unbound -c/var/unbound/unbound.conf |
Демон запущен. Проверим, обрабатывает ли он запросы:
# drill @127.0.0.1 muff.kiev.ua ;; ANSWER SECTION: ;; AUTHORITY SECTION: ;; ADDITIONAL SECTION: ;; Query time: 0 msec |
Клиентские запросы обрабатываются. Отлично, продолжим настройку...
Следующий шаг - настройка утилиты unbound-control на работу с unbound. Для этого воспользуемся прилагаемой утилитой unbound-control-setup:
# unbound-control-setup setup in directory /etc/unbound generating unbound_server.key Generating RSA private key, 1536 bit long modulus ...............++++ .............................................................++++ e is 65537 (0x10001) generating unbound_control.key Generating RSA private key, 1536 bit long modulus ................................................................++++ ....................................................................................++++ e is 65537 (0x10001) create unbound_server.pem (self signed certificate) create unbound_control.pem (signed client certificate) Signature ok subject=/CN=unbound-control Getting CA Private Key Setup success. Certificates created. Enable in unbound.conf file to use |
После этого необходимо добавить следующий блок в конфигурационный файл unbound.conf:
remote-control: control-enable: yes control-interface: 127.0.0.1 control-port: 953 server-key-file: "unbound_server.key" server-cert-file: "unbound_server.pem" control-key-file: "unbound_control.key" control-cert-file: "unbound_control.pem" |
Чтобы изменения вступили в силу, необходимо перезапустить unbound:
# sh /etc/rc.d/local_unbound restart |
Чтобы ознакомиться с возможностями утилиты unbound-control, достаточно вызвать ее без ключей, либо же с ключем -h:
# unbound-control -h Usage: unbound-control [options] command Remote control utility for unbound server. Options: -c file config file, default is /var/unbound/unbound.conf -s ip[@port] server address, if omitted config is used. -q quiet (don't print anything if it works ok). -h show this usage help. Commands: start start server; runs unbound(8) stop stops the server reload reloads the server (this flushes data, stats, requestlist) stats print statistics stats_noreset peek at statistics status display status of server verbosity <number> change logging detail log_reopen close and open the logfile local_zone <name> <type> add new local zone local_zone_remove <name> remove local zone and its contents local_data <RR data...> add local data, for example local_data www.example.com A 192.0.2.1 local_data_remove <name> remove local RR data from name dump_cache print cache to stdout load_cache load cache from stdin lookup <name> print nameservers for name flush <name> flushes common types for name from cache types: A, AAAA, MX, PTR, NS, SOA, CNAME, DNAME, SRV, NAPTR flush_type <name> <type> flush name, type from cache flush_zone <name> flush everything at or under name from rr and dnssec caches flush_bogus flush all bogus data flush_stats flush statistics, make zero flush_requestlist drop queries that are worked on dump_requestlist show what is worked on flush_infra [all | ip] remove ping, edns for one IP or all dump_infra show ping and edns entries set_option opt: val set option to value, no reload get_option opt get option value list_stubs list stub-zones and root hints in use list_forwards list forward-zones in use list_local_zones list local-zones in use list_local_data list local-data RRs in use forward_add [+i] zone addr.. add forward-zone with servers forward_remove [+i] zone remove forward zone stub_add [+ip] zone addr.. add stub-zone with servers stub_remove [+i] zone remove stub zone +i also do dnssec insecure point +p set stub to use priming forward [off | addr ...] without arg show forward setup or off to turn off root forwarding or give list of ip addresses Version 1.4.20 BSD licensed, see LICENSE in source package for details. Report bugs to unbound-bugs [at] nlnetlabs [dot] nl |
Здесь, благодаря комментариям, все интуитивно понятно
Проверим работоспособность утилиты, отправив какую либо команду в unbound-control, например reload:
# unbound-control reload ok |
Поддерживается возможность управления удаленным сервером unbound, используя локальную версию утилиты unbound-control. Для этого необходимо, чтобы на машине, с которой выполняются команды, публичные pem-ключи удаленного сервера. Также необходимо, чтобы эти ключи были прописаны в конфигурационном файле unbound.conf.
Также unbound поддерживает использование DNSSEC. Рассматривать что такое DNSSEC и принципы его работы не вижу смысла - информации в Сети предостаточно. Остановимся непосредственно на настройке unbound для поддержки DNSSEC.
Для включения поддержки DNSSEC, в конфигурационный файл unbound.conf (в секцию server) необходимо добавить следующие строки:
module-config: "validator iterator" auto-trust-anchor-file: "/var/unbound/root.key" |
После внесения изменений необходимо перезапустить unbound, чтобы изменения вступили в силу:
# unbound-control reload ok |
Проверим поддержку DNSSEC:
# drill -D example.com @127.0.0.1
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 30826 ;; ANSWER SECTION: ;; AUTHORITY SECTION: ;; ADDITIONAL SECTION: ;; Query time: 0 msec |
Ну и на всякий случай - проверим поддержку DNSSEC непосредственно в браузере. С целью проверки установим для Firefox плагин DNSSEC Validator. Результат - на картинке внизу:
Базовая настройка Unbound закончена, однако есть еще много опций конфигурации, ознакомиться с которыми можно в man unbound.conf.
Re: Unbound - настройка кеширующего DNS-сервера
Можно уточнить:
А в строке
И где в unbound.conf прописывать список dns провайдера(Аналог секции forwardes{} в named)?
Re: Unbound - настройка кеширующего DNS-сервера
Да, относительно интерфейсов - все правильно.
Относительно форварда запросов - попробуйте в конец файла добавить такую секцию:
forward-zone: name: "."
forward-addr: 8.8.8.8
forward-addr: 8.8.4.4
Сейчас немного занят, нету возможности протестировать. Должно работать.
Re: Unbound - настройка кеширующего DNS-сервера
В настоящий момент ни в версии unbound для linux ни в версии для windows нет команды drill. Есть какой-то другой способ проверить работоспособность dnssec?
Re: Unbound - настройка кеширующего DNS-сервера
"Есть много способов снять с кота шкуру..."
Как вариант, перейдите на страницу dnssec.dxdt.ru.