Kas tas Pi-hole ir kodėl verta jį turėti
Jei esi bent kiek susijęs su namų tinklais ar tiesiog pavargai nuo reklaminių banerių, kurie persekioja tave net ir po to, kai pažiūrėjai batų parduotuvę prieš savaitę – Pi-hole yra tas dalykas, apie kurį turėtum žinoti. Tai DNS lygio reklamų blokatorius, kuris veikia ne kaip plėtinys naršyklėje, o kaip atskiras serveris tavo namų tinkle. Skirtumas milžiniškas.
Tradiciniai blokatoriai, kaip uBlock Origin ar AdBlock Plus, veikia tik toje naršyklėje, kurioje jie įdiegti. Pi-hole veikia visiems įrenginiams tinkle vienu metu – televizoriui, telefonui, planšetei, išmaniajam šaldytuvui (taip, jie irgi siunčia duomenis). Kai koks nors įrenginys bando pasiekti reklaminį domeną, Pi-hole tiesiog atsako „tokio adreso nėra” ir reklama niekada nepasiekia tavo įrenginio.
Techniškai tai veikia taip: vietoj to, kad naudotum savo interneto tiekėjo DNS serverius (arba Google 8.8.8.8), nukreipi visą tinklo DNS srautą per Pi-hole. Jis turi juodąjį sąrašą su milijonais žinomų reklaminių, sekimo ir kenkėjiškų domenų. Jei užklausa sutampa su sąraše esančiu domenu – ji blokuojama. Jei ne – perduodama toliau į realų DNS serverį.
Ko reikės prieš pradedant
Geras dalykas tas, kad Pi-hole nereikalauja brangios įrangos. Klasikinis variantas – Raspberry Pi (iš čia ir pavadinimas), bet iš tikrųjų galima naudoti bet kokį Linux kompiuterį, seną nešiojamąjį, virtualią mašiną ar net Docker konteinerį.
Štai kas reikalinga:
- Raspberry Pi – tinka bet kuri versija nuo Pi Zero W iki Pi 4. Pi 3B+ yra puikus balansas tarp kainos ir galingumo. Kaina apie 35-50 eurų.
- MicroSD kortelė – bent 8GB, rekomenduojama 16GB ar 32GB. Class 10 arba A1 greičio klasė.
- Maitinimo šaltinis – oficialus Raspberry Pi maitinimo šaltinis arba bet koks 5V/3A USB-C (Pi 4 atveju).
- Ethernet kabelis – labai rekomenduojama prijungti per laidą, ne WiFi. DNS serveris turi būti stabilus.
- Prieiga prie maršrutizatoriaus nustatymų – reikės pakeisti DHCP nustatymus.
Jei neturi Raspberry Pi ir nenori jo pirkti, galima viską padaryti su Docker ant bet kokio Linux kompiuterio. Šiame straipsnyje aprašysiu abu variantus, bet pagrindinė eiga bus Raspberry Pi.
Vienas svarbus dalykas prieš pradedant – Pi-hole serveris turi turėti statinį (nekintantį) IP adresą tinkle. Jei kiekvieną kartą perkrovus jis gaus kitą IP, visi tinklo įrenginiai nustos veikę su DNS. Tai išsprendžiama arba maršrutizatoriuje priskiriant statinį IP pagal MAC adresą, arba nustatant statinį IP pačiame Raspberry Pi.
Raspberry Pi paruošimas ir Pi-hole įdiegimas
Pirmiausia reikia įrašyti operacinę sistemą į MicroSD kortelę. Atsisiųsk Raspberry Pi Imager iš oficialios svetainės (rpi.imager). Programa veikia Windows, macOS ir Linux sistemose.
Paleidus Imager:
- Pasirink Raspberry Pi OS Lite (64-bit) – mums nereikia grafinės sąsajos, tik komandinė eilutė. Tai sutaupo resursus.
- Pasirink savo MicroSD kortelę.
- Prieš rašant, spustelk krumpliaračio ikoną (Advanced options) ir čia nustatyk: hostname (pvz.,
pihole), įjunk SSH, nustatyk vartotojo vardą ir slaptažodį, jei naudosi WiFi – įvesk tinklo duomenis. - Rašyk į kortelę.
Kai kortelė paruošta, įdėk ją į Raspberry Pi, prijunk Ethernet kabelį ir maitinimą. Po minutės ar dviejų Pi turėtų būti pasiekiamas per SSH.
Prisijunk per SSH (Windows vartotojai gali naudoti PuTTY arba Windows Terminal):
ssh [email protected]
Arba naudok IP adresą, kurį rasi savo maršrutizatoriaus DHCP lentelėje. Pirmas dalykas po prisijungimo – atnaujink sistemą:
sudo apt update && sudo apt upgrade -y
Tai gali užtrukti kelias minutes. Kai baigta, laikas diegti Pi-hole. Oficiali diegimo komanda yra viena eilutė:
curl -sSL https://install.pi-hole.net | bash
Diegimo metu pasirodys grafinė (tekstinė) sąsaja su keliais klausimais. Svarbiausi pasirinkimai:
- Tinklo sąsaja – pasirink
eth0jei naudoji Ethernet (rekomenduojama). - Upstream DNS provider – tai DNS serveris, į kurį Pi-hole perduos neblokuojamas užklausas. Galima pasirinkti Cloudflare (1.1.1.1), Google (8.8.8.8) arba kitus. Cloudflare yra greičiausias daugelyje Europos vietų ir turi gerą privatumo politiką.
- Block lists – palik numatytuosius sąrašus, vėliau galėsi pridėti daugiau.
- Admin interface – būtinai įjunk. Tai web sąsaja valdymui.
- Logging – sprendimas tavo. Logai padeda matyti, kas blokuojama, bet užima vietos ir kelia privatumo klausimų.
Diegimo pabaigoje sistema parodys Pi-hole IP adresą ir web sąsajos slaptažodį. Užsirašyk slaptažodį! Jei pamiršai, galima jį pakeisti komanda pihole -a -p.
Statinio IP nustatymas ir maršrutizatoriaus konfigūracija
Dabar svarbiausia dalis – priversti visus tinklo įrenginius naudoti Pi-hole kaip DNS serverį. Yra du būdai tai padaryti.
1 būdas (rekomenduojamas): Maršrutizatoriaus DHCP nustatymai
Prisijunk prie savo maršrutizatoriaus administracinės sąsajos (dažniausiai 192.168.1.1 arba 192.168.0.1). Rask DHCP nustatymus ir pakeisk DNS serverio adresą į Pi-hole IP adresą. Kai maršrutizatorius išduoda IP adresus naujiems įrenginiams, kartu nurodo ir DNS serverį – taip visi automatiškai pradės naudoti Pi-hole.
Taip pat čia pat galima priskirti statinį IP Pi-hole pagal jo MAC adresą (DHCP reservation arba Static DHCP lease). Tai užtikrina, kad Pi-hole visada gaus tą patį IP adresą.
2 būdas: Statinis IP pačiame Raspberry Pi
Jei neturi prieigos prie maršrutizatoriaus nustatymų arba jis nepalaiko DHCP reservation, galima nustatyti statinį IP tiesiogiai Pi sistemoje. Redaguok dhcpcd konfigūraciją:
sudo nano /etc/dhcpcd.conf
Failo pabaigoje pridėk:
interface eth0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=127.0.0.1
Pakeisk adresus pagal savo tinklą. Svarbu: domain_name_servers=127.0.0.1 nurodo, kad Pi pats naudotų save kaip DNS – tai būtina Pi-hole veikimui.
Po pakeitimų paleisk iš naujo:
sudo reboot
Kai maršrutizatoriaus DHCP nustatymai pakeisti, visi nauji prisijungimai automatiškai gaus Pi-hole kaip DNS. Esamiems įrenginiams gali tekti atnaujinti tinklo ryšį (išjungti ir įjungti WiFi arba paleisti iš naujo).
Web sąsaja ir pirmieji žingsniai su Pi-hole
Pi-hole turi labai patogią web administracinę sąsają. Ją pasieksi naršyklėje įvedęs:
http://192.168.1.100/admin
(Pakeisk IP į savo Pi-hole adresą)
Prisijungęs pamatysi pagrindinį dashboard’ą su statistika: kiek DNS užklausų buvo per dieną, kiek procentų buvo blokuota, top blokuojami domenai, top klientai (įrenginiai) tinkle. Tai labai informatyvu – daugelis žmonių nustebsta sužinoję, kiek jų išmanusis televizorius „šneka” su išoriniais serveriais.
Keletas svarbių dalykų web sąsajoje:
Blocklists (Adlists) – čia valdai domenų blokavimo sąrašus. Numatytasis sąrašas yra geras pradžiai, bet galima pridėti daugiau. Populiarūs papildomi sąrašai:
- Steven Black’s list:
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts– vienas geriausių, reguliariai atnaujinamas - OISD:
https://big.oisd.nl– didelis ir gerai prižiūrimas sąrašas - Hagezi’s lists: keli skirtingi sąrašai skirtingiems poreikiams
Pridėjus naujus sąrašus, būtina atnaujinti Gravity (taip vadinamas Pi-hole duomenų bazės atnaujinimas):
pihole -g
Arba per web sąsają: Tools → Update Gravity.
Whitelist ir Blacklist – kartais Pi-hole per daug uoliai blokuoja. Jei koks nors puslapis nustoja veikti, tikėtina, kad Pi-hole blokuoja reikalingą domeną. Eik į Query Log, rask blokuotą domeną ir pridėk jį į Whitelist. Dažni „nukentėjusieji”: kai kurie bankininkystės portalai, captcha sistemos, kai kurios CDN paslaugos.
Groups – galima sukurti grupes ir skirtingiems įrenginiams taikyti skirtingas blokavimo taisykles. Pavyzdžiui, vaikų planšetei – agresyvesnis blokavimas, o savo kompiuteriui – švelnesnis.
Docker variantas tiems, kurie nenori Raspberry Pi
Jei jau turi kokį nors Linux serverį namuose arba nori paleisti Pi-hole kaip konteinerį, Docker variantas yra labai paprastas. Pirmiausia įdiek Docker ir Docker Compose.
Sukurk failą docker-compose.yml:
version: "3"
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp"
environment:
TZ: 'Europe/Vilnius'
WEBPASSWORD: 'tavo_slaptazodis'
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
restart: unless-stopped
Paleisk:
docker-compose up -d
Vienas niuansas su Docker – Linux sistemose dažnai 53 portas jau užimtas systemd-resolved. Jei gauni klaidą, kad portas užimtas, reikia išjungti systemd-resolved:
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
Tada sukurk simbolinę nuorodą DNS konfigūracijai:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Docker variantas turi vieną trūkumą – konteineris mato visus klientus kaip vieną IP adresą (Docker tinklo gateway), todėl statistika pagal įrenginius neveiks. Tai galima išspręsti naudojant network_mode: host, bet tai turi savo komplikacijų.
Saugumo sustiprinimas su DNS-over-HTTPS
Standartinis DNS yra nešifruotas – teoriškai tavo interneto tiekėjas ar kas nors tinkle gali matyti, kokius domenus užklauji. DNS-over-HTTPS (DoH) arba DNS-over-TLS (DoT) sprendžia šią problemą šifruodami DNS srautą.
Pi-hole pats savaime nepalaiko DoH, bet galima naudoti cloudflared kaip tarpinį serverį. Tai Cloudflare programa, kuri priima įprastas DNS užklausas ir perduoda jas per HTTPS į Cloudflare 1.1.1.1.
Diegimas Raspberry Pi:
# Atsisiųsk cloudflared
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb
sudo dpkg -i cloudflared-linux-arm64.deb
# Sukurk konfigūracijos failą
sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.yml
Konfigūracijos failo turinys:
proxy-dns: true
proxy-dns-port: 5053
proxy-dns-upstream:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
Įdiek kaip sisteminę paslaugą:
sudo cloudflared service install --legacy
sudo systemctl start cloudflared
sudo systemctl enable cloudflared
Dabar Pi-hole konfigūracijoje pakeisk Upstream DNS į 127.0.0.1#5053 – taip Pi-hole perduos užklausas cloudflared, o šis jas šifruotai nusiųs į Cloudflare.
Alternatyva Cloudflare – Unbound, kuris yra rekursyvus DNS serveris. Jis pats tiesiogiai kreipiasi į root DNS serverius, nepriklausomai nuo jokio trečiojo šalies DNS tiekėjo. Tai maksimalus privatumas, bet šiek tiek lėtesnis pirmos užklausos laikas (vėliau viskas kešuojama).
Kai Pi-hole trukdo, o ne padeda – problemų sprendimas ir gyvenimas su blokuotojumi
Realybė tokia, kad Pi-hole kartais blokuoja per daug. Tai normalu ir sprendžiama, bet reikia žinoti, kaip elgtis tokiose situacijose.
Puslapis neveikia – pirmiausia patikrink Pi-hole Query Log. Rask savo įrenginio IP adresą ir žiūrėk, ar nėra blokuojamų užklausų tuo metu, kai bandai pasiekti puslapį. Blokuotos užklausos rodomos raudona spalva. Jei randi probleminį domeną – whitelist’ink jį.
Greitas būdas laikinai išjungti Pi-hole (pvz., kai reikia kažką atlikti banke): web sąsajoje yra mygtukas „Disable” su galimybe pasirinkti laikotarpį – 10 minučių, 30 minučių arba iki rankinio įjungimo. Tai labai patogu.
Lėtas internetas – jei po Pi-hole diegimo internetas tapo lėtesnis, problema greičiausiai yra Pi-hole serverio resursai arba tinklo konfigūracija. Patikrink Pi-hole atsakymo laiką:
dig google.com @192.168.1.100
Atsakymo laikas turėtų būti mažiau nei 10ms vietiniame tinkle. Jei daugiau – gali būti per daug blokavimo sąrašų arba silpnas hardware.
Kai kurios programos neveikia – ypač dažna problema su Samsung, LG televizoriais ir įvairiais IoT įrenginiais. Jie dažnai naudoja hardcode’intus DNS serverius (pvz., 8.8.8.8) ir ignoruoja DHCP nustatymus. Sprendimas – maršrutizatoriuje sukurti taisyklę, kuri visas DNS užklausas į 53 portą nukreipia per Pi-hole (DNS hijacking). Tai galima padaryti su iptables arba maršrutizatoriaus firewall taisyklėmis.
Pi-hole atnaujinimas – reguliariai atnaujink tiek Pi-hole, tiek Gravity sąrašus:
pihole -up # atnaujina Pi-hole
pihole -g # atnaujina Gravity (blokavimo sąrašus)
Galima automatizuoti su cron:
sudo crontab -e
Pridėk eilutę, kuri kiekvieną sekmadienį 3 val. nakties atnaujins Gravity:
0 3 * * 0 pihole -g
Atsarginė kopija – Pi-hole turi integruotą backup funkciją. Web sąsajoje: Settings → Teleporter. Čia galima eksportuoti visus nustatymus, whitelist, blacklist ir sąrašus į ZIP failą. Jei MicroSD sugenda (o tai nutinka), per kelias minutes atstatysi viską iš naujo.
Vienas praktinis patarimas, kurį daugelis pamiršta: visada turėk antrą DNS serverį kaip atsarginį. Maršrutizatoriaus nustatymuose pirmas DNS – Pi-hole, antras – 1.1.1.1 arba 8.8.8.8. Taip, jei Pi-hole sugrius ar bus perkraunamas, internetas neišjungs visam tinklui. Tiesa, per antrą DNS reklamų blokavimas neveiks, bet bent jau internetas veiks.
Galiausiai – Pi-hole nėra sidabrinis kulkas. Jis neblokuos reklamos YouTube (nes jos ateina iš to paties domeno kaip ir video turinys), neapsaugos nuo visų sekimo metodų (canvas fingerprinting, CNAME cloaking ir kt.). Bet tai vis tiek vienas efektyviausių ir elegantiškiausių sprendimų namų tinklui – kartą nustatęs, jis tiesiog veikia tyliai fone, o tu gali stebėti dashboard’ą ir su pasitenkinimu žiūrėti, kaip blokuojama 20-30% viso tinklo srauto. Ir tai, draugai, yra tikras malonumas.
