Эта статья — небольшой практический туториал (чтение ≈ 3 мин), который помогает настроить безопасный DNS‑сервис для дома, офиса или VPS с минимальными усилиями.
DNS — один из самых недооценённых компонентов инфраструктуры. Он есть везде, но по умолчанию почти всегда небезопасен: запросы ходят в открытом виде, легко подменяются, логируются провайдерами и могут использоваться для атак.
В этой статье покажу, как настроить безопасный и приватный DNS-резолвер на базе Unbound:
только для локальной сети
с DNSSEC-валидацией
с шифрованием (DNS over TLS)
с защитой от спуфинга и утечек приватности
с нормальной производительностью
Модель угроз
От чего вообще защищаемся:
перехват DNS-запросов провайдером или в публичной сети
подмена ответов (DNS spoofing / cache poisoning)
сбор статистики по доменам
использование вашего сервера как open resolver
Угроза | Решение |
|---|---|
Прослушивание | DNS over TLS |
Подмена | DNSSEC |
Слежка | QNAME minimisation + trusted upstream |
Open resolver | access-control |
Почему Unbound
Unbound — валидирующий DNS-резолвер от NLnet Labs, ориентированный на безопасность.
Архитектура
Клиенты в LAN -> Unbound (DNSSEC + privacy) -> DoT upstream
Установка Unbound
Debian/Ubuntu
sudo apt update sudo apt install unbound
Проверка:
unbound -V
Файл конфигурации
/usr/local/etc/unbound/unbound.conf
Конфигурация Unbound
# Основной сервер server: interface: 0.0.0.0 port: 53 # Разрешить запросы из локальной сети access-control: 127.0.0.0/8 allow access-control: 192.168.0.1/16 allow # Остальным — запрет access-control: 0.0.0.0/0 refuse # Протоколы do-ip4: yes do-ip6: no do-udp: yes do-tcp: yes # Производительность num-threads: 2 so-reuseport: yes outgoing-range: 8192 num-queries-per-thread: 4096 msg-cache-size: 128m rrset-cache-size: 256m cache-min-ttl: 300 cache-max-ttl: 86400 prefetch: yes prefetch-key: yes # DNSSEC tls-cert-bundle: "/etc/ssl/certs/ca-certificates.crt" # защита от подмены ответов; harden-dnssec-stripped запрещает # ответы без валидной подписи harden-dnssec-stripped: yes # приватность: скрываются идентификатор и версия сервера, # минимизируются имена запросов (qname-minimisation), # используется CAPS для случайных ID hide-identity: yes hide-version: yes qname-minimisation: yes use-caps-for-id: yes minimal-responses: yes aggressive-nsec: yes unwanted-reply-threshold: 100000 # Логи (по желанию) # Минимальные логи. Можно увеличить до 2–3 для отладки. verbosity: 1 # Пересылка запросов forward-zone: name: "." forward-tls-upstream: yes # Applied Privacy (Швейцария) forward-addr: 146.255.56.98@853#dot1.applied-privacy.net forward-addr: 146.255.56.99@853#dot2.applied-privacy.net # Cloudflare (быстрые) forward-addr: 1.1.1.1@853#cloudflare-dns.com forward-addr: 1.0.0.1@853#cloudflare-dns.com # Quad9 (без malware) forward-addr: 9.9.9.9@853#dns.quad9.net forward-addr: 149.112.112.112@853#dns.quad9.net
замените сеть 192.168.0.1/16 на адрес вашей локальной сети
Проверка конфига:
sudo unbound-checkconf /etc/unbound/unbound.conf
Запуск и автозапуск:
sudo systemctl enable --now unbound
Проверка логов
journalctl -f -u unbound.service
Проверка работы DNS
Теперь на нашем сервисе запущена служба unbound, которая ожидает DNS-запросы на UDP и TCP 53-ем порту.
Можно проверить работу DNS сервера с самого сервера
dig @127.0.0.1 cloudflare.com +dnssec
Или с другого компьютера в вашей сети
dig @192.168.0.1 cloudflare.com +dnssec
замените адрес 192.168.0.1 на адрес вашего сервера
В ответе должен присутствовать флаг "ad", что означает Authenticated Data — данные криптографически проверены через DNSSEC.
AD = 1 → резолвер:
выполнил DNSSEC-валидацию
проверил цепочку доверия до корневой зоны
гарантирует, что ответ:
не был подменён
не повреждён
получен от настоящего владельца зоны Проще: AD = «этому ответу можно доверять"
Итог
Мы получили безопасный, приватный и быстрый DNS с DNSSEC и DNS over TLS, пригодный для дома, офиса или VPS.
