Pi-hole ×2 + Nebula Sync: отказоустойчивый фильтр рекламы дома
🛡 Pi-hole ×2 + Nebula Sync: отказоустойчивый фильтр рекламы дома
Зачем это всё?
Pi-hole давно стал «золотым стандартом» для фильтрации рекламы и трекеров.
Но у него есть один минус: если Pi-hole упал → интернет для всей сети становится недоступен (нет DNS).
Моё решение:
- Один Pi-hole работает на Raspberry Pi (физический, надёжный, low-power).
- Второй — в Docker-контейнере (на домашнем сервере).
- Конфигурации синхронизируются через Nebula (mesh VPN).
В итоге у меня отказоустойчивая DNS-схема, которая продолжает работать даже если Raspberry Pi выключить.
Архитектура
- Raspberry Pi — главный Pi-hole (статический IP, используется роутером по умолчанию).
- Docker Pi-hole — резервный DNS, на Proxmox-сервере.
- Nebula — mesh VPN для синхронизации конфигов (whitelist/blacklist, статистика).
- Роутер — прописаны два DNS:
192.168.1.10 (Raspberry)и192.168.30.20 (Docker).
1
2
3
[Клиенты] → [Роутер] → DNS #1 (Raspberry Pi-hole)
↳ DNS #2 (Docker Pi-hole)
↑ синхронизация через Nebula ↑
Установка Pi-hole на Raspberry Pi
1. Подготовка системы
Ставим Raspberry Pi OS Lite, настраиваем статический IP.
1
2
3
4
5
sudo nano /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.1.10/24
static routers=192.168.1.1
static domain_name_servers=1.1.1.1 8.8.8.8
2. Установка Pi-hole
1
curl -sSL https://install.pi-hole.net | bash
Выбираем интерфейс, DNS (например, Cloudflare), включаем веб-интерфейс.
Установка Pi-hole в Docker
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3"
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
environment:
TZ: 'Europe/Moscow'
WEBPASSWORD: 'changeme'
volumes:
- ./etc-pihole:/etc/pihole
- ./etc-dnsmasq.d:/etc/dnsmasq.d
ports:
- "53:53/tcp"
- "53:53/udp"
- "8080:80/tcp"
restart: unless-stopped
Запуск:
1
docker-compose up -d
Теперь доступен веб-интерфейс по http://SERVER_IP:8080/admin.
Nebula Sync
1. Что это такое?
Nebula — лёгкий mesh VPN, похожий на Tailscale, но полностью self-hosted.
Я использую его для синхронизации конфигов Pi-hole.
2. Установка
Ставим nebula на оба узла (Raspberry и сервер).
Каждый получает приватный IP (например, 10.200.0.1 и 10.200.0.2).
3. systemd unit
1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Nebula Mesh VPN
After=network.target
[Service]
ExecStart=/usr/local/bin/nebula -config /etc/nebula/config.yml
Restart=always
[Install]
WantedBy=multi-user.target
4. Синхронизация
Скрипт для репликации whitelist/blacklist каждые 5 минут:
1
2
#!/bin/bash
rsync -avz -e "nebula-cert ssh" /etc/pihole/gravity.db root@10.200.0.2:/etc/pihole/gravity.db
Можно повесить на cron:
1
*/5 * * * * /usr/local/bin/sync-pihole.sh
Мониторинг и визуализация
Я использую Grafana + Prometheus Exporter для Pi-hole.
Он собирает метрики: количество запросов, блокировки, топ-домены.
Пример дашборда:
- 📊 Общее количество DNS-запросов.
- 🚫 Сколько заблокировано.
- 🌍 Список топ-10 заблокированных доменов.
Итоги
- ✅ Два Pi-hole: Raspberry (главный) + Docker (резерв).
- ✅ Nebula обеспечивает синхронизацию конфигов.
- ✅ Интернет продолжает работать даже если одно устройство падает.
- ✅ Красивый мониторинг в Grafana.
Это решение отлично подходит для homelab и умного дома: удобно, надёжно, красиво.
