Projekt Pi-hole® – Što je DNS i kako funkcionira DNS filtriranje

» Homelab » Pi-hole®
6–9 minuta

U svakodnevnom korištenju interneta rijetko razmišljamo o tome što se zapravo događa u pozadini kada u web preglednik upišemo adresu neke web stranice. Nekoliko slova u adresnoj traci dovoljno je da se u djeliću sekunde učita sadržaj s poslužitelja (engl. Server) koji se često nalazi na drugom kraju svijeta. Iako taj proces djeluje jednostavno, iza njega stoji niz koraka i sustava koji omogućuju da računala međusobno komuniciraju na pouzdan i predvidljiv način.

Jedan od ključnih elemenata te komunikacije je DNS (engl. Domain Name System). DNS je sustav koji internetske domene, koje su ljudima razumljive i pamtljive, prevodi u IP adrese koje računala koriste za međusobnu komunikaciju. Bez DNS-a, korištenje interneta kakvog danas poznajemo bilo bi nepraktično i znatno složenije, jer bismo za svaku web stranicu morali pamtiti i ručno unositi njezinu numeričku adresu.

U kontekstu sigurnosti, privatnosti i blokiranja neželjenog sadržaja, DNS ima još jednu vrlo važnu ulogu. Budući da svaki zahtjev prema nekoj internetskoj domeni prolazi upravo kroz DNS, taj se mehanizam može iskoristiti i za filtriranje prometa. Upravo na tom principu temelji se DNS filtriranje, tehnika koja omogućuje kontrolu nad time koje će se domene moći dohvatiti, a koje će biti blokirane već u samom začetku komunikacije. U nastavku će biti objašnjeno na vrlo laičkoj razini kako DNS funkcionira i na koji način DNS filtriranje čini temelj rješenja poput Pi-holea®.


Ovaj članak dio je projekta Pi-hole®, u kojem korak po korak implementiramo rješenje za blokiranje reklama na razini cijele mreže.
Više o projektu pročitajte ovdje.

Kako računala komuniciraju: Analogija s klasičnom poštom

Kako bismo razumjeli što su DNS i DNS filtriranje, potrebno je najprije shvatiti kako računala međusobno komuniciraju preko interneta. Ukratko, da bi komunikacija bila moguća, svako računalo mora se nekako identificirati. Najlakše je to objasniti analogijom s klasičnom poštom. Kada šaljemo pismo, na omotnici se uvijek nalaze dvije adrese: adresa pošiljatelja i adresa primatelja. One sadrže ime i prezime, ulicu, kućni broj, poštanski broj, grad i državu. Zahvaljujući tim podacima, poštar zna kome treba dostaviti pismo, ali i kome ga vratiti ako isporuka nije moguća.

IP adresa – identitet računala na mreži

Računala funkcioniraju na vrlo sličan način. Svaki uređaj na mreži ima svoju jedinstvenu adresu, a u svakom zahtjevu koji šalje preko interneta navodi se izvorišna adresa (tko šalje zahtjev) i odredišna adresa (kome se zahtjev šalje). Razlika između poštanske i računalne adrese je samo u načinu zapisivanja. Računala koriste IP adresu (engl. Internet Protocol address). Iako naziv zvuči kompliciran, IP adresa nije ništa više nego samo numerička oznaka, odnosno niz brojeva odvojenih točkama. Postoji više različitih verzija IP adresa od kojih neke imaju više brojeva i koriste i slova, za a potrebe ovog primjera uzmimo najjednostavniju i najčešće korištenu verziju, IPv4, koja se sastoji od četiri broja razdvojena točkama, na primjer: 192.100.25.128.

Primjer komunikacije između računala i poslužitelja

Zamislimo sada tipičan primjer komunikacije. Jedno računalo je poslužitelj na kojem se nalazi web stranica, a drugo je naše kućno računalo. Kada želimo otvoriti tu stranicu, teoretski bismo u web preglednik mogli upisati IP adresu poslužitelja. Naše računalo tada šalje zahtjev poslužitelju u kojem navodi IP adresu primatelja (poslužitelja) i vlastitu IP adresu kao pošiljatelja, uz dodatne tehničke informacije poput protokola i porta koji trenutno nisu relevantni za primjer. Poslužitelj primi zahtjev, vidi tko ga je poslao i odgovara tako da u odgovor stavlja sadržaj web stranice, ali sada s obrnutim ulogama: IP adresa poslužitelja je pošiljatelj, a IP adresa našeg računala primatelj. Naše računalo primi podatke i prikaže stranicu u web pregledniku.

Internetske domene – imena umjesto brojeva

Sve to zvuči jednostavno i logično, ali postavlja se jedno pitanje: kada smo zadnji put u preglednik ručno upisali IP adresu neke web stranice? Vrlo vjerojatno, nikada. U analogiji s razmjenom pošte između dvije kućne adrese, zanimljivo je primijetiti da kućne adrese nisu definirane nizovima nasumičnih brojeva, iako bi to strojevima u poštanskim sortirnicama bilo daleko jednostavnije za obradu. Umjesto toga, ulice i trgovi nose imena kulturnih, povijesnih ili sportskih ličnosti upravo zato što su takve adrese ljudima lakše pamtljive i smislenije. Sličan problem postoji i u računalnim mrežama. IP adrese su generički numerički nizovi brojeva i/ili slova koje računala savršeno razumiju, ali su ljudima teške za čitanje i gotovo nemoguće za pamćenje. Zbog toga je razvijen sustav internetskih domena, tekstualnih imena koja upisujemo u internetske preglednike, poput google.hr ili dsofic.dev, koja su ljudima lakša za pamćenje, a koja računala ih znaju u pozadini automatski prevesti u IP adrese na temelju kojih dalje komuniciraju.

DNS poslužitelj – prevoditelj domena u IP adrese

Kako bi ta pretvorba iz domene u IP adresu uopće bila moguća, u komunikaciju se uključuje treće računalo, odnosno dodatni poslužitelj koji se naziva DNS poslužitelj (engl. Domain Name System Server). Taj poslužitelj ne sudjeluje izravno u razmjeni sadržaja, već služi kao pomoćni posrednik između dva računala koja žele komunicirati. Kada u web preglednik upišemo neku adresu, primjerice dsofic.dev, naše računalo najprije kontaktira DNS poslužitelj i postavlja vrlo jednostavno pitanje: kojoj IP adresi pripada ova internetska domena? Tek nakon što dobije odgovor, računalo zna kojem poslužitelju treba poslati stvarni zahtjev, odnosno u zahtjevu postavlja ispravnu IP adresu primatelja. Gdje se DNS poslužitelji zapravo nalaze i tko ih održava? U većini slučajeva DNS poslužitelje automatski osigurava internet provider (engl. Internet Service Provider, skr. ISP), poput A1-a, HT-a ili Telemacha. Osim njih, postoje i javni DNS servisi koje održavaju velike tehnološke tvrtke, poput Cloudflare DNS i Google Public DNS, a koje korisnici često koriste zbog brzine, pouzdanosti ili privatnosti.

Vratimo se sada korak unazad na primjer dohvata web stranice. Rekli smo da naše računalo šalje zahtjev prema poslužitelju i kao odgovor dobiva sadržaj web stranice. To je najjednostavniji mogući primjer komunikacije, no u stvarnosti je situacija nešto složenija. Kada se web stranica učita, priča tu ne završava. Sama stranica često sadrži dodatne poveznice i elemente koji upućuju na druge internetske domene, s kojih se naknadno dohvaća sadržaj. To mogu biti slike, skripte, analitički alati, ali vrlo često i reklame. Drugim riječima, mi smo dohvatili osnovnu web stranicu s jednog poslužitelja, ali ona našem računalu dalje govori: “Osim mene, dohvati još i sadržaj s ove internetske domene, i s ove, i s ove.” Među tim dodatnim internetskim domenama često se nalaze upravo domene povezane s oglašavanjem. Naše računalo tada za svaku od tih internetskih domena radi novi zahtjev. Prvo ponovno kontaktira DNS poslužitelja i pita: kojoj IP adresi odgovara ova internetska domena? Nakon što dobije odgovor, ponavlja cijeli postupak komunikacije, potpuno isto kao i kod izvornog dohvata web stranice.

DNS filtriranje kao rješenje problema

U tom trenutku počinje se nazirati rješenje našeg problema. Kada bismo mogli preuzeti ulogu DNS poslužitelja i reći: “Ako web stranica traži učitavanje sadržaja s internetske domene za koju znam da je povezana s reklamama, nemoj uopće dohvaćati taj sadržaj”, mogli bismo učinkovito filtrirati ono što želimo, a što ne želimo učitati. I upravo to možemo napraviti tako da u svojoj lokalnoj mreži podignemo vlastiti lokalni DNS poslužitelj koji će imati tu kontrolu nad DNS upitima, a za tu svrhu možemo koristiti Pi-hole®, alat koji preuzima ulogu DNS poslužitelja i omogućuje filtriranje sadržaja već na razini samog upita, prije nego što reklame uopće dođu do uređaja.

Pi-hole® se postavlja kao DNS poslužitelj za cijelu mrežu. Kada neki uređaj pokuša dohvatiti domenu povezanu s reklamama ili praćenjem, Pi-hole® taj zahtjev prepoznaje i jednostavno ga blokira – odgovor nikad ne stigne do uređaja, a reklama se uopće ne učita. Budući da se sve događa na DNS razini, ovo vrijedi za sve aplikacije i sve uređaje spojene na lokalnu mrežu, ne samo za web preglednike.

Na prvu se može činiti da je pokretanje vlastitog servera skup i kompliciran pothvat. I doista, za snažne servere potreban je ozbiljan softver i hardver koji obično rezultira i povećom potrošnjom energije što zahtjeva poveći novčanik. Međutim, za lokalni DNS server za filtriranje to uopće nije slučaj. Pi-hole® je besplatni open-source projekt, a za njegovo pokretanje dovoljan je mali, jeftin i energetski učinkovit uređaj poput Raspberry Pi računala, koji može raditi neprekidno uz zanemarivu potrošnju struje.

U sljedećem dijelu pozabaviti ćemo se Raspberry Pi računalom, zašto je posebno pogodno za ovakav zadatak, te koji model u moru modela odabrati za svrhu ovog projekta.