DNS сервер · 4 min read · Oct 01, 2025

Установка и использование DNS-сервера Unbound на Debian Etch

Установка и использование DNS-сервера Unbound на Debian Etch

Версия 1.0
Автор: Фалко Тимме

Unbound — это проверяющий, рекурсивный и кэширующий DNS-резолвер, выпущенный под лицензией BSD. Версия 1.0.0 была выпущена 20 мая 2008 года. Этот учебник объясняет, как установить и использовать его на Debian Etch, включая создание зон для ваших собственных доменов.

Этот документ предоставляется без каких-либо гарантий! Я хочу сказать, что это не единственный способ настройки такой системы. Существует множество способов достижения этой цели, но это тот путь, который я выбираю. Я не даю никаких гарантий, что это сработает для вас!

1 Установка Unbound

Поскольку пакет Debian еще не доступен, нам нужно установить Unbound из исходников. Сначала установим необходимые пакеты:

apt-get install build-essential libssl-dev

Затем мы загружаем и устанавливаем Unbound следующим образом:

cd /tmp
wget http://www.unbound.net/downloads/unbound-latest.tar.gz
tar xvfz unbound-latest.tar.gz
cd unbound-1.0.0/
./configure
make
make install

Далее создаем пользователя и группу с именем unbound:

groupadd unbound
useradd -d /var/unbound -m -g unbound -s /bin/false unbound

Мы будем использовать директорию /var/unbound в качестве домашней директории DNS-сервера Unbound — она будет содержать конфигурацию Unbound, и Unbound будет работать в chroot для повышения безопасности.

Далее загружаем список корневых DNS-серверов:

cd /var/unbound
wget ftp://ftp.internic.net/domain/named.cache

Затем создаем директорию /var/unbound/var/run, которая будет содержать файл PID Unbound, unbound.pid, и создаем символическую ссылку /var/run/unbound.pid на него:

mkdir -p /var/unbound/var/run
chown -R unbound:unbound /var/unbound
ln -s /var/unbound/var/run/unbound.pid /var/run/unbound.pid

Чтобы запустить/остановить/перезапустить Unbound, нам нужен инициализационный скрипт, подобный этому:

vi /etc/init.d/unbound

| #!/bin/sh # # unbound Этот скрипт оболочки отвечает за запуск и остановку # unbound (DNS-сервер). exec="/usr/local/sbin/unbound" prog="unbound" config="/var/unbound/unbound.conf" pidfile="/var/run/unbound.pid" rootdir="/var/unbound" case "$1" in start) [ -x $exec ] || exit 5 [ -f $config ] || exit 6 echo -n "$Starting $prog: " # настройка корневой тюрьмы if [ -s /etc/localtime ]; then [ -d ${rootdir}/etc ] || mkdir -p ${rootdir}/etc ; if [ ! -e ${rootdir}/etc/localtime ] || /usr/bin/cmp -s /etc/localtime ${rootdir}/etc/localtime; then cp -fp /etc/localtime ${rootdir}/etc/localtime fi; fi; if [ -s /etc/resolv.conf ]; then [ -d ${rootdir}/etc ] || mkdir -p ${rootdir}/etc ; if [ ! -e ${rootdir}/etc/resolv.conf ] || /usr/bin/cmp -s /etc/resolv.conf ${rootdir}/etc/resolv.conf; then cp -fp /etc/resolv.conf ${rootdir}/etc/resolv.conf fi; fi; if ! egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/log' /proc/mounts; then [ -d ${rootdir}/dev ] || mkdir -p ${rootdir}/dev ; [ -e ${rootdir}/dev/log ] || touch ${rootdir}/dev/log mount --bind -n /dev/log ${rootdir}/dev/log >/dev/null 2>&1; fi; if ! egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/random' /proc/mounts; then [ -d ${rootdir}/dev ] || mkdir -p ${rootdir}/dev ; [ -e ${rootdir}/dev/random ] || touch ${rootdir}/dev/random mount --bind -n /dev/random ${rootdir}/dev/random >/dev/null 2>&1; fi; # если не запущен, запустите его здесь start-stop-daemon --start --quiet --pidfile $pidfile --exec $exec -- -c $config echo ;; stop) echo -n "$Stopping $prog: " start-stop-daemon --stop --quiet --oknodo --pidfile $pidfile echo if egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/log' /proc/mounts; then umount ${rootdir}/dev/log >/dev/null 2>&1 fi; if egrep -q '^/[^[:space:]]+[[:space:]]+'${rootdir}'/dev/random' /proc/mounts; then umount ${rootdir}/dev/random >/dev/null 2>&1 fi; ;; restart) start-stop-daemon --stop --quiet --oknodo --pidfile $pidfile start-stop-daemon --start --quiet --pidfile $pidfile --exec $exec -- -c $config ;; reload) start-stop-daemon --stop --signal 1 --quiet --oknodo --pidfile $pidfile --exec $exec ;; force_reload) start-stop-daemon --stop --signal 1 --quiet --oknodo --pidfile $pidfile --exec $exec ;; *) echo "$Usage: $0 {start|stop|restart|reload|force-reload}" exit 2 ;; esac exit 0 |

Сделайте скрипт исполняемым и создайте ссылки для автозагрузки:

chmod 755 /etc/init.d/unbound
update-rc.d unbound defaults

На этом установка завершена.

2 Настройка Unbound

Теперь мы создаем файл конфигурации Unbound, /var/unbound/unbound.conf. Вы можете найти пример файла конфигурации в /tmp/unbound-1.0.0/doc/example.conf, который содержит множество объяснений. Вы также можете посетить http://www.unbound.net/documentation/unbound.conf.html, чтобы узнать больше о конфигурации Unbound.

В следующей конфигурации я добавляю две зоны для доменов (example.com и example.net), которые я хочу разместить на DNS-сервере Unbound. Если вы знакомы с DNS-сервером BIND, вы сможете быстро освоить синтаксис Unbound. Настройте зоны под свои нужды или оставьте их, если вам нужен только локальный резолвер:

vi /var/unbound/unbound.conf

| server: verbosity: 1 interface: 0.0.0.0 port: 53 do-ip4: yes do-ip6: yes do-udp: yes do-tcp: yes do-daemonize: yes access-control: 0.0.0.0/0 allow #access-control: 0.0.0.0/0 refuse #access-control: 127.0.0.0/8 allow chroot: "/var/unbound" username: "unbound" directory: "/var/unbound" use-syslog: yes pidfile: "/var/run/unbound.pid" root-hints: "/var/unbound/named.cache" local-zone: "example.com." static local-data: "example.com. 86400 IN NS ns1.hostingcompany.com." local-data: "example.com. 86400 IN NS ns2.hostingcompany.com." local-data: "example.com. 86400 IN SOA ns1.hostingcompany.com. hostmaster.hostingcompany.com. 2008052201 28800 7200 604800 86400" local-data: "example.com. 86400 IN A 1.2.3.4" local-data: "www.example.com. 86400 IN CNAME example.com." local-data: "mail.example.com. 86400 IN A 1.2.3.4" local-data: "example.com. 86400 IN MX 10 mail.example.com." local-data: "example.com. 86400 IN TXT v=spf1 a mx ~all" local-zone: "example.net." static local-data: "example.net. 86400 IN NS ns1.hostingcompany.com." local-data: "example.net. 86400 IN NS ns2.hostingcompany.com." local-data: "example.net. 86400 IN SOA ns1.hostingcompany.com. hostmaster.hostingcompany.com. 2008052201 28800 7200 604800 86400" local-data: "example.net. 86400 IN A 1.2.3.4" local-data: "www.example.net. 86400 IN CNAME example.net." local-data: "mail.example.net. 86400 IN A 1.2.3.4" local-data: "example.net. 86400 IN MX 10 mail.example.net." local-data: "example.net. 86400 IN TXT v=spf1 a mx ~all" |

Я использовал interface: 0.0.0.0, что означает, что Unbound слушает на всех сетевых интерфейсах, и access-control: 0.0.0.0/0 allow, что означает, что любой может подключиться к Unbound. Если вы хотите, чтобы только localhost мог подключаться, например, вы можете использовать

| [...] access-control: 0.0.0.0/0 refuse access-control: 127.0.0.0/8 allow [...] |

вместо этого.

Чтобы проверить, правильный ли синтаксис вашей конфигурации Unbound, вы можете использовать команду unbound-checkconf:

unbound-checkconf /var/unbound/unbound.conf

server1:~# unbound-checkconf /var/unbound/unbound.conf
unbound-checkconf: no errors in /var/unbound/unbound.conf
server1:~#

Если синтаксис в порядке, вы можете наконец запустить Unbound:

/etc/init.d/unbound start

Чтобы узнать больше о Unbound, пожалуйста, обратитесь к документации Unbound.

3 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.