
Det du ser på bildet over er et sinkhole. Et stort hull i bakken hvor alt mulig ramler ned i og forsvinner.
Et pi-hole er en form for digitalt sinkhole. Et sted hvor ting ramler ned og forsvinner. Men i motsetning til sinkholes er pi-hole litt selektiv på hva som forsvinner. I hovedsak er det internett-reklame og annen digital skadevare (malware).
Et sinkhole oppstår gjerne helt uforutsett, og skaper mye trøbbel og furore, mens et pihole må opprettes, og løser forhåpentligvis flere problemer enn det skaper.
For noen å siden vant jeg en Raspberry Pi 4 i et lotteri på jobben. Dette er en liten, men likevel forholdsvis kraftig datamaskin på størrelse med en sigarett-eske. Den har ligget i en skuff i noen år, men jeg har hele tiden hatt i tankene at den må kunne brukes til noe fornuftig. Pi-hole er nettopp et slikt prosjekt. Pi-hole har fått deler av navnet sitt fra Raspberry Pi, og fungerer utmerket på en slik liten boks. Denne bloggposten er et forsøk på å dokumentere hvordan jeg fikk dette opp og gå.
Første utfordringen var å få oppdatert operativsystemet. Siden Pi’en har rukket å bli 5-6 år gammel var det ikke bare å oppgradere. Jeg måtte installere nyeste versjon av operativsystemet helt fra scratch. Heldigvis hadde jeg et 32Gb SD-minnekort liggende i en skuff. Men hvordan få programvaren over på den? Turen gikk til Elkjøp, hvor jeg anskaffet en enkel minnekort-leser for en ikke altfor dyr penge.
Tilbake på hjemmekontoret installerte jeg Raspberry PI Imager, som er et program som kopierer operativsystemet inn på minnekortet. Siden min PC er konfigurert med Fedora linux var det enkelt og greit:
sudo dnf install rpi-imager
Da imageren var installert startet jeg den opp, og satte minnepinnen inn i PC’ens USB port. Deretter gjorde jeg neon enkle valg:

Under Choose storage velger man så minnepinnen. Etter å ha trykket på Next kommer man til en dialog hvor man kan tilpasse installasjonen. Her trenger man ikke endre på noen ting, men jeg valgte å gi boksen navnet pihole samt å slå på støtte for ssh på fanen services. Deretter er det bare å velge Finish og vente på at minnebrikken skal bli klar.
Da programmet var ferdig tok jeg minnebrikken ut av kortleseren og puttet den inn i porten for minnekort på Raspberry PIen. Den finner man på undersiden av boksen, på den ene kortsiden. Med strøm via mikro-usb porten, keyboard via USB-A og skjerm over HDMI startet jeg opp den lille boksen. Det aller første jeg gjorde var å kople den til det trådløse nettet her hjemme. Deretter installerte jeg de nyeste endringene og sikkerhetsfiksene av operativsystemet:
sudo apt update && sudo apt upgrade
Dette måtte jeg gjenta noen ganger til alle oppdateringene var installert.
Jeg valgte å installere pi-hole vha systemverktøyet docker. Det må ogsá installeres:
sudo apt install docker-compose
Jeg lagde en katalog for programvaren:
mkdir pi-hole && cd pi-hole
Konfigurasjonen av pi-hole lages i en fil som heter docker-compose.yml:
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
# DNS Ports
- "53:53/tcp"
- "53:53/udp"
# Default HTTP Port
- "80:80/tcp"
# Default HTTPs Port. FTL will generate a self-signed certificate
- "443:443/tcp"
# Uncomment the below if using Pi-hole as your DHCP Server
#- "67:67/udp"
environment:
# Set the appropriate timezone for your location (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones), e.g:
TZ: 'Europe/London'
# Set a password to access the web interface. Not setting one will result in a random password being assigned
FTLCONF_webserver_api_password: 'mitt superhemmelige passord'
# If using Docker's default `bridge` network setting the dns listening mode should be set to 'all'
FTLCONF_dns_listeningMode: 'all'
# Volumes store your data between container upgrades
volumes:
# For persisting Pi-hole's databases and common configuration file
- './etc-pihole:/etc/pihole'
# Uncomment the below if you have custom dnsmasq config files that you want to persist. Not needed for most starting fresh with Pi-hole v6. If you're upgrading from v5 you and have used this directory before, you should keep it enabled for the first v6 container start to allow for a complete migration. It can be removed afterwards. Needs environment variable FTLCONF_misc_etc_dnsmasq_d: 'true'
#- './etc-dnsmasq.d:/etc/dnsmasq.d'
cap_add:
# See https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
# Required if you are using Pi-hole as your DHCP server, else not needed
- NET_ADMIN
# Required if you are using Pi-hole as your NTP client to be able to set the host's system time
- SYS_TIME
# Optional, if Pi-hole should get some more processing time
- SYS_NICE
restart: unless-stopped
Denne konfigurasjonen er så godt som identisk med eksempelet i dokumentasjonen. Det eneste jeg har endret på er passordet spesifisert i FTLCONF_webserver_api_password. Dette er passordet du skal knotte inn for å få logget på pi-hole sin admin webside.
Med konfigfilen lagret i ~/ad-hole/docker-compose.yml startet jeg så ad-hole:
sudo docker-compose -f ~/ad-hole/docker-compose.yml up -d
Nå kan du se om du kan logge inn på admin-siden ved å starte en nettleser og gå til
http://localhost/admin/login
Her trenger du ikke noe brukernavn, men passordet som står i docker-compose.yml.
Hvis alt har gått etter planen, skal du nå komme inn på admin-siden til pi-hole:

Standardmessig kommer pi-hole med en enkel liste for hva som skal blokkeres. Her er det mulig å legge til mye mer, og også whiteliste ting hvis det skulle vise seg at blokkeringen skaper uforutsette problemer. Jeg la til en ekstra liste:
https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/pro.txt
Da var tiden kommet for å kople boksen til ruteren. Først måtte jeg få tak i boksens ip-adresse:
ifconfig | grep 192
inet 192.168.1.142 netmask 255.255.255.0 broadcast 192.168.1.255
Boksen bor med andre ord på adressen 192.168.1.142 i mitt lokale nettverk.
Min router har en USB-port som jeg koplet raspberry pien til, slik at den får strøm. Jeg kunne også koplet den til ruteren med en ethernet kabel, men siden boksen allerede var koplet til vha wifi så jeg ikke behovet for dette.
Siste bit i puslespillet er å få routeren til å bruke pi-hole som dns-tjener istedetfor standard-dns. Dette gjorde jeg i routerens administrasjosmodul hvor jeg endret DNS fra DNS Proxy til Static

Og det var i hovedsak det. Koplet PC fra Wifi-nettverket og tilbake på nettet for å oppdatere innstillingene, og sjekket så på http://192.168.1.142/admin at den mottok nye DNS forespørsler fra min nettleser.