DNS server med Bind9

Bilde av Nathan Dumlao fra Unsplash

Bilde av Nathan Dumlao fra Unsplash

Hvis du skal ha noe form for intranet i huset, leiligheten eller hybelen din er det veldig praktisk å sett opp en lokal DNS server. På den måten slipper du å huske IP-adresser, og opplevelsen av ditt eget intranettet blir helt lik som om det var på internet. En annen fordel er at du kan ha flere websider på en webserver, så lenge websidene har forskjellige navn.

Bind9 er en gratis og populær DNS server som du relativt raskt kan sette opp på din Linux server.

Installasjon

Denne guiden tar utgangspunkt i Ubuntu server 18.04.

Start med å installere bind9, som er DNS serveren som vi skal bruke.

sudo apt install bind9

Grunnleggende DNS Server konfigurasjon

Caching only DNS server

Aller først konfigurere vi DNS serveren til å bli det som kalles en forward lookup DNS. Denne vil fungere som en caching DNS. Det vil si at hvis ikke adressen det blir spurt om finnes i denne DNS serverens register, videresendes spørringen til neste DNS server. I denne guiden setter vi den til google sin DNS server som ligger på IP-adressene 8.8.8.8 og 8.8.4.4. I virkeligheten bør du legge inn din lettleverandør sin DNS server.

Navigere til mappen hvor konfigurasjons filene ligger

cd /etc/bind

De mest grunnleggende innstillingene vi skal gjøre, blir gjort i filen named.conf.options

Denne configurasjons filen er i JSON format, derfor har ikke whitespace som mellomrom eller tab noe å si.

Aller først må vi legge inn er en ACL (Access Control List) regel. Denne kaller vi "trusted". Denne inkluderer nettverket som DNS serveren skal være på, og localhost. Det er mulig å hoppe over det å bruke ACL, men det er god praksis å begrense hvem som kan bruke en DNS server.

sudo vim named.conf.options
named.conf.options
acl trusted{
    192.168.239.0/24; //<----- ditt nettverk!!!
    localhost;
};
...

Videre må vi legge inn regler for hvordan bind skal oppføre seg

named.conf.options
...
options {
    directory "/var/cache/bind";
    recursion yes;
    allow-recursion { trusted; }; //<---- ACL regelen vi laget
    listen-on { 192.168.239.10; }; //<----- Serverens IP
    allow-transfer { none; };
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
};

For å aktivere endringene må bind9 restartes.

sudo systemctl restart bind9

Brannmur oppsett

For at datamaskinene på nettverket skal få tilgang til DNS serveren må brannmur portene som DNS serveren ligger bak åpnes ut mot nettverket.

sudo ufw allow from 192.168.239.0/24 to any port 53

Kontrollere at reglene ble lagt til.

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----                
53                         ALLOW       192.168.239.0/24

Loopkup Zones

Da er det klart til å legge inn nye filer som skal bruke til å knytte sammen domenenavn og IP-adresser. Dette gjøres i filen "named.conf.local".

sudo vim named.conf.local

I bunnen av denne filen legges disse linjene inn:

named.conf.local
zone "home.local" {
 type master;
 file "/etc/bind/db.home.local";
};

zone "239.168.192.in-addr.arpa" {
 type master;
 file "/etc/bind/db.1";
};

Nå må du lage de to filene som du akkurat refererte til:

sudo touch db.1
sudo touch db.home.local

Vi starter med å sette opp det "normale" DNS oppsett. Altså hvilke domene navn som tilsvarer hvilke IP-adresser

sudo vim db.home.local
db.home.local
$TTL 86400
@ IN SOA ns.home.local. root.home.local. (
 2 ; Serial
 604800 ; Refresh
 86400 ; Retry
 2419200 ; Expire
 86400 ) ; Negative Cache TTL
;dns records on this machine goes here
@ IN NS ns.home.local.
ns IN A 192.168.239.1
www IN A 192.168.239.1
;other machines below this line

Med dette oppsettet har vi lagt til at adressene www.home.local og ftp.home.no skal peke til IP-adressen 192.168.239.1. Dette stemmer med websiden og som ligger på den webserveren, og FTP serveren jeg har på samme host.

Nå må vi sette opp "reverse DNS":

sudo vim db.1
db.1
;
; BIND reverse data file for empty rfc1918 zone
;
$TTL 86400
@ IN SOA ns.home.local. root.home.local. (
 2 ; Serial
 604800 ; Refresh
 86400 ; Retry
 2419200 ; Expire
 86400 ) ; Negative Cache TTL
;
@ IN NS ns.
1 IN PTR ns.home.local.
1 IN PTR www.home.local.
1 IN PTR ftp.home.local

Denne listen er det motsatte av forrige fil. Her sier vi at i adressen 192.168.239.1 peker til domene navnene www.home.local og ftp.home.local.

Ved å ha begge disse filene vil datamaskiner på nettverket finne IP-adresser og domener ved å enten søke på IP-adresser, eller domene navn.

Når du restarter bind9, er den klar til bruk.

sudo systemctl restart bind9

For at du skal kunne ta i bruk den nye DNS serveren på nettverket ditt må du legge den til som DNS sever på DHCP server oppsettet på ruteren din. For at du skal kunne ta i bruk endringene må datamaskinene på nettverket kobles til og fra, så den mottar ny IP-adresse og DNS server informasjon DHCP serveren på ruteren.

Kilder og inpsirasjon:
help.ubuntu.com
www.digitalocean.com