Pi-hole на VPS — это блокировка рекламы и трекеров сразу на всех ваших устройствах без установки расширений и приложений. Принцип простой: устройство спрашивает у DNS-сервера адрес рекламного домена, а ваш сервер отвечает «такого нет» — баннер просто не загружается. AdGuard Home решает ту же задачу, но с более современным интерфейсом и встроенной поддержкой шифрования DNS. В этой статье разберём установку обоих на Ubuntu 24.04, настроим DNS-over-HTTPS и — обязательная часть — закроем резолвер от посторонних, чтобы ваш сервер не стал орудием DDoS-атак.
Как работает DNS-блокировка рекламы
Каждая загрузка страницы начинается с десятков DNS-запросов: сам сайт, CDN, счётчики, рекламные сети. DNS-фильтр сверяет каждый домен со списками блокировки (в популярных подборках — от сотен тысяч до миллионов записей) и для рекламных доменов возвращает пустой ответ. В результате:
- реклама и трекеры отсекаются на уровне сети — во всех браузерах и приложениях сразу;
- страницы грузятся быстрее: 20–40% запросов типичной страницы уходит на рекламу и аналитику;
- телеметрия «умных» телевизоров и IoT-устройств блокируется там, где расширение не поставить в принципе;
- вся статистика видна в веб-панели: какие устройства что запрашивают и что было заблокировано.
Почему VPS, а не Raspberry Pi дома? Сервер работает 24/7 независимо от вашего электричества и роутера, доступен из любой сети через VPN, а стоит дешевле «малинки»: NAT VPS уровня NAT Base у Cheap-Host обходится в 99 ₽/мес — 1 vCPU, 2 ГБ RAM и NVMe-диск, чего для DNS-фильтра хватает с запасом. Что такое NAT VPS и почему он такой дешёвый — в отдельной статье.
Pi-hole или AdGuard Home: краткое сравнение
| Критерий | Pi-hole | AdGuard Home |
|---|---|---|
| DNS-over-HTTPS для апстрима | Через отдельный cloudflared | Встроено |
| Шифрованный DNS для клиентов (DoH/DoT) | Нет из коробки | Встроено |
| Интерфейс | Функциональный, консервативный | Современный, проще для новичка |
| Потребление RAM | ~100–200 МБ | ~100–300 МБ |
| Гибкость правил | Regex, группы клиентов, dnsmasq-конфиги | Синтаксис AdGuard-правил, родительский контроль |
Резюме: если хотите «поставил и работает» с шифрованием без дополнительных компонентов — берите AdGuard Home. Если нужна максимальная гибкость и привычная экосистема — Pi-hole. Ставить оба на один сервер не нужно: они будут конфликтовать за порт 53.
Подготовка сервера
Подойдёт любой VPS с Ubuntu 24.04 и 1 ГБ RAM. Обновите систему и поставьте базовый файрвол:
sudo apt update && sudo apt upgrade -y
sudo apt install -y ufw curl
sudo ufw allow OpenSSH
sudo ufw enable
В Ubuntu 24.04 порт 53 занят локальным резолвером systemd-resolved. Перед установкой любого DNS-сервера освободите его:
sudo sed -i 's/#DNSStubListener=yes/DNSStubListener=no/' /etc/systemd/resolved.conf
sudo systemctl restart systemd-resolved
sudo rm /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
Вариант 1. Установка Pi-hole
Официальный установщик запускается одной командой:
curl -sSL https://install.pi-hole.net | bash
Мастер спросит апстрим-DNS (пока можно выбрать Cloudflare — позже заменим на шифрованный), списки блокировки и установку веб-интерфейса — соглашайтесь. В конце установщик покажет пароль от панели; сменить его можно командой:
sudo pihole setpassword
Панель будет доступна по адресу http://IP_сервера/admin — но открывать её всему интернету не стоит, об этом ниже.
DNS-over-HTTPS для Pi-hole через cloudflared
По умолчанию Pi-hole ходит к апстриму обычным нешифрованным DNS. Чтобы провайдер сервера не видел ваши запросы, поднимем локальный DoH-прокси cloudflared:
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
Создайте systemd-службу, которая будет принимать запросы на локальном порту 5053 и отправлять их по DoH:
sudo tee /etc/systemd/system/cloudflared-doh.service <<'EOF'
[Unit]
Description=cloudflared DNS-over-HTTPS proxy
After=network-online.target
[Service]
ExecStart=/usr/bin/cloudflared proxy-dns --port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
Restart=on-failure
DynamicUser=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now cloudflared-doh
Затем в панели Pi-hole: Settings → DNS — снимите галки со всех публичных апстримов и укажите Custom upstream 127.0.0.1#5053. Готово: наружу запросы уходят только в шифрованном виде.
Вариант 2. Установка AdGuard Home
Тоже одна команда:
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
После установки откройте http://IP_сервера:3000 и пройдите мастер первичной настройки: выберите интерфейсы, задайте логин и пароль администратора. Дальше всё делается в веб-панели.
DNS-over-HTTPS в AdGuard Home
Здесь cloudflared не нужен. Откройте Настройки → Настройки DNS и в поле «Upstream-серверы» укажите DoH-адреса:
https://dns.cloudflare.com/dns-query
https://dns.quad9.net/dns-query
Нажмите «Проверить upstream-серверы» и сохраните. В разделе «Шифрование» можно пойти дальше и включить собственный DoH/DoT-сервер для клиентов (понадобится домен и сертификат Let's Encrypt) — тогда даже трафик от ваших устройств до VPS будет зашифрован без VPN.
Главное предупреждение: не оставляйте открытый резолвер
Это не рекомендация, а обязательное требование. DNS-сервер, отвечающий на запросы с любых IP, называется открытым резолвером, и его судьба предрешена:
- Сканеры найдут его за часы. Порт 53 постоянно прочёсывается ботнетами по всему диапазону IPv4.
- Сервер станет орудием атак. В DNS amplification злоумышленник отправляет маленький запрос с подделанным IP жертвы, а ваш сервер отвечает жертве пакетом в десятки раз больше. Вы «бесплатно» усиливаете чужой DDoS.
- Последствия — ваши. Забитый канал, жалобы на абуз хостеру и блокировка сервера.
Поэтому доступ к порту 53 нужно ограничить одним из двух способов.
Способ 1. Файрвол по списку IP
Подходит, если у вас статический IP дома или в офисе. Разрешаем DNS и веб-панель только с него:
sudo ufw allow from 203.0.113.10 to any port 53
sudo ufw allow from 203.0.113.10 to any port 80 proto tcp
sudo ufw status verbose
Правило allow 53 без указания источника не пишите никогда. Подробнее о синтаксисе правил — в статье про настройку UFW.
Способ 2. VPN — рекомендуемый
Лучший вариант для телефонов и ноутбуков с динамическими IP: поднимите на том же сервере WireGuard и разрешите DNS только из VPN-подсети:
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 proto tcp
В конфиге WireGuard-клиента укажите DNS = 10.8.0.1 — и каждое подключённое устройство автоматически получает блокировку рекламы в любой сети, хоть в кафе, хоть в LTE. На NAT VPS этот вариант ещё и единственный практичный: внешний порт 53 на общем IP вам никто не отдаст, а внутри VPN-туннеля никакие пробросы не нужны. Заодно VPN закрывает вопрос приватности — почему свой VPN лучше бесплатного, мы разбирали отдельно.
Подключение устройств и проверка
- Пропишите IP сервера (или VPN-адрес вида 10.8.0.1) как DNS-сервер: в настройках сети устройства, в конфиге WireGuard или на домашнем роутере сразу для всей сети.
- Откройте пару сайтов с рекламой — баннеры должны исчезнуть.
- Загляните в панель: в Pi-hole это дашборд с графиком Queries Blocked, в AdGuard Home — стартовая страница со статистикой. Обычно блокируется 15–30% всех запросов.
- Проверьте шифрование: сервис 1.1.1.1/help должен показывать «Using DNS over HTTPS (DoH): Yes» для цепочки через cloudflared или DoH-апстрим.
FAQ
Что лучше — Pi-hole или AdGuard Home?
Pi-hole — классика с огромным сообществом и гибкой настройкой. AdGuard Home проще: DoH и DoT работают из коробки, интерфейс современнее. Для первого DNS-фильтра обычно удобнее AdGuard Home, для тонкой кастомизации — Pi-hole.
Чем опасен открытый DNS-резолвер?
Его найдут сканеры и начнут использовать в DNS amplification атаках: ваш сервер будет заваливать чужие жертвы усиленными ответами. Итог — жалобы на абуз, забитый канал и блокировка сервера. Порт 53 должен быть закрыт для всех, кроме ваших IP или VPN-подсети.
Сколько ресурсов нужно Pi-hole или AdGuard Home?
Совсем немного: 1 vCPU и 1–2 ГБ RAM хватает даже с миллионом доменов в списках. NAT Base у Cheap-Host (1 vCPU, 2 ГБ RAM, 15 ГБ NVMe) за 99 ₽/мес закрывает задачу с запасом — и на нём же поместится WireGuard.
Будет ли DNS-фильтр блокировать рекламу на YouTube?
Нет. Реклама YouTube отдаётся с тех же доменов, что и контент, поэтому DNS-блокировка её не режет. Фильтр эффективен против баннеров, трекеров, телеметрии и рекламы в приложениях, но не против рекламы, встроенной в видеопоток.
Можно ли использовать один фильтр для всех устройств семьи?
Да, это главный плюс схемы с VPS. Подключите устройства к WireGuard-туннелю и укажите VPN-адрес фильтра как DNS — реклама будет блокироваться на телефонах и ноутбуках в любой сети.
Вывод
Свой DNS с блокировкой рекламы разворачивается за вечер: одна команда на установку Pi-hole или AdGuard Home, настройка DNS-over-HTTPS для приватности апстрима и — обязательно — закрытие порта 53 файрволом или VPN. Взамен вы получаете чистый интернет на всех устройствах, статистику запросов и контроль над собственным DNS вместо доверия чужому.
Если нужен сервер под эту задачу — у Cheap-Host тариф NAT Base за 99 ₽/мес: 1 vCPU, 2 ГБ RAM, 15 ГБ NVMe, безлимитный трафик и выдача за минуту; его хватит и на DNS-фильтр, и на WireGuard рядом. Тарифы — на cheap-host.onl.