Unbound е модерен, високопроизводителен DNS resolver, създаден с фокус върху сигурност, скорост и мащабируемост. Той работи като recursive caching DNS сървър, което означава, че приема заявки от клиенти и самостоятелно обхожда DNS йерархията (root → TLD → authoritative), като кешира резултатите за бъдещи заявки.
Unbound не е authoritative DNS сървър – той не хоства зони. Целта му е да осигури бърз и сигурен DNS отговор за клиенти, мрежи и услуги.
Проектът се разработва от NLnet Labs, същата организация зад NSD и съществен участник в DNS стандартизацията.
В какви случаи Unbound е по-подходящ
Unbound е отличен избор когато:
- имаш нужда от много бърз recursive DNS
- обслужваш много клиенти (ISP, хотели, кампуси, корпоративни мрежи)
- искаш минимален latency и максимален cache hit ratio
- държиш на DNSSEC валидация
- търсиш прост и предсказуем конфигурационен модел
Типични сценарии:
- Интернет доставчици (ISP)
- Border / core DNS за мрежи с хиляди клиенти
- DNS backend за firewall / router инфраструктура
- Local resolver за сървъри и контейнери
Защо Unbound, а не BIND
Unbound печели, когато:
- не ти трябва authoritative DNS
- искаш максимална скорост
- целиш стабилност при голям брой заявки
- не искаш „тежък“ демон
BIND остава добър избор, ако:
- хостваш зони
- правиш сложни view-та
- имаш нужда от dynamic updates
👉 Много големи оператори използват BIND за authoritative (домейн зони) и Unbound за recursion (кешране за клиенти) – най-доброто от двата свята.
На какво се инсталира Unbound
Unbound е наличен за почти всички популярни платформи:
- Linux (Debian, Ubuntu, CentOS, Alma, Rocky)
- FreeBSD / OpenBSD
- macOS
- Docker / Kubernetes
- embedded системи и appliances
Инсталацията е лека, без зависимости и работи отлично дори на:
- 1–2 CPU ядра
- 512 MB – 1 GB RAM
Какъв мащаб може да обслужва
Unbound е изключително добре оптимизиран и мащабируем:
- десетки хиляди заявки в секунда на обикновен сървър
- стотици хиляди QPS при tuning и добър хардуер
- поддържа:
- multi-threading
- aggressive caching
- prefetch
- минимален latency
В ISP среда с хиляди клиенти, често 2 Unbound сървъра са напълно достатъчни за redundancy и load.
Инсталация в Ubuntu
sudo apt install unboundКонфигурация
sudo vim /etc/unbound/unbound.conf
# Unbound configuration file for Debian.
#
# See the unbound.conf(5) man page.
#
# See /usr/share/doc/unbound/examples/unbound.conf for a commented
# reference config file.
#
# The following line includes additional configuration files from the
# /etc/unbound/unbound.conf.d directory.
include-toplevel: "/etc/unbound/unbound.conf.d/*.conf"
server:
# --- BASIC SETTINGS ---
verbosity: 1
interface: 127.0.0.1
interface: 87.246.47.81
interface: ::0
port: 53
do-ip4: yes
do-ip6: yes
do-udp: yes
do-tcp: yes
module-config: "validator iterator"
# --- PERFORMANCE TUNING (CRITICAL) ---
# Брой нишки. Нагласи го според броя ядра на CPU-то си!
# Ако имаш 4 ядра, сложи 4.
num-threads: 4
# Настройки за паметта на кеша (Power of 2).
# Slabs трябва да е близко до num-threads за да няма заключване.
msg-cache-slabs: 4
rrset-cache-slabs: 4
infra-cache-slabs: 4
key-cache-slabs: 4
# --- MEMORY (За 8GB RAM) ---
# Заделяме около ~6 GB само за кеш (Unbound ползва още малко за индекси).
# rrset трябва да е ~2 пъти по-голям от msg.
msg-cache-size: 2048m # 2 GB за съобщения
rrset-cache-size: 4096m # 4 GB за самите записи
# Увеличаване на буферите на ядрото (за да не се губят UDP пакети при пик)
so-rcvbuf: 8m
so-sndbuf: 8m
# Prefetch - най-важното за скорост!
# Обновява кеша преди да е изтекъл, ако има чести заявки.
prefetch: yes
prefetch-key: yes
# Обслужване на стари записи за 0.1 сек, ако сървърът е down (служи като failover)
serve-expired: yes
serve-expired-ttl: 3600
# --- NETWORK & PRIVACY ---
# Скриване на версията и идентичността (security through obscurity)
hide-identity: yes
hide-version: yes
# --- ДРУГИ ---
# Увеличаваме броя на отворените портове към интернет за по-добра рандомизация
outgoing-range: 8192
num-queries-per-thread: 4096
# Ограничаване на DNSSEC валидацията
harden-dnssec-stripped: yes
# --- ACCESS CONTROL (Твоите мрежи) ---
access-control: 127.0.0.0/8 allow
access-control: ::1 allow
# Твоите IPv6
access-control: 2001:678:904::/48 allow
access-control: 2001:470:2066::/48 allow
# Твоите IPv4
access-control: 192.168.0.0/16 allow
access-control: 172.16.0.0/12 allow
access-control: 10.0.0.0/8 allow
access-control: 100.64.0.0/10 allow
access-control: 88.80.132.0/24 allow
access-control: 88.80.133.0/24 allow
access-control: 194.79.12.0/24 allow
access-control: 194.79.13.0/24 allow
access-control: 195.68.214.88/29 allow
access-control: 85.118.94.0/23 allow
access-control: 87.246.47.0/24 allow
access-control: 87.246.48.0/24 allow
access-control: 87.246.49.0/24 allow
# --- FORWARDERS ---
# Тук описваме към кого да препращаме, ако нямаме запис в кеша
forward-zone:
name: "."
# Cloudflare
forward-addr: 1.1.1.1
forward-addr: 1.0.0.1
# Google
forward-addr: 8.8.8.8
forward-addr: 8.8.4.4
# OpenDNS
forward-addr: 208.67.222.222
forward-addr: 2620:119:35::35
# IPv6 Cloudflare/Google
forward-addr: 2001:4860:4860::8888
forward-addr: 2606:4700:4700::1111
sudo systemctl restart unboundОптимизация
sudo bash -c 'cat > /etc/sysctl.d/99-unbound-optimize.conf <<EOF
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 4194304
net.core.wmem_default = 4194304
net.core.optmem_max = 65536
net.core.netdev_max_backlog = 10000
net.ipv4.tcp_fastopen = 3
EOF'sudo sysctl --system
sudo systemctl restart unboundТест на конфигурацията
sudo journalctl -xeu unbound.service