MAATRIX / Блог / Pi-hole на Ubuntu 24.04: пошаговая установка

Pi-hole на Ubuntu 24.04: пошаговая установка

MAATRIX

Реклама и трекеры лезут отовсюду: в приложениях на смартфоне, в новостных сайтах, даже в прошивке смарт-телевизора, где браузерный блокировщик не поставишь в принципе. Роутер дома эту проблему не решает — блокировки на нём либо нет, либо она завязана на закрытые списки производителя. Pi-hole закрывает вопрос на уровне DNS: один сервер фильтрует запросы для всей сети или для всех ваших устройств через VPN, независимо от платформы и наличия расширений в браузере.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество 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 — лёгкое приложение, ему хватит минимальной конфигурации:

ПараметрМинимумКомфортно
CPU1 vCPU1-2 vCPU
RAM512 МБ1 ГБ
Диск5 ГБ10-20 ГБ (с запасом под логи)
ОСUbuntu 24.04 LTSUbuntu 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-мастер:

  1. Выбор сетевого интерфейса (обычно один — eth0 или похожий).
  2. Выбор upstream DNS — провайдера, куда Pi-hole будет ходить за резолвом «настоящих» доменов. Cloudflare (1.1.1.1) или Quad9 (9.9.9.9) — разумный выбор по умолчанию, оба поддерживают DNSSEC.
  3. Списки блокировки (blocklists) — при установке предлагается один базовый список StevenBlack; его достаточно для старта, остальные списки добавите позже через веб-интерфейс.
  4. Установка веб-интерфейса (Admin Web Interface) — соглашайтесь, без него неудобно смотреть статистику и управлять списками.
  5. Выбор веб-сервера — lighttpd ставится автоматически, отдельно настраивать не нужно.
  6. Уровень логирования запросов — оставьте включённым на старте, отключить всегда можно потом в настройках приватности.

В конце установщик покажет сгенерированный пароль администратора — сохраните его сразу, второй раз он не выведется. Если пароль потерялся, задать новый можно командой:

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 ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →