Unbound - настройка кеширующего DNS-сервера
В релизе FreeBSD 10.0 DNS-сервер BIND заменен на связку из кеширующего DNS-сервера Unbound и библиотеки LDNS. Разбираясь с нововведениями, решил заодно ознакомиться и с настройкой Unbound.
Итак, приступим к настройке... Поиск примера конфигурационного файла в только установленной системе результатов не дал... Однако на помощь пришла утилита 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. Как оказалось, пример конфигурационного файла был предложен именно там. Попробуем собрать небольшой файл конфигурации, отталкиваясь от предложеного примера и доступных опций.
# unbound-checkconf
unbound-checkconf: no errors in /var/unbound/unbound.conf
Кажется все в порядке. Добавим загрузку демона при старте системы:
# echo 'local_unbound_enable="YES"' >> /etc/rc.conf
Кажется ничего не пропустили... Даем команду на запуск:
# /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 ex.ua
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 17112
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 12, ADDITIONAL: 0
;; QUESTION SECTION:
;; ex.ua. IN A
;; ANSWER SECTION:
ex.ua. 352 IN A 77.120.115.184
;; AUTHORITY SECTION:
ex.ua. 352 IN NS nsc1.srv53.org.
ex.ua. 352 IN NS nsc1.srv53.com.
ex.ua. 352 IN NS nsa3.srv53.net.
ex.ua. 352 IN NS nsa4.srv53.com.
ex.ua. 352 IN NS nsd1.srv53.net.
ex.ua. 352 IN NS nsa2.srv53.org.
ex.ua. 352 IN NS nsb2.srv53.net.
ex.ua. 352 IN NS nsb1.srv53.com.
ex.ua. 352 IN NS nsd4.srv53.org.
ex.ua. 352 IN NS nsb1.srv53.org.
ex.ua. 352 IN NS nsd3.srv53.com.
ex.ua. 352 IN NS nsc4.srv53.net.
;; ADDITIONAL SECTION:
;; Query time: 0 msec
;; SERVER: 127.0.0.1
;; WHEN: Tue Jan 13 21:26:59 2015
;; MSG SIZE rcvd: 294
Клиентские запросы обрабатываются. Отлично, продолжим настройку... Следующий шаг - настройка утилиты 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
После этого необходимо добавить следующий блок в конфигурационный файл 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:
# /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
insecure_add zone add domain-insecure zone
insecure_remove zone remove domain-insecure zone
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.22
BSD licensed, see LICENSE in source package for details.
Report bugs to unbound-bugs@nlnetlabs.nl
Здесь, благодаря комментариям, все интуитивно понятно
Проверим работоспособность утилиты, отправив какую либо команду в unbound-control, например reload:
# unbound-control reload
ok
Итак, приступим к настройке... Поиск примера конфигурационного файла в только установленной системе результатов не дал... Однако на помощь пришла утилита 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: 192.168.1.253 # Указываем исходящий интерфейс outgoing-interface: 192.168.1.253 # Указываем сети, чьи запросы будем обрабатывать (у меня их две) access-control: 192.168.1.0/24 allow access-control: 192.168.2.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 'local_unbound_enable="YES"' >> /etc/rc.conf
Кажется ничего не пропустили... Даем команду на запуск:
# /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 ex.ua
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 17112
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 12, ADDITIONAL: 0
;; QUESTION SECTION:
;; ex.ua. IN A
;; ANSWER SECTION:
ex.ua. 352 IN A 77.120.115.184
;; AUTHORITY SECTION:
ex.ua. 352 IN NS nsc1.srv53.org.
ex.ua. 352 IN NS nsc1.srv53.com.
ex.ua. 352 IN NS nsa3.srv53.net.
ex.ua. 352 IN NS nsa4.srv53.com.
ex.ua. 352 IN NS nsd1.srv53.net.
ex.ua. 352 IN NS nsa2.srv53.org.
ex.ua. 352 IN NS nsb2.srv53.net.
ex.ua. 352 IN NS nsb1.srv53.com.
ex.ua. 352 IN NS nsd4.srv53.org.
ex.ua. 352 IN NS nsb1.srv53.org.
ex.ua. 352 IN NS nsd3.srv53.com.
ex.ua. 352 IN NS nsc4.srv53.net.
;; ADDITIONAL SECTION:
;; Query time: 0 msec
;; SERVER: 127.0.0.1
;; WHEN: Tue Jan 13 21:26:59 2015
;; MSG SIZE rcvd: 294
Клиентские запросы обрабатываются. Отлично, продолжим настройку... Следующий шаг - настройка утилиты 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
После этого необходимо добавить следующий блок в конфигурационный файл 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:
# /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
insecure_add zone add domain-insecure zone
insecure_remove zone remove domain-insecure zone
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.22
BSD licensed, see LICENSE in source package for details.
Report bugs to unbound-bugs@nlnetlabs.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"
auto-trust-anchor-file: "/var/unbound/root.key"
После внесения изменений необходимо перезапустить unbound, чтобы изменения вступили в силу:
# unbound-control reload
ok
ok
Проверим поддержку DNSSEC:
# drill -D example.com @127.0.0.1
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 18345
;; flags: qr rd ra ad ; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 0
;; QUESTION SECTION:
;; example.com. IN A
;; ANSWER SECTION:
example.com. 86400 IN A 93.184.216.34
example.com. 86400 IN RRSIG A 8 2 86400 20150120101954 20150113072829 33424 example.com. M06J1j0RmAjHk4poQZ49PavC3M5bhdsl9w+1n3SaxCHQNuwsTI00SfGLYRLWapUvx0BCjQCR4Gh2cvU0HxlIt5OcL0atwel3JK0Ygci8WtrNrvlOHEzRVStBNUm2ZSDCiNj5QY2cAvv+H6hGnN+Tg2drsW9Pz0MGIBvzSEWqfFk=
;; AUTHORITY SECTION:
example.com. 172800 IN NS a.iana-servers.net.
example.com. 172800 IN NS b.iana-servers.net.
example.com. 172800 IN RRSIG NS 8 2 172800 20150120144818 20150113072829 33424 example.com. JvX0htxseR1wQlQh0ku9HDTdH9+R9lsyVXznv2Wl7Hrjxsfrgf/YdxI/v/AtFftNUWIxNM/ryYn9v7aRaOVQmxAf6OaJq+Yhlzv1JWDSLYq1EaXjDRmj+PpPf7Z7WU3Fb3SNg412dNKN7RzuNjwM1hkIDf94xxP0UfS8/h5w/aU=
;; ADDITIONAL SECTION:
;; Query time: 1121 msec
;; EDNS: version 0; flags: do ; udp: 4096
;; SERVER: 127.0.0.1
;; WHEN: Tue Jan 13 22:07:01 2015
;; MSG SIZE rcvd: 446
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 18345
;; flags: qr rd ra ad ; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 0
;; QUESTION SECTION:
;; example.com. IN A
;; ANSWER SECTION:
example.com. 86400 IN A 93.184.216.34
example.com. 86400 IN RRSIG A 8 2 86400 20150120101954 20150113072829 33424 example.com. M06J1j0RmAjHk4poQZ49PavC3M5bhdsl9w+1n3SaxCHQNuwsTI00SfGLYRLWapUvx0BCjQCR4Gh2cvU0HxlIt5OcL0atwel3JK0Ygci8WtrNrvlOHEzRVStBNUm2ZSDCiNj5QY2cAvv+H6hGnN+Tg2drsW9Pz0MGIBvzSEWqfFk=
;; AUTHORITY SECTION:
example.com. 172800 IN NS a.iana-servers.net.
example.com. 172800 IN NS b.iana-servers.net.
example.com. 172800 IN RRSIG NS 8 2 172800 20150120144818 20150113072829 33424 example.com. JvX0htxseR1wQlQh0ku9HDTdH9+R9lsyVXznv2Wl7Hrjxsfrgf/YdxI/v/AtFftNUWIxNM/ryYn9v7aRaOVQmxAf6OaJq+Yhlzv1JWDSLYq1EaXjDRmj+PpPf7Z7WU3Fb3SNg412dNKN7RzuNjwM1hkIDf94xxP0UfS8/h5w/aU=
;; ADDITIONAL SECTION:
;; Query time: 1121 msec
;; EDNS: version 0; flags: do ; udp: 4096
;; SERVER: 127.0.0.1
;; WHEN: Tue Jan 13 22:07:01 2015
;; MSG SIZE rcvd: 446
Базовая настройка Unbound закончена, однако есть еще много опций конфигурации, ознакомиться с которыми можно в man unbound.conf.
Комментарии
Отправить комментарий