Pi-hole + Unbound: Ваш приватный DNS-сервер с блокировкой рекламы

Настраиваем связку Pi-hole и Unbound для локального DNS, блокировки рекламы и более приватной работы домашней сети.
Приветствую всех, кто любит ковыряться в железе и софте! Сегодня мы соберём мощный связной дуэт для нашей домашней сети. Представьте: вы заходите на любой сайт, и вас не встречает навязчивая реклама, трекеры не следят за каждым вашим кликом, а запросы не утекают к крупным корпорациям. При этом скорость загрузки страниц не падает, а иногда даже растёт. Звучит как магия? Нет, это Pi-hole и Unbound.
Pi-hole — это сетевой сантехник, который фильтрует мусор (рекламу и трекеры) на уровне DNS-запросов для всей вашей сети. Unbound — это ваш личный, независимый почтальйон (рекурсивный DNS-резолвер), который сам ходит за адресами сайтов к корневым серверам, минуя посредников вроде Google DNS или Cloudflare.
Вместе они создают приватный, быстрый и контролируемый интернет-экосистему у вас дома. Я сам пользуюсь этой связкой уже несколько лет на разных одноплатниках — от Raspberry Pi до Orange Pi — и результат всегда радует.
Если отдельный компьютер под DNS не нужен, рассмотрите AdGuard Home непосредственно на OpenWrt. В этом варианте ключевая проверка — совместная работа с dnsmasq и отсутствие конфликта на порту 53.
Что нам понадобится?
- Одноплатник: Подойдёт практически любой, даже самый слабый. Я использовал Orange Pi Zero, Raspberry Pi 3 и NanoPi R2S. Для этой задачи хватит 512 МБ ОЗУ и одного ядра.
- Карта памяти: От 8 ГБ.
- Блок питания: Стабильный, подходящий для вашей платы.
- Сетевое подключение: По кабелю (Ethernet) — предпочтительнее и надёжнее.
- Базовые знания: Умение подключиться к одноплатнику по SSH и выполнять команды в терминале.
Важный момент: Всё нижеописанное я делал на ОС Armbian (Debian Bullseye) на Orange Pi Zero 3. Для Raspberry Pi OS (также основанной на Debian) команды будут идентичны. Если вы только начинаете, рекомендую статьи про Armbian: универсальная ОС для одноплатников и Orange Pi Zero 3: самый доступный одноплатник для умного дома.
Часть 1: Установка и базовая настройка Pi-hole
Pi-hole — сердце нашей системы. Установка максимально упрощена благодаря авторскому скрипту.
Шаг 1: Подготовка системы
Первым делом обновляем список пакетов и саму систему. Всегда начинайте с этого.
sudo apt update && sudo apt upgrade -y
Комментарий: apt update обновляет информацию о доступных пакетах, а apt upgrade -y устанавливает все обновления, автоматически подтверждая запросы.
Шаг 2: Установка Pi-hole
Качаем и запускаем автоматический скрипт установки. Это займёт несколько минут.
curl -sSL https://install.pi-hole.net | bash
Внимание! Типичная ошибка: Не пугайтесь, если установка зависнет на фразе "Installing dependencies from repository..." — она просто скачивает и устанавливает пакеты, это может занять время в зависимости от скорости интернета и мощности платы. Просто ждите.
Во время установки скрипт задаст несколько вопросов. Вот как на них лучше ответить:
- Выбор сетевого интерфейса: Обычно это
eth0(проводной) или, реже,wlan0(Wi-Fi). Выберите тот, через который плата выходит в интернет. Совет: Для серверных задач всегда используйте проводное соединение — оно стабильнее. - Настройка статического IP: Настоятельно рекомендую выбрать "Yes". Pi-hole должен иметь постоянный адрес в вашей сети (например,
192.168.1.100). Если адрес будет меняться, настройки DNS в роутере собьются. - Выбор протокола: Оставьте IPv4, если у вас нет специфической настройки IPv6.
- Выбор Upstream DNS: Это ВАЖНО! Здесь мы пока выберем сторонние DNS-серверы (например, Google). Позже мы заменим их на наш Unbound. Выберите любые, например,
Google (ECS). - Блоклисты: Оставьте выбранными блоклисты по умолчанию. Позже их можно добавить в веб-интерфейсе.
- Настройки приватности: Выберите режим по своему усмотрению. Я выбираю
Show everything, чтобы видеть всю статистику. - Установка веб-админки: Выберите "On". Это наш удобный фронтенд.
- Установка веб-сервера: Выберите "lighttpd". Pi-hole корректно работает с ним.
- Включение логов: Рекомендую оставить "On" для отладки, но можно отключить для максимальной приватности.
После завершения установки на экране появится важная информация: пароль для веб-интерфейса и IP-адрес вашего Pi-hole. Обязательно сохраните их!
Если пароль потерян, его можно сбросить командой:
pihole -a -p
Шаг 3: Первый запуск и настройка роутера
Откройте браузер и перейдите по адресу http://<IP_ВАШЕГО_PI-HOLE>/admin. Например, http://192.168.1.100/admin. Введите пароль.
Поздравляю, Pi-hole работает! Но пока он фильтрует запросы только для самого одноплатника. Чтобы защитить всю сеть, нужно указать его IP-адрес в качестве DNS-сервера в настройках вашего роутера.
- Зайдите в панель управления роутером (обычно
192.168.1.1или192.168.0.1). - Найдите раздел "DHCP-сервер", "Локальная сеть" или "DNS".
- В поле "Предпочитаемый DNS-сервер" укажите IP-адрес вашего Pi-hole.
- Важно: Поле "Альтернативный DNS-сервер" лучше оставить пустым или также указать адрес Pi-hole. Если там будет указан публичный DNS (например,
8.8.8.8), устройства смогут обходить блокировку. - Сохраните настройки и перезапустите DHCP-сервер (или просто перезагрузите роутер).
Теперь все устройства, подключающиеся к вашей сети, будут использовать Pi-hole. Проверить это можно на вкладке "Query Log" в веб-интерфейсе Pi-hole — там начнут появляться запросы от ваших устройств.
Часть 2: Установка и настройка Unbound
Теперь займёмся настройкой собственного почтальона — Unbound. Он будет выполнять роль того самого "Upstream DNS", который мы временно указали как Google.
Шаг 1: Установка Unbound
sudo apt install unbound -y
Шаг 2: Базовая конфигурация Unbound
Нам нужно создать конфигурационный файл. Сначала сделаем резервную копию оригинального:
sudo mv /etc/unbound/unbound.conf.d/pi-hole.conf /etc/unbound/unbound.conf.d/pi-hole.conf.backup 2>/dev/null || true
Комментарий: Эта команда безопасно переименует существующий файл конфигурации (если он есть), либо ничего не сделает, если его нет (2>/dev/null || true подавляет возможные ошибки).
Теперь создадим новый конфигурационный файл:
sudo nano /etc/unbound/unbound.conf.d/pi-hole.conf
Вставьте в него следующую конфигурацию. Эта конфигурация оптимизирована для использования с Pi-hole на одноплатнике:
server:
# Если Pi-hole и Unbound на одной машине:
interface: 127.0.0.1
port: 5335
# Не отвечать на запросы извне, только локально
access-control: 127.0.0.1/32 allow
access-control: 192.168.1.0/24 allow # Разрешите свою подсеть, если нужно запрашивать с других машин
# Без root-привилегий
username: "unbound"
directory: "/etc/unbound"
# Файлы с корневыми серверами
root-hints: "/var/lib/unbound/root.hints"
# Жесткость валидации
harden-glue: yes
harden-dnssec-stripped: yes
# Кэширование
cache-min-ttl: 3600
cache-max-ttl: 86400
# Производительность
num-threads: 1 # Для одноплатника с 1-2 ядрами достаточно 1 потока
msg-cache-size: 10m
rrset-cache-size: 20m
# Безопасность
hide-identity: yes
hide-version: yes
# Проверка DNSSEC
auto-trust-anchor-file: "/var/lib/unbound/root.key"
val-log-level: 1
# Важно для работы с Pi-hole
prefetch: yes
prefetch-key: yes
serve-expired: yes
aggressive-nsec: yes
Пояснения ключевых моментов:
* interface: 127.0.0.1 и port: 5335 — Unbound будет слушать только локальные подключения на нестандартном порту 5335, чтобы не конфликтовать с другими службами.
* access-control — строго ограничиваем, кто может делать запросы. Оставьте только localhost и свою подсеть.
* num-threads: 1 — для маломощных плат это оптимально. Для Orange Pi 5 или Raspberry Pi 4 можно поставить 2-4.
* hide-identity и hide-version — повышают безопасность, скрывая служебную информацию.
Сохраните файл (Ctrl+O, затем Enter) и выйдите из редактора (Ctrl+X).
Шаг 3: Загрузка корневых серверов и настройка прав
Скачаем актуальный список корневых DNS-серверов:
sudo wget -O /var/lib/unbound/root.hints https://www.internic.net/domain/named.root
Установим правильные права на файлы и папки Unbound:
sudo chown -R unbound:unbound /var/lib/unbound
sudo chmod 755 /var/lib/unbound
Шаг 4: Проверка конфигурации и запуск
Проверим синтаксис нашего конфига перед запуском:
sudo unbound-checkconf /etc/unbound/unbound.conf.d/pi-hole.conf
Если вывод содержит unbound-checkconf: no errors in /etc/unbound/unbound.conf.d/pi-hole.conf, значит, всё в порядке.
Теперь включим автозагрузку Unbound и запустим его:
sudo systemctl enable unbound
sudo systemctl restart unbound
Проверим статус службы:
sudo systemctl status unbound --no-pager -l
Убедитесь, что служба активна (active (running)) и в логах нет критических ошибок.
Часть 3: Интеграция Pi-hole и Unbound
Теперь скажем Pi-hole использовать наш локальный Unbound вместо публичных DNS.
Шаг 1: Настройка Upstream DNS в Pi-hole
Вернитесь в веб-интерфейс Pi-hole (http://<IP>/admin).
1. Перейдите в Settings (Настройки) -> DNS.
2. В секции "Upstream DNS Servers" снимите все галочки с выбранных ранее серверов (Google, Cloudflare и т.д.).
3. В поле "Custom 1 (IPv4)" введите:
127.0.0.1#5335
Это указывает Pi-hole на наш Unbound, работающий локально на порту 5335.
4. Нажмите Save (Сохранить) внизу страницы.
5. Нажмите "Update Lists" на вкладке "Group Management" для применения изменений.
Шаг 2: Перезапуск служб
Для полной уверенности перезапустим обе службы:
sudo systemctl restart pihole-FTL unbound
Часть 4: Проверка результата и диагностика
Всё настроено! Давайте проверим, как это работает.
Тест 1: Проверка блокировки рекламы
Откройте на любом устройстве в сети сайт с обильной рекламой, например, новостной портал. Рекламные баннеры и всплывающие окна должны либо не загрузиться, либо быть заменены на "пустые" блоки. В веб-интерфейсе Pi-hole на главной странице вы увидите увеличивающиеся цифры заблокированных запросов и доменов.
Тест 2: Проверка работы Unbound как рекурсивного резолвера
Выполним диагностическую команду прямо на нашем одноплатнике:
dig @127.0.0.1 -p 5335 google.com
В выводе команды обратите внимание на секцию "SERVER". Там должно быть указано 127.0.0.1#5335. А в секции "Query time" вы увидите время отклика. После нескольких запросов к одному домену время (Query time) станет близким к 0 msec — это сработал кэш Unbound.
Более наглядный тест на рекурсивность:
dig @127.0.0.1 -p 5335 +trace google.com
Вы увидите всю цепочку запросов: от корневых серверов (a.root-servers.net.) до конечных. Это доказательство, что Unbound сам разрешает имена, не спрашивая у сторонних провайдеров DNS.
Тест 3: Проверка DNSSEC
Unbound по умолчанию проверяет цифровые подписи DNSSEC. Проверим это на специально созданном для тестов домене:
dig @127.0.0.1 -p 5335 sigfail.verteiltesysteme.net
В ответе должен быть флаг **ad** (authenticated data) и статус NOERROR. А теперь запросим "битый" домен:
dig @127.0.0.1 -p 5335 sigok.verteiltesysteme.net
В ответе должен быть статус SERVFAIL — это значит, что Unbound отклонил ответ из-за невалидной DNSSEC-подписи, защищая вас от подмены DNS.
Типичные проблемы и их решение:
- "Сеть пропала!" после настройки роутера: Скорее всего, Pi-hole потерял связь или имеет неправильный IP. Проверьте, пингуется ли адрес Pi-hole с другого устройства (
ping 192.168.1.100). Верните в роутере старые DNS-настройки (например,8.8.8.8), чтобы восстановить доступ, и проверьте настройки сети на одноплатнике. - Очень долгая загрузка сайтов при первом посещении: Это нормально для первых часов работы Unbound. Он наполняет свой кэш. Через день-два скорость стабилизируется, и вы ощутите прирост от локального кэширования.
- Pi-hole не блокирует рекламу в YouTube на телефоне: Это не недостаток Pi-hole. Многие приложения (YouTube, Instagram) используют ту же сеть доставки контента (CDN), что и видео, и блокировать её нельзя, не сломав функционал. Pi-hole блокирует классическую веб-рекламу и трекеры.
Заключение
Мы развернули мощный, приватный и контролируемый DNS-инфраструктурный узел для дома. Pi-hole заботится о нашем комфорте и безопасности, отсекая назойливую рекламу и шпионящие трекеры. Unbound возвращает нам цифровой суверенитет, беря на себя задачу разрешения доменных имён, не полагаясь на третьи стороны.
Эта система потребляет минимум ресурсов и может годами работать на самом простом одноплатнике в углу комнаты. Она — отличный первый шаг в построение умной домашней сети. Следующими логичными шагами могут быть: * Настройка VPN-сервера на том же одноплатнике для безопасного доступа извне. * Превращение платы в полноценный шлюз с помощью OpenWRT, как описано в статье SBC как роутер: превращаем одноплатник в мощный домашний шлюз. * Подключение датчиков на ESP32 для мониторинга среды, о чём можно почитать в материале ESP32 и три в одном: измеряем температуру, влажность и давление.
Экспериментируйте, настраивайте белые списки для устройств, которые нуждаются в рекламе (например, умные колонки), и наслаждайтесь чистым, быстрым и своим интернетом!
===SEO_JSON_START=== { "meta_title": "Pi-hole + Unbound: Приватный DNS с блокировкой рекламы", "meta_description": "Пошаговое руководство по настройке Pi-hole и Unbound на одноплатнике. Защитите всю домашнюю сеть от рекламы и трекеров, используя свой DNS-сервер.
Понравилась статья?
Поставьте лайк и сохраните полезный материал в закладки.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Как проверить IP на блокировку в ТСПУ: рабочий Python-скрипт для диагностики
Routerich AX3000: настройка роутера на OpenWrt, Mesh, TorrServer и сетевое хранилище
Как выбрать LTE/5G-модем для Routerich AX3000: от простого E3372 до T77W968, T99W175 и FM350
Nginx Proxy Manager: установка и первоначальная настройка reverse proxy с HTTPS в Docker
Как работают ТСПУ Роскомнадзора? Разбираемся вместе
ZeroBlock для OpenWrt: настройка VPN и маршрутизации на Routerich