[11] Pi-hole – Lokalny serwer DNS (Local DNS)

21 marca 2024 Wyłączono przez Adam [zicherka] Nogły

Konfiguracja lokalnego serwera DNS w oparciu o na przykład chyba najpopularniejszego „Bind’a” nie jest skomplikowana i trudna. Jednak po co uruchamiać kolejna usługę, skoro wbudowany w Pi-Hole prosty serwer [dnsmasq], w nawet średniej wielkości sieci spokojnie da radę. Owszem dla jednego średnia sieć to 100 urządzeń końcowych, dla innych to 1000000 urządzeń końcowych. Jednak dla OKOŁO 1000 urządzeń końcowych, które będą odpytywać serwer DNS na naszym Pi-Hole nie powinno to robić wrażenia. Owszem, wziąć należy pod uwagę także ograniczenia sprzętowe. W takim wypadku Pi-Hole NA PEWNO nie może pracować na jakimś małym komputerku jednopłytowym (Orange Pi, Raspberry Pi, itp.) lecz musi to już być odpowiedni sprzętowy serwer.

Rekordy adresowe DNS (A/AAAA)

Rekord DNS A (Address Record) jest używany do mapowania nazwy domeny lub subdomeny na adres IPv4 (adres IP w wersji 4).

Rekord DNS AAAA (Quad A Record) jest częścią protokołu IPv6, co oznacza, że jest używany do przypisywania adresów IPv6 do hostów w Internecie.

Dodamy teraz wpisy do naszego serwera [dnsmasq].

Logujemy się do panelu głównego Pi-Hole i z lewego menu wybieramy [Local DNS] > [DNS Records].

W prawym panelu w polu [Domain] wpisujemy FQDN (pełną nazwę domenową wraz z nazwą hosta) hosta/urządzenia, zaś w polu [IP address] wpisujemy adres IP jaki chcemy skojarzyć z tym hostem. Następnie klikamy [Add].

Wpis wiążący FQDN z adresem IP został dodany co widać w tabeli [List of local DNS domains].

Aby sprawdzić poprawność rozwiązywania nazwy hosta który dodaliśmy przed chwilą wykonajmy prosty test z wykorzystaniem polecenia [dig]. W zupełności wystarczy uzyskanie dostępu do konsoli na hoście na którym pracuje pihole.

Zatem zaloguj się na hoście i wykonaj poniższe czynności, aby sprawdzić poprawność rozwiązywania nazw.

root@pihole06:~# dig @192.168.1.6 pihole06.zicher.net.local.
; <<>> DiG 9.18.24-1-Debian <<>> @192.168.1.6 pihole06.zicher.net.local.
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19780
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;pihole06.zicher.net.local.     IN      A
;; ANSWER SECTION:
pihole06.zicher.net.local. 0    IN      A       192.168.1.6
;; Query time: 4 msec
;; SERVER: 192.168.1.6#53(192.168.1.6) (UDP)
;; WHEN: Sat Mar 16 21:14:10 CET 2024
;; MSG SIZE  rcvd: 70

root@pihole06:~# dig @192.168.1.6 -x 192.168.1.6
; <<>> DiG 9.18.24-1-Debian <<>> @192.168.1.6 -x 192.168.1.6
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61640
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;6.1.168.192.in-addr.arpa.      IN      PTR
;; ANSWER SECTION:
6.1.168.192.in-addr.arpa. 0     IN      PTR     pi.hole.
;; Query time: 0 msec
;; SERVER: 192.168.1.6#53(192.168.1.6) (UDP)
;; WHEN: Sat Mar 16 21:14:13 CET 2024
;; MSG SIZE  rcvd: 74

Jak widać wszystko działa poprawnie.

Aliasy (CNAME)

Rekord CNAME określa kanoniczną nazwę domeny (prawdziwą nazwę domeny) , która może być aliasem innej domeny lub subdomeny domeny głównej. Innymi słowy, mapuje jedną nazwę hosta na inną.

Jak wspomniałem wcześniej, nie można dodać dwóch nazw FQDN do jednego adresu IP – sprawę jednak rozwiązują aliasy. Aliasy są to alternatywne nazwy danej domeny i/lub hosta. Ułatwiają one zarządzanie wieloma nazwami/domenami, które de facto kierują do jednego konkretnego adresu.

Zatem dodajmy alias [pi6] do uprzednio dodanego wpisu [pihole06.zicher.net.local]. Kliknij w lewym panelu [Local DNS] > [CNAME Records].

W prawym panelu w polu [Domain] wpisz nazwę pod jaką ma być rozwiązywana nazwa domeny/FQDN hosta [pihole06.zicher.net.local], zaś w polu [Target Domain] wpisz oryginalną nazwę hosta. Następnie kliknij przycisk [Add]. Wybrana nazwa może nie jest jakimś cudem nazewnictwa domenowego, ale pokazuje ideę działania rekordów CNAME.

Wpis został dodany, co widać na poniższym zrzucie ekranu.

Sprawdźmy zatem czy faktycznie aliasy działają.

root@pihole06:~# dig @192.168.1.6 pi6.zicher.net.local.
; <<>> DiG 9.18.24-1-Debian <<>> @192.168.1.6 pi6.zicher.net.local.
; (1 server found)
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60301
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;pi6.zicher.net.local.          IN      A
;; ANSWER SECTION:
pi6.zicher.net.local.   0       IN      CNAME   pihole06.zicher.net.local.
pihole06.zicher.net.local. 0    IN      A       192.168.1.6
;; Query time: 0 msec
;; SERVER: 192.168.1.6#53(192.168.1.6) (UDP)
;; WHEN: Sat Mar 16 23:22:51 CET 2024
;; MSG SIZE  rcvd: 104

Jak widać w sekcji [ANSWER SECTION] wszystko działa poprawnie.