Я хочу показать вам простой, но очень эффективный способ усилить безопасность вашей сети и улучшить блокировку рекламы, установив Pi-hole v6 через Docker Compose.

В этом руководстве я также расскажу, как настроить туннелирование DNS-трафика через Cloudflare, чтобы ваш интернет-провайдер не мог видеть ваши запросы, а вы сохраняли полный контроль. Я сам протестировал этот подход и считаю его одновременно надежным и эффективным.

В этом посте вы узнаете, как настроить новую версию Pi-hole с расширенной фильтрацией, улучшенной панелью управления и встроенными функциями, которые делают её особенной. Я также покажу Docker Compose-файл, с помощью которого вы сможете запустить Pi-hole v6 и Cloudflare вместе. Давайте приступим.

Почему стоит выбрать Pi-hole v6 для DNS-фильтрации?

Pi-hole v6 поднимает безопасность сети и блокировку рекламы на новый уровень. Встроенный веб-сервер, REST API и обновлённый интерфейс делают его более удобным, простым в обслуживании и максимально эффективным для блокировки нежелательного контента. Ниже я перечислю несколько причин, почему рекомендую Pi-hole v6 по сравнению с предыдущими версиями:

  • Более высокая производительность: Pi-hole v6 работает как легковесный сервис и почти не потребляет ресурсы.
  • Расширенная фильтрация: Управляйте блоклистами и списками разрешённых доменов более тонко, чем в старых версиях.
  • Единый файл конфигурации: Упрощает настройку, объединяя несколько конфигов в один TOML-файл.
  • Встроенная поддержка HTTPS: Можно сразу сгенерировать SSL-сертификаты, хотя я чаще использую реверс-прокси для удобства.
  • Эффективный Docker-образ: Теперь на базе Alpine, что уменьшает размер образа и ускоряет загрузку.

На мой взгляд, Pi-hole v6 практически не нагружает систему и заметно улучшает блокировку доменов, управление DNS-запросами и локальное разрешение DNS. Новый интерфейс выглядит знакомо, но современно, так что новичкам будет легко освоиться.

Основные улучшения в Pi-hole v6

С выходом Pi-hole v6 в нём появились базовые изменения, которые отличают его от предыдущих версий. Вот краткий обзор всего интересного и нового:

Встроенный веб-сервер и REST API

В предыдущих версиях Pi-hole требовались внешние сервисы вроде lighttpd и PHP. Теперь всё встроено прямо в основной бинарный файл Pi-hole, включая веб-сервер. Это снижает нагрузку на систему и упрощает работу, поскольку позволяет управлять DNS-фильтрацией и продвинутыми настройками из одного места.

Расширенная фильтрация с помощью списков разрешённых доменов

В Pi-hole v6 появился более гибкий способ работать со списками блокировки и списками разрешённых доменов. Теперь вы можете избирательно разрешать определённые домены, переворачивая привычный подход «только блокировка». Это особенно полезно, когда нужно гарантировать доступ к каким-то сайтам, даже если у вас жёсткие блоклисты.

Обновлённый интерфейс

Пользовательский интерфейс стал симпатичнее, но при этом остался узнаваемым. Мне кажется, что навигация стала удобнее, а макет более понятным. Вы быстро найдёте такие функции, как журнал запросов (Query Logs), настройки DNS и Gravity (движок блокировки), что упростит ежедневное управление.

Настройка Cloudflare-туннеля для Pi-hole v6

Направляя трафик Pi-hole v6 через туннель Cloudflare, вы получаете дополнительную защиту приватности. Такой подход шифрует DNS-запросы, так что ваш интернет-провайдер не видит, какие сайты вы запрашиваете.

Вместо этого единственным внешним сервисом, которому известны ваши DNS-запросы, становится Cloudflare. Этот вариант подходит не всем, но если вас волнует анонимность, возможно, стоит его рассмотреть.

💪
Учтите, что если вы используете Cloudflare как DNS-провайдера, вы уже на них полагаетесь. Туннель в первую очередь скрывает ваш трафик от провайдера, но не от Cloudflare.

Конфигурация Docker Compose для Pi-hole v6

Ниже приведён Docker Compose-файл, который я использую в качестве основы для Pi-hole v6. В нём есть контейнер Cloudflare для проксирования DNS и сам Pi-hole.

Рекомендую внимательно просмотреть каждый раздел, чтобы подстроить конфигурацию под себя. Замените все заглушки вроде или своими реальными значениями.

version: '3'
services:
  cloudflared:
	container_name: cloudflared
	restart: unless-stopped
	image: cloudflare/cloudflared:latest
	command: proxy-dns
	environment:
	  - "TUNNEL_DNS_UPSTREAM=https://1.1.1.1/dns-query,https://1.0.0.1/dns-query,https://9.9.9.9/dns-query,https://149.112.112.9/dns-query"
	  - "TUNNEL_DNS_PORT=5053"
	  - "TUNNEL_DNS_ADDRESS=0.0.0.0"
	networks:
	  pihole_internal:
		ipv4_address: 
	security_opt:
	  - no-new-privileges:true
  pihole:
	container_name: pihole
	image: pihole/pihole:latest
	ports:
	  - "53:53/tcp"
	  - "53:53/udp"
	  # - "67:67/udp"   # Uncomment if you plan to use Pi-hole DHCP
	  - "500:80/tcp"
	  # - "443:443/tcp"
	networks:
	  pihole_internal:
		ipv4_address: 
	  proxy:
	environment:
	  TZ: 'Europe/Prague'
	  FTLCONF_webserver_api_password: ''
	  FTLCONF_dns_listeningMode: 'all'
	  FTLCONF_dns_upstreams: '#5053'
	volumes:
	  - '/home/ubuntu/docker/pihole/:/etc/pihole/'
	  - '/home/ubuntu/docker/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/'
	restart: unless-stopped
	depends_on:
	  - cloudflared
	labels:
	  - "traefik.enable=true"
	  - "traefik.http.routers.pihole.entrypoints=http"
	  - "traefik.http.routers.pihole.rule=Host(``)"
	  - "traefik.http.middlewares.pihole-https-redirect.redirectscheme.scheme=https"
	  - "traefik.http.routers.pihole.middlewares=pihole-https-redirect"
	  - "traefik.http.routers.pihole-secure.entrypoints=https"
	  - "traefik.http.routers.pihole-secure.rule=Host(``)"
	  - "traefik.http.routers.pihole-secure.tls=true"
	  - "traefik.http.routers.pihole-secure.service=pihole"
	  - "traefik.http.services.pihole.loadbalancer.server.port=80"
	  - "traefik.docker.network=proxy"
networks:
  pihole_internal:
	ipam:
	  config:
		- subnet: 172.70.9.0/29
	name: pihole_internal
  proxy:
	external: true

Обычно я держу контейнеры Cloudflare и Pi-hole в изолированной приватной сети. Это снижает риск прямого доступа к Pi-hole из интернета. Затем можно подключить внешнюю прокси-сеть (как proxy в примере), чтобы пропускать трафик через выбранный вами реверс-прокси, например Traefik или Nginx Proxy Manager.

💡
Если вам нужно, чтобы Pi-hole работал как DHCP-сервер, раскомментируйте строки DHCP и добавьте NET_ADMIN в cap_add в вашем Compose-файле.

Развёртывание Pi-hole v6 с помощью Docker Compose

Отредактировав Docker Compose-файл под свою среду, перейдите в соответствующую папку проекта в терминале. Затем выполните команду:

docker-compose up -d

Эта команда загрузит последние образы (если они у вас не скачаны), настроит сети и запустит контейнеры. После завершения процесса вы можете проверить, всё ли работает, с помощью:

docker-compose ps

Первый вход в панель управления Pi-hole v6

Содержимое панели управления Pi-hole с показателями общего количества запросов, заблокированных запросов и списка доменов.
Обзор фильтрации DNS и статистики Pi-hole | Источник: Jim’s Garage.

Когда контейнеры запустятся, откройте браузер и перейдите по адресу http://<your-domain.com>/admin. Вы увидите новую панель управления Pi-hole v6. Войдите в систему, используя пароль, который вы указали в переменной FTLCONF_webserver_api_password в Docker Compose-файле.

Обзор основных разделов панели

В интерфейсе Pi-hole вы найдёте несколько разделов для управления DNS-фильтрацией, блоклистами, списками разрешённых доменов и другими расширенными функциями:

  • Dashboard (Панель управления): Показывает общий обзор DNS-запросов, заблокированных доменов и сетевого трафика.
  • Query Log (Журнал запросов): Отображает все запросы, проходящие через Pi-hole, а также информацию о том, разрешены они или заблокированы.
  • Groups & Clients (Группы и клиенты): Позволяет настраивать правила фильтрации для отдельных устройств или их групп.
  • Domain Manager (Менеджер доменов): Удобен для более детального управления доменами — можно использовать шаблонную блокировку или конкретные записи.
  • Lists (Списки): Добавляйте новые блоклисты или списки разрешённых доменов, чтобы уточнять стратегию фильтрации.
  • Settings (Настройки): Здесь находятся параметры DNS, расширенные настройки веб-сервера, логи и многое другое.
✔️
Мне очень нравится новая организация конфигурационных файлов и возможность встроенного HTTPS, так что при желании можно легко поднять шифрованный доступ к Pi-hole.

Лично мне больше всего нравится, насколько упростилось управление пользовательскими списками. Хотите ли вы блокировать рекламу, трекеры или вредоносные домены — новая структура делает это практически незаметным.

Апстрим DNS и Cloudflare

В вашем Docker Compose-файле указано, что Pi-hole перенаправляет DNS-запросы на контейнер Cloudflare (внутренний адрес на порте 5053). Таким образом, все DNS-запросы шифруются и ваш провайдер не видит их содержание.

Однако Cloudflare продолжает их видеть, ведь это ваш DNS-провайдер. Решите сами, насколько такой вариант соответствует вашим требованиям к приватности.

Включение DHCP (необязательно)

Если вы хотите, чтобы Pi-hole отвечал и за DHCP, отредактируйте Docker Compose-файл: откройте порт 67/udp и добавьте NET_ADMIN в параметры cap_add.

После этого зайдите в «Settings» > «DNS» или «DHCP» на панели Pi-hole и включите DHCP. Затем можно выключить DHCP на вашем роутере, чтобы освободить эту функцию для Pi-hole.

Интерфейс настроек DHCP Pi-hole, показывающий варианты управления IP-адресами и активными арендованными DHCP.
Управляйте своими настройками DHCP с помощью Pi-hole для лучшего контроля над сетью | Источник: Jim’s Garage.

Миграция с Pi-hole v5 на v6

Хотите обновиться с более старой версии Pi-hole? Вот что я делал в тестовой среде:

  • Сделайте резервную копию старых конфигов: Экспортируйте настройки Pi-hole v5 через функцию «teleporter». Сохраните блоклисты, списки разрешённых доменов и локальные DNS-записи.
  • Остановите старый контейнер: Остановите Pi-hole v5, чтобы он не конфликтовал с новым контейнером на порту 53.
  • Используйте те же тома (volumes): Направьте Pi-hole v6 на те же каталоги, что и предыдущая версия. Pi-hole обычно сам подхватывает и мигрирует конфигурации, если они совместимы.
  • Убедитесь, что всё работает: Проверьте разрешение DNS, работу блоклистов и доступ к интерфейсу. При необходимости импортируйте резервную копию («teleporter»).
💪
Хотя обычно настройки мигрируются без проблем, на всякий случай держите резервные копии под рукой. Восстановить их в случае чего довольно быстро.
Панель настроек системы Pi-hole с отображением использования ЦП, ОЗУ и метрик DNS.
Просмотр панели управления Pi-hole для мониторинга производительности системы | Источник: Jim’s Garage.

Решение проблем с Pi-hole v6

Несмотря на стабильность Pi-hole v6, иногда могут возникать сложности во время установки или первой настройки. Вот несколько распространённых случаев и решения:

  • Конфликты портов: Если на вашей системе уже запущены службы DNS или веб-сервер, Pi-hole может не стартовать. Освободите порты 53 и 80 или поменяйте их в файле Compose.
  • Туннель Cloudflare не подключается: Перепроверьте переменные окружения в TUNNEL_DNS_UPSTREAM. Убедитесь, что контейнер имеет доступ в сеть.
  • Утечки DNS: Убедитесь, что устройства в локальной сети действительно используют IP-адрес Pi-hole как DNS-сервер. Иногда роутер или DHCP могут переопределять эти настройки.
  • Проблемы с правами на тома: Убедитесь, что пользователь Docker имеет права на запись в директории хоста, которые маппятся на /etc/pihole и /etc/dnsmasq.d.
Если на ваших устройствах появляется ошибка «Server Not Found», вероятно, Pi-hole не отвечает на DNS-запросы. Проверьте логи контейнера и убедитесь, что нет конфликтов портов или файрвола.

Что нового в Pi-hole v6 (официальные моменты релиза)

Встроенный веб-сервер и REST API: В Pi-hole v6 теперь есть собственный веб-сервер и переработанный API в одном бинарном файле. Это даёт более компактный размер и более шуструю работу, а также более удобный журнал запросов с серверной пагинацией. Добавлена поддержка Lua, что позволяет ещё глубже кастомизировать интерфейс.

Продвинутая фильтрация и списки разрешённых доменов: Вместе с классическими блоклистами Pi-hole v6 предлагает «Antigravity» списки для разрешения доменов. Подписывайтесь на такие «allowlists», и вы сможете избирательно пропускать нужные домены без огромного списка исключений.

Единые файлы конфигурации: Ряд настроек теперь объединён в один TOML-файл /etc/pihole/pihole.toml. При обновлении с v5 ваши текущие настройки мигрируются автоматически. Изменять конфиги можно, отредактировав TOML-файл, используя команду pihole-FTL --config, через API или через переменные окружения.

Обновлённый пользовательский интерфейс: Настройки теперь разделены на «Basic» и «Expert» режимы, чтобы каждый мог выбрать нужный уровень детализации. Благодаря этому обновлённому дизайну и новички, и опытные пользователи найдут удобную для себя структуру.

Поддержка HTTPS: Pi-hole v6 умеет самостоятельно генерировать HTTPS-сертификаты или принимать уже готовые. Если вы хотите обеспечить безопасность панели «по умолчанию», это можно сделать без привлечения внешних веб-серверов.

Улучшения в Docker: Теперь образ построен на базе Alpine, что существенно уменьшает его размер. Это более «лёгкое» решение, которое в перспективе даст ещё больше гибкости в поддержке различных систем.

Заключение

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

Независимо от того, хотите ли вы углубиться в расширенную фильтрацию с помощью allowlist или просто оценить обновлённый интерфейс, Pi-hole v6 — отличный выбор для домашней лаборатории или само-хостинга.

Я настоятельно рекомендую попробовать Pi-hole v6, особенно если вам нравились предыдущие версии. С Docker Compose весь процесс установки прост, воспроизводим и легко поддерживается.

При правильном планировании вы быстро запустите у себя продвинутую DNS-фильтрацию и блокировку рекламы вместе со всеми новыми возможностями Pi-hole v6.

Категоризовано в:

Программирования, Серверы,