Pi-hole + Unbound – tekninen projektikuvaus
Yleiskuva ja tavoite
Tämä projekti kuvaa kahden Pi-hole + Unbound -instanssin kokonaisuuden: primäärin resolverin kotiverkossa (Raspberry Pi 4) sekä toissijaisen instanssin VPS-ympäristössä. Tavoitteena on ollut rakentaa läpinäkyvä ja hallittava DNS-kerros, joka:
- suodattaa mainoksia ja tarpeetonta seurantaa kaikkien kotiverkon laitteiden tasolla
- parantaa DNS-turvallisuutta DNSSEC-validoinnin ja omien resolverien avulla
- tuottaa selkeää lokitusta ja automatisoituja varmuuskopioita
- mahdollistaa suorituskykyvertailut ja trendiseurannan omilla mittausscripteillä
- on dokumentoitavissa teknisillä export-raporteilla (Pi-hole debug, Unbound stats, cron, automaatio)
Arkkitehtuuri
Kokonaisuus koostuu kahdesta Pi-hole + Unbound -solmusta:
- Raspberry Pi 4 -instanssi kotiverkossa, joka toimii primäärinä DNS-palvelimena LAN-asiakkaille (kotiverkon laitteet).
- VPS-instanssi (OpenStack-pohjainen Ubuntu 24.04), joka toimii toissijaisena Pi-hole + Unbound -solmuna sekä suorituskykytestien kohteena.
Molemmissa instansseissa arkkitehtuuri noudattaa samaa peruskuviota:
Clientit → Pi-hole (DNS/AD-block) → Unbound (rekursiivinen resolveri) → juuripalvelimet / forwarder
Pi-hole huolehtii mainos- ja seurantadomainien estosta, Unbound tekee rekursiivisen resolvoinnin ja DNSSEC-validoinnin. Juuripalvelimet on määritelty stub prime -tilassa ja taustalla on käytössä privacy-ystävällinen forwarder-konfiguraatio.
Raspberry Pi -instanssi (kotiverkon primääri DNS)
Ympäristö ja versiot
- Laitteisto: Raspberry Pi 4 Model B Rev 1.1 (aarch64)
- Käyttöjärjestelmä: Ubuntu 24.04 (64-bit)
- Pi-hole versiot:
- Core: v6.3
- Web: v6.4
- FTL: v6.4.1
- Unbound: 1.19.2
-
Unbound-moduulit:
dns64,python,cachedb,subnetcache,respip,validator,iterator
Rooli ja verkko
- Toimii kotiverkon laitteiden primäärinä DNS-palvelimena.
- Raspberry Pi on kaksiverkkoisessa konfiguraatiossa (LAN + WLAN); Pi-hole vastaa vain sisäverkon kyselyihin.
- Unbound kuuntelee paikallisesti osoitteessa
127.0.0.1#5335, ja Pi-hole käyttää sitä ainoana upstream-DNS:änä. - Pi-hole FTL on konfiguroitu optimoimaan lokitusta ja FTL-tietokantaa, jotta SD-kortin kuluminen vähenee.
Unbound-konfiguraatio ja DNSSEC (Raspberry Pi)
Raspberry Pi -instanssissa Unbound on konfiguroitu toimimaan rekursiivisena resolverina juuripalvelimista alkaen. Konfiguraation keskeiset piirteet:
-
Stub prime juuripalvelimiin:
. IN stub prime M.ROOT-SERVERS.NET. … A.ROOT-SERVERS.NET. -
Forwarder-moodi yhdistettynä stub prime -asetukseen:
. IN forward 1.1.1.1 1.0.0.1 - DNSSEC-validointi päällä; virheelliset allekirjoitukset katkaisevat vastauksen eikä epäluotettavaa dataa välitetä eteenpäin.
-
Paikalliset osoiteavaruudet määritelty static-zonena:
home.arpa.,10.in-addr.arpa.ja laaja64–82.100.in-addr.arpa.-alue, jotta käänteishaut sisäverkosta toimivat ennustettavasti. -
stats_noreset-tilastoista nähdään mm. yksittäisten säikeiden kyselymäärät, cachehit/miss-suhteet ja rekursioajat (esimerkkiajoissa yksi kysely,total.num.queries=1,total.num.recursivereplies=1).
VPS-instanssi (toissijainen Pi-hole + Unbound -solmu)
Ympäristö ja versiot
- Ympäristö: OpenStack Nova -pohjainen VPS
- Käyttöjärjestelmä: Ubuntu 24.04
- Pi-hole versiot:
- Core: v6.2.2
- Web: v6.3
- FTL: v6.3.2
- Unbound: 1.19.2
-
Unbound-moduulit:
dns64,python,cachedb,subnetcache,respip,validator,iterator
Rooli ja käyttö
- Toimii toissijaisena Pi-hole + Unbound -instanssina, jota käytetään sekä varapalvelimena että suorituskykytestien kohteena.
- Ei jaeta suoraan asiakkaiden DHCP-asetuksissa, vaan käytetään hallitusti omiin tarkoituksiin (mm. dnsperf-testit ja vertailut).
- Sama perusarkkitehtuuri kuin Raspberry Pi -instanssissa: Pi-hole → Unbound → juuripalvelimet / forwarder.
Unbound-tilastot ja DNSSEC (VPS)
VPS-instanssin unbound-control stats_noreset -ajoissa nähtiin esimerkiksi:
total.num.queries=2474total.num.cachehits=0,total.num.cachemiss=2474(instanssi vielä tuore, cache ei lämmitetty pitkäaikaisessa tuotantokuormassa)total.num.recursivereplies=2474total.recursion.time.avg≈0.0116 sjatotal.recursion.time.median≈0.0035 stotal.requestlist.max=9,total.requestlist.current.all=0mittaushetkellä
DNSSEC- ja resolveriasetukset noudattavat samaa linjaa kuin Raspberry Pi -instanssissa:
-
Stub prime -määritykset juuripalvelimille:
. IN stub prime M.ROOT-SERVERS.NET. … A.ROOT-SERVERS.NET. -
Forwarder-konfiguraatio:
. IN forward 1.1.1.1 1.0.0.1 -
Paikalliset ja RFC1918-alueet static-zonena:
home.arpa.,0.in-addr.arpa.,10.in-addr.arpa.,64–82.100.in-addr.arpa.jne.
Lomakkeet, lokitus ja tietoturva
Vaikka projekti keskittyy DNS-kerrokseen, kokonaisuus on osa laajempaa verkko- ja tietoturvainfraa. Molemmilla instansseilla on samat perusperiaatteet:
- Pi-hole admin -paneelit rajattu salasanalla ja HTTPS:n taakse, tarvittaessa IP- / verkkorajoituksin.
- DNS-palvelut kuuntelevat vain tarvittuihin suuntiin; resolveri ei ole avoin julkisena “open resolverina”.
- Palvelimet on kovennettu käyttöjärjestelmätasolla (SSH-konfiguraatio, päivitetyt paketit, tarpeettomien demojen poistaminen).
- Pi-holen ja Unboundin lokit pyörivät hallitusti: lokirotaatio, FTL-tietokannan optimointi ja SD-kortin / levytilan kulutuksen seuranta.
Automaatio, cron-tehtävät ja ylläpito
DNS-ympäristöä tukee joukko automaatioita, joiden tavoitteena on “aseta ja unohda” -tyylinen luotettavuus, mutta kuitenkin läpinäkyvä hallittavuus.
- Blocklistien automaattinen päivitys Pi-holessa yöaikaan cron-tehtävillä.
-
root.hints-tiedoston säännöllinen päivitys Unboundille (esimerkiksi kuukausittainen cron-ajo). -
Skripti
/usr/local/bin/optimize-pihole-unbound.sh, joka säätää Pi-hole + Unbound -ympäristön asetuksia, optimoi FTL-tietokantaa ja siivoaa lokit (cron-taso:0 3 * * * /usr/local/bin/optimize-pihole-unbound.sh >/dev/null 2>&1). - Varmuuskopiot Pi-holen ja Unboundin keskeisistä konfiguraatiotiedostoista, cron-riveistä ja omista skripteistä (timestampatut backupit ja mahdollinen synkronointi VPS:n suuntaan).
- Suunnitelma kahden Pi-holen synkronointiin (LAN <→ VPS) esimerkiksi Gravity Syncin tai muun vastaavan ratkaisun avulla.
Suorituskykytestit ja dnsperf / dns-bench
DNS-ratkaisun suorituskykyä testataan erillisellä mittauskokonaisuudella, joka hyödyntää
sekä dnsperf-työkalua että omaa dns-bench.sh-skriptiä.
- Raspberry Pi suorittaa dnsperf-ajoja eri resolvereita vastaan (oma Pi-hole + Unbound, VPS-instanssi, ulkoiset DNS-palvelut).
- Tulokset tallennetaan CSV-muodossa trendiseurantaa varten (mm. vasteaikojen keskiarvo, mediaani ja 95. persentiili).
-
dns-bench.shmahdollistaa useiden DNS-palvelimien vertailun saman testisetin läpi, jolloin oman resolverin suorituskykyä voidaan verrata tunnettuihin julkisiin DNS-palveluihin. -
Unboundin
stats_noreset-tilastoja käytetään tukidatana (mm. recursion.time.avg, cachehit/miss-suhteet) suorituskyvyn seurantaan ajan yli.
Tekniset export-raportit
Molemmista instansseista (Raspberry Pi ja VPS) on koottu erilliset tekniset export-raportit, jotka sisältävät muun muassa:
- järjestelmän perustiedot (
uname -a, distro, versio) - Pi-holen versiot ja tila (
pihole -v,pihole status) - Unboundin versio ja käännösoptiot (
unbound -V) - Unboundin
stats_noreset-tilastot (säikeet, cachehit/miss, recursion-aika) - Unboundin DNSSEC/validator-asetukset (stub prime, forwarder, static local zones)
- cron- ja automaatiorivit, jotka liittyvät Pi-holeen, Unboundiin ja dnsperf/dns-bench -skripteihin
Raportit toimivat teknisenä liitteenä ja todentavat, että kuvattu arkkitehtuuri ja asetukset perustuvat todelliseen, tuotantokäytössä olevaan järjestelmään eivätkä pelkkään konseptikuvaan.
Johtopäätökset ja jatkokehitys
Kahden Pi-hole + Unbound -instanssin kokonaisuus tarjoaa pienelle kotiverkolle ja omiin projekteihin selkeän, läpinäkyvän ja tietoturvallisen DNS-kerroksen. Ratkaisu ei perustu suljettuun järjestelmään, vaan konfiguraatiot, lokitus, automaatio ja mittausdata ovat omassa hallinnassa ja dokumentoitavissa.
Kokonaisuutta voidaan jatkossa laajentaa esimerkiksi:
- tiukempaan synkronointiin kahden Pi-holen välillä (asetukset, blocklistit, tilastot)
- laajempaan graafiseen trendiseurantaan (esim. vasteaikojen ja kyselymäärien visualisointi)
- lisäkovennuksiin (MFA admin-liittymiin, keskitetty logien keruu, integraatio muihin kotiverkon automaatioihin)