Blog
PLEN

Pi-hole + AdGuard — DNS jako warstwa filtrująca w sieci

Adblock w przeglądarce zostawia telewizor i telefon na pastwę reklam. DNS-level filtering załatwia wszystko z każdego urządzenia. Pokazuję mój setup Pi-hole + upstream AdGuard.

·3 min read
Pi-hole + AdGuard — DNS jako warstwa filtrująca w sieci

uBlock Origin blokuje reklamy w przeglądarce. Telewizor, nie ma uBlock. Telefon, apki nie używają uBlocka. Konsola, smart home, IoT, wszystko leci do internetu z reklamami i telemetrią.

Rozwiązanie: blokowanie na poziomie DNS. Każde urządzenie pyta DNS o IP serwera, jeśli DNS odmawia (zwraca 0.0.0.0), komunikacja się nie odbywa. Cała sieć dostaje filtrowanie naraz.

Architektura

[Każde urządzenie w LAN]
    ↓ DNS query
[Pi-hole na Proxmox VM]   ← filtruje znane reklamowe domeny
    ↓ jeśli OK
[AdGuard upstream]         ← drugi filtr + DoH (DNS over HTTPS)

[Cloudflare 1.1.1.1 / Quad9]

Router lokalny ma w DHCP wpisany Pi-hole jako primary DNS. Każde urządzenie automatycznie idzie tą drogą.

Pi-hole setup

VM na Proxmox, Ubuntu Server, 1GB RAM (z wstecznym kompresorem zapasu, Pi-hole na 256MB też hula).

curl -sSL https://install.pi-hole.net | bash

Instalator pyta:

  • Interface (zwykle eth0)
  • Upstream DNS (wybieram Custom → AdGuard)
  • Block lists (default jest OK na start)
  • Web UI (yes, port 80)
  • Logging (yes, ale TTL 7 dni)

Po 5 minutach panel jest dostępny pod http://pi-hole.local/admin.

AdGuard jako upstream

Po co dwa filtry? Pi-hole ma wielką community blocklist, AdGuard dodaje:

  • bardzo agresywne anti-tracking lists
  • DNS-over-HTTPS (DoH) do upstream'u
  • regex matching (Pi-hole tylko domain match)

Setup AdGuard też jako VM albo jeszcze prościej, Docker:

services:
  adguard:
    image: adguard/adguardhome
    ports:
      - "8853:53/udp"
      - "8853:53/tcp"
      - "3000:3000"
    volumes:
      - adguard-data:/opt/adguardhome/conf

W Pi-hole settings → DNS → custom upstream: 192.168.x.x:8853.

Co warto wpisać do block list

Domyślne listy załatwiają reklamy. Ja dodaję:

  • OISD basic, najnowocześniejsza, dobrze utrzymywana
  • Steven Black hosts, agreguje wiele list, ad+tracking+malware
  • AdGuard SDN trackers, telemetria mobile apps
  • Custom: domeny smart-home które za dużo dzwonią do internetu

Blokuję np. *.tuya.com (chińskie żarówki), *.miio.com (Xiaomi), *.tplinkcloud.com, ich produkty działają lokalnie, telemetria nie potrzebna.

Whitelist — bez tego nie działa

Niektóre apki padają gdy zablokujesz im telemetrię. Mam ~15 whitelist'ów:

# Spotify telemetria - blokowanie psuje skip między urządzeniami
gew4-spclient.spotify.com
ap-gew4.spotify.com
 
# Apple - blokowanie psuje iCloud sync
*.apple.com (selektywnie)
 
# Banki PL - PSD2 wymaga ich telemetria
api.mbank.pl

Reguła: jak coś psuje, sprawdzam Pi-hole logi, identyfikuję domenę, dodaję do whitelist. Maks 5 minut.

Rezultaty po roku

Statystyki z mojego Pi-hole:

  • Łączna liczba blokowanych zapytań: ~4M
  • % blokowanych: 23%
  • Najczęściej blokowane: app-measurement.com (Google Analytics mobile)
  • Top 3 urządzenia generujące najwięcej query: TV LG, telefon żony, Sonos

Pułapki

1. Single point of failure. Padnie Pi-hole → cały internet padnie. Mam drugiego Pi-hole jako secondary DNS w DHCP. Failover automatyczny.

2. CDN load balancing. Niektóre serwisy używają DNS do load balancingu (zwracają różne IP). Cache Pi-hole może to zaburzyć. TTL ustawiam na max 1h.

3. DoH/DoT bypass. Współczesne przeglądarki (Firefox, Chrome) potrafią używać DoH bezpośrednio do CF/Google. Bypassują mój DNS. Trzeba to wyłączyć w settings przeglądarki LUB blokować port 853 na firewallu.

4. Smart TV bypass. LG i Samsung mają hardkodowane DNS Google. Bypass. Rozwiązanie: firewall rule blokujący port 53 na zewnątrz dla IP TV.

Bonus: integracja z Home Assistant

Pi-hole ma API. Mam HA integration:

  • Stat blokowanych zapytań na dashboardzie
  • Toggle "wyłącz blokadę na 5 min" przyciskiem (gdy coś psuje)
  • Alert gdy blokada przekracza 50% (znak że coś dziwnego się dzieje)
# configuration.yaml
pi_hole:
  - host: 192.168.1.10
    api_key: !secret pihole_api_key

DNS-level blocking to najbardziej leveraged rzecz jaką masz w sieci domowej. Konfigurujesz raz, działa na wszystko, w tle. Pi-hole to ~10 minut setup'u, a daje filtrowanie reklam, telemetrii i znanych malware'ów dla każdego urządzenia w LAN.