Pi-hole на Ubuntu 24.04: пошаговая установка
Реклама и трекеры лезут отовсюду: в приложениях на смартфоне, в новостных сайтах, даже в прошивке смарт-телевизора, где браузерный блокировщик не поставишь в принципе. Роутер дома эту проблему не решает — блокировки на нём либо нет, либо она завязана на закрытые списки производителя. Pi-hole закрывает вопрос на уровне DNS: один сервер фильтрует запросы для всей сети или для всех ваших устройств через VPN, независимо от платформы и наличия расширений в браузере.
Содержание
- Что делает Pi-hole и зачем ему отдельный сервер
- Требования и подготовка VPS
- Установка Pi-hole: официальный установщик
- Установка Pi-hole через Docker (альтернатива)
- Настройка: списки блокировки, whitelist, upstream DNS
- Безопасный доступ извне: почему не светить порт 53 наружу
- Обслуживание: обновления, бэкап конфигурации, мониторинг
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что делает Pi-hole и зачем ему отдельный сервер
Pi-hole — это DNS-сервер с фильтрацией: он резолвит обычные домены как обычно, а домены из списков блокировки (рекламные сети, трекеры аналитики, телеметрия) заворачивает в NXDOMAIN или на 0.0.0.0. Устройство просто не получает IP рекламного сервера и не может загрузить баннер — независимо от того, браузер это, мобильное приложение или Smart TV.
Изначально Pi-hole придумывался под Raspberry Pi дома, но домашний вариант имеет три слабых места: сервер недоступен вне домашней сети, зависит от электричества и интернета в квартире, а обновления совсем не гарантированы, если Pi стоит в углу и про него забыли. VPS решает всё три: постоянная доступность 24/7, статический IP, доступ из любой точки мира через VPN, и вы сами контролируете, когда и что обновлять.
Второй плюс сервера — приватность и география. Pi-hole можно связать с DNS-over-HTTPS (например, через cloudflared или unbound), и тогда весь DNS-трафик уходит зашифрованным, а не в открытом виде на DNS провайдера. Это отдельная тема, но начинается она всегда с рабочего Pi-hole.
Для реального использования вне дома Pi-hole почти всегда ставят в связке с VPN — иначе DNS-порт 53 придётся светить в интернет, а это неудачная идея по соображениям безопасности (ниже разберём, почему). Если у вас уже настроен WireGuard на Ubuntu 24.04, Pi-hole логично поставить на тот же сервер или сосед по сети — тогда все устройства, подключённые к VPN, автоматически получают фильтрацию рекламы бесплатным бонусом.
Требования и подготовка VPS
Pi-hole — лёгкое приложение, ему хватит минимальной конфигурации:
| Параметр | Минимум | Комфортно |
|---|---|---|
| CPU | 1 vCPU | 1-2 vCPU |
| RAM | 512 МБ | 1 ГБ |
| Диск | 5 ГБ | 10-20 ГБ (с запасом под логи) |
| ОС | Ubuntu 24.04 LTS | Ubuntu 24.04 LTS |
Перед установкой сервер должен быть обновлён и защищён базовыми правилами — если ещё не проходили этот шаг, начните с первичной настройки Ubuntu 24.04. Дальше — минимальный чек-лист именно под Pi-hole:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl ca-certificates
Важный момент: на порту 53 не должно быть занято ничего другого. На Ubuntu 24.04 системный резолвер systemd-resolved часто слушает 53-й порт локально и мешает установщику Pi-hole. Проверьте:
sudo ss -tulpn | grep ':53'
Если видите systemd-resolved, отключите его слушатель DNS-запросов (сам сервис останется, просто перестанет занимать порт):
sudo nano /etc/systemd/resolved.conf
В секции [Resolve] пропишите:
DNSStubListener=no
Сохраните, затем:
sudo mkdir -p /etc/systemd/resolved.conf.d
echo -e "[Resolve]\nDNSStubListener=no" | sudo tee /etc/systemd/resolved.conf.d/no-stub.conf
sudo systemctl restart systemd-resolved
Проверьте /etc/resolv.conf — если это симлинк на stub-resolv.conf, пересоздайте его как обычный файл с рабочим DNS (например, 1.1.1.1), иначе после перезапуска резолвинг на самом сервере отвалится.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Pi-hole: официальный установщик
Самый быстрый путь — официальный скрипт установки:
curl -sSL https://install.pi-hole.net | bash
Скрипт открывает интерактивный TUI-мастер:
- Выбор сетевого интерфейса (обычно один —
eth0или похожий). - Выбор upstream DNS — провайдера, куда Pi-hole будет ходить за резолвом «настоящих» доменов. Cloudflare (1.1.1.1) или Quad9 (9.9.9.9) — разумный выбор по умолчанию, оба поддерживают DNSSEC.
- Списки блокировки (blocklists) — при установке предлагается один базовый список StevenBlack; его достаточно для старта, остальные списки добавите позже через веб-интерфейс.
- Установка веб-интерфейса (Admin Web Interface) — соглашайтесь, без него неудобно смотреть статистику и управлять списками.
- Выбор веб-сервера — lighttpd ставится автоматически, отдельно настраивать не нужно.
- Уровень логирования запросов — оставьте включённым на старте, отключить всегда можно потом в настройках приватности.
В конце установщик покажет сгенерированный пароль администратора — сохраните его сразу, второй раз он не выведется. Если пароль потерялся, задать новый можно командой:
sudo pihole -a -p
Установка Pi-hole через Docker (альтернатива)
Если сервер уже используется под другие сервисы в контейнерах, официальный installer менее удобен — он тянет за собой lighttpd и правит системные файлы. Docker-вариант чище и проще откатить:
sudo apt install -y docker.io docker-compose-v2
Файл docker-compose.yml:
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "8080:80/tcp"
environment:
TZ: 'Europe/Moscow'
FTLCONF_webserver_api_password: 'замените-на-свой-пароль'
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
cap_add:
- NET_ADMIN
restart: unless-stopped
Запуск:
sudo docker compose up -d
Обратите внимание — веб-интерфейс здесь на порту 8080, а не 80, чтобы не конфликтовать с другими сайтами на сервере (например, если у вас уже крутится Caddy с авто-SSL под другими доменами). Если нужен HTTPS для панели, вынесите её за обратный прокси отдельным поддоменом.
Настройка: списки блокировки, whitelist, upstream DNS
Веб-интерфейс живёт по адресу http://IP-сервера/admin (для native-установки) или http://IP-сервера:8080/admin (для Docker). Логин — пароль, заданный при установке.
Что стоит сделать в первый час после установки:
- Добавить дополнительные списки блокировки. Раздел
Group Management → Adlists. Помимо базового StevenBlack полезны списки от OISD (сбалансированный, редко ломает сайты) и списки под конкретные категории — трекеры, малварь-домены. После добавления нажмите «Update Gravity» — это пересборка базы блокировки. - Настроить whitelist. Некоторые сайты используют поддомены, совпадающие по маске с рекламными сетями, и ломаются после блокировки (частый случай — стриминговые сервисы). Раздел
Whitelist— добавляете конкретный домен, не трогая остальной список. - Проверить upstream DNS.
Settings → DNS. Если что-то не резолвится, для проверки временно переключитесь на 8.8.8.8, чтобы понять — проблема в блокировке или в самом апстриме. - Включить DNSSEC, если upstream его поддерживает — галочка в том же разделе
Settings → DNS.
Проверить, что фильтрация вообще работает, можно так:
dig doubleclick.net @IP-сервера
Ожидаемый ответ — 0.0.0.0 вместо реального IP рекламной сети.
Безопасный доступ извне: почему не светить порт 53 наружу
Открытый DNS-порт в интернет — классическая ошибка. DNS по UDP — идеальная база для DNS amplification атак: злоумышленник подделывает IP жертвы и заставляет ваш сервер заваливать её ответами, многократно превышающими размер запроса. Публичный резолвер без ограничений быстро попадёт в чей-то ботнет-инструментарий для DDoS, даже если вы сами никого не атаковали.
Правильная схема — Pi-hole слушает DNS только внутри приватной сети VPN, а наружу порт 53 закрыт полностью:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow from 10.8.0.0/24 to any port 53
sudo ufw allow from 10.8.0.0/24 to any port 80
sudo ufw enable
Подставьте свою подсеть WireGuard вместо 10.8.0.0/24. Если WireGuard и Pi-hole стоят на одном сервере, этого достаточно; если Pi-hole вынесен на отдельную машину — откройте порт только со стороны VPN-подсети, но не из интернета вообще. Общий разбор правил и типичных ошибок firewall — в статье про настройку firewall на Ubuntu 24.04.
Дальше на клиентах (телефон, ноутбук, роутер) в качестве DNS-сервера прописывается IP Pi-hole внутри VPN-туннеля — например, 10.8.0.1. Как только устройство подключается к VPN, весь его DNS-трафик автоматически идёт через фильтр, независимо от того, дома вы, в кафе или в другой стране.
Обслуживание: обновления, бэкап конфигурации, мониторинг
Pi-hole требует минимального, но регулярного внимания:
- Обновление списков (gravity). По умолчанию установщик ставит cron-задачу на еженедельное обновление. Проверить и при необходимости запустить вручную:
sudo pihole updateGravity
- Обновление самого Pi-hole. Раз в 1-2 месяца достаточно:
sudo pihole -up
Для Docker-варианта — docker compose pull && docker compose up -d.
- Бэкап конфигурации. Встроенная команда экспортирует настройки, списки и whitelist в архив:
sudo pihole -a -t
Файл pi-hole-*.tar.gz появится в текущей директории — заберите его на другую машину или в объектное хранилище регулярно, чтобы не настраивать всё заново после сбоя сервера.
- Мониторинг. Встроенная статистика в веб-интерфейсе показывает процент заблокированных запросов, топ доменов и клиентов. Pi-hole довольно лёгкий сервис, но если список блокировки разрастётся до нескольких миллионов строк, потребление памяти FTL-процесса стоит периодически проверять через
htopилиfree -h.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Pi-hole полностью заменяет блокировщик рекламы в браузере?
Нет, частично. Он режет большинство рекламных и трекинговых доменов на уровне сети, но не умеет прятать пустые блоки на странице или блокировать рекламу, которая грузится с того же домена, что и сам сайт (это делают браузерные расширения через анализ разметки).
Можно ли поставить Pi-hole и VPN-сервер на один и тот же VPS?
Да, это самая частая и удобная схема — ресурсов оба сервиса потребляют немного, а трафик между ними идёт локально без лишней сетевой задержки.
Что будет, если Pi-hole упадёт?
Если он единственный DNS для устройства и недоступен — резолвинг доменов остановится полностью. На случай сбоя в настройках DHCP или клиента стоит прописать вторичный DNS (например, 1.1.1.1) — тогда при недоступности Pi-hole устройство продолжит выходить в сеть, просто без фильтрации, пока вы не почините сервис.
Нужен ли статический IP для Pi-hole?
Крайне желателен — если IP сервера меняется, придётся перенастраивать DNS на каждом клиенте. У арендованного VPS IP обычно статический по умолчанию.
Сколько памяти реально ест Pi-hole со временем?
Зависит от объёма списков блокировки и глубины логов запросов — заранее точную цифру дать нельзя, ориентируйтесь на несколько сотен мегабайт при паре объединённых списков и следите через встроенную статистику или Netdata, растёт ли потребление со временем.
Работает ли Pi-hole с IPv6?
Да, но настраивать нужно отдельно — по умолчанию установщик настраивает только IPv4, IPv6 включается вручную в Settings → DNS, если у сервера и клиентов есть IPv6-связность.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →