BIND9 DNS szerver telepítés Debian-ra
A DNS szerver szerepe
Az internet IP (internet protokoll) alapú világméretű hálózat. Minden hálózatra kötött eszköznek van egy IP címe (egyedi azonosító) és az eszközök ez alapján kommunikálnak egymással. Az internet protokoll egy szám, ami IPv4 esetén négy bájt (szám 0-255-ig) ponttal elválasztva, például 74.125.136.100 . Persze ahhoz, hogy egyszerűbb legyen az életünk és a web böngészőbe ne hasonló számokat keljen beírogatni, kitalálták, hogy a számokat egyedi nevekkel lehessen helyettesíteni. Ezek lettek a domain nevek. Tehát amikor a böngészőbe beírjuk, hogy 74.125.136.100 akkor ugyanúgy a népszerű kereső oldalra jutunk, mintha azt írtuk volna, hogy google.com . De honnan tudja böngésző, hogy a beírt névhez milyen IP cím tartozik. És itt jön a lényeg. Az IP címek, nevekkel történő megfeleltetéséért a DNS szerverek felelősek. Amikor a böngészőbe beírjuk, hogy “google.com”, akkor a számítógép megkérdezi a DNS szervert, hogy “Ugyan mond már meg hogy milyen IP cím tartozik ehhez a domain névhez!”. A DNS szerver pedig küldi a választ, hogy “74.125.136.100”. Ezzel a böngésző már tud valamit kezdeni és meg fogja tudni jeleníteni az adott IP címen lévő web oldalt…
A feladat tehát adott, a virtuális teszt környezetünkbe telepítünk egy BIND9 DNS szervert. A környezet a következő nevekből és IP címekből fog állni, a DNS szervernek ezeket kell majd feloldania:
- dns.debian.lnx - 192.168.10.10 - ez maga a DNS szerver
- host.debian.lnx - 192.168.10.100 - egy host gép
- gateway.debian.lnx - 192.168.10.254 - egy gateway gép ami az átjárást biztosítja a szeparált virtuális hálózat és a lan között.
A BIND9 telepítése
Parancssorban root felhasználóként telepítsük a bind9 csomagot.
# apt-get install bind9
Miután feltelepült, a szolgáltatás egyből fut, ellenőrizzük.
# systemctl status bind9
● bind9.service - BIND Domain Name Server
Loaded: loaded (/lib/systemd/system/bind9.service; enabled)
Drop-In: /run/systemd/generator/bind9.service.d
└─50-insserv.conf-$named.conf
Active: active (running) since k 2016-03-01 20:12:43 CET; 22min ago
Docs: man:named(8)
Main PID: 375 (named)
CGroup: /system.slice/bind9.service
└─375 /usr/sbin/named -f -u bind
...
Először állítsuk be a forwarders
opciót. Ez teszi lehetővé, hogy ha olyan DNS kérés érkezik a kiszolgálóhoz, amit nem tud feloldani, akkor a kérést továbbítja egy megadott másik DNS szerverhez feloldásra.
A következő fontos beállítás, az allow-query
. Ez mondja meg a DNS szervernek, hogy mely tartományoktól fogadhat csak el DNS lekérdezéseket.
Nyissuk meg hát a named.conf.options
fájlt és állítsuk be ezeket.
# nano named.conf.options
...
forwarders {
8.8.8.8;
};
allow-query { 192.168.10.0/24; 127.0.0.1; };
...
A forwarders
nél megadhatjuk a szolgáltatónk, a google publikus vagy bármely a hálózatban elérhető DNS szerver címét.
A következő feladat, hogy a named.conf.local
fájlba felvesszük a debian.lnx
tartományunkat.
# nano named.conf.local
zone "debian.lnx" {
type master;
file "/etc/bind/db.debian.lnx";
};
zone "10.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192";
};
Ügyeljünk a sorvégi és a kapcsos zárójelek végén levő pontos vesszőkre.
Most csináljunk egy másolatot a db.empty
fájlból db.debian.lnx
néven. Majd a localhost
-ot cseréljük debian.lnx
-re.
# cp db.empty db.debian.lnx
# sed -i s/localhost/debian\.lnx/g db.debian.lnx
Az utolsó sorban az NS
rekordot javítsuk ki dns.debian.lnx-re és vegyük fel a többi nevet és címet.
# nano db.debian.lnx
...
@ IN NS dns.debian.lnx.
dns IN A 192.168.10.10
host IN A 192.168.10.100
gateway IN A 192.168.10.254
A reverse fájlal, vagyis a db.192
-vel járjunk el hasonlóan.
# cp db.empty db.192
# sed -i s/localhost/debian\.lnx/g db.192
Az utolsó sorban itt is javítsuk az NS
rekordot és vegyük fel a többi gép reverse (PTR) címét.
# nano db.192
...
@ IN NS dns.debian.lnx.
10 IN PTR dns.debian.lnx.
100 IN PTR host.debian.lnx.
254 IN PTR gateway.debian.lnx.
Ha változtatunk a zóna fájl (esetünkben db.debian.lnx, db.192) tartalmán, akkor a benne lévő Serial
opción növelni kell hogy a DNS szerver reload után életbelépjenek azok. Újraindítás (restart) esetén újratölti a zóna fájlokat, de reload esetén ha a Serial
nem változik, akkor nem.
A Serial
tartalmát csak simán növelhetjük, de a bevett szokás, hogy a módosítás dátumát irjuk ide hozzátéve egy két jegyű számot a végére, jelezvén a napon belüli esetleges változások számát pl. 2016022901.
# cat /etc/bind/db.debian.lnx
$TTL 604800
@ IN SOA debian.lnx. root.debian.lnx. (
2016022901 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS dns.debian.lnx.
dns IN A 192.168.10.10
host IN A 192.168.10.100
gateway IN A 192.168.10.254
# cat /etc/bind/db.192
$TTL 604800
@ IN SOA debian.lnx. root.debian.lnx. (
2016022901 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS dns.debian.lnx.
10 IN PTR debian.lnx.
100 IN PTR host.debian.lnx.
254 IN PTR gateway.debian.lnx.
Mielött ujratöltjük a DNS szerver konfigokat, ellenőrizzük azokat.
# named-checkconf /etc/bind/named.conf.local
# named-checkconf /etc/bind/named.conf.options
Ha nem ad vissza semmit, akkor nincs benne hiba. Most a zone fájlok ellenörzése következik.
# named-checkzone debian.lnx db.debian.lnx
zone debian.lnx/IN: loaded serial 2016022903
OK
# named-checkzone 10.168.190.in-addr.arpa db.192
zone 10.168.190.in-addr.arpa/IN: loaded serial 2016022901
OK
Úgy néz ki, hogy szintaktikailag minden rendben. Nincs más hátra, mint a DNS szerver konfigurációk újratöltése.
# systemctl reload bind9
A host és a gateway gépre belépve, állítsuk be a /etc/resolv.conf
-ba, hogy az új DNS szerver legyen használva.
# nano /etc/resolv.conf
nameserver 192.168.10.10
Ha ez meg van akkor ellenőrizzük, hogy az új DNS szerver feloldja-e az gépneveket.
# nslookup gateway.debian.lnx
Server: 192.168.10.10
Address: 192.168.10.10#53
Name: gateway.debian.lnx
Address: 192.168.10.254
# nslookup host.debian.lnx
Server: 192.168.10.10
Address: 192.168.10.10#53
Name: host.debian.lnx
Address: 192.168.10.100
# nslookup dns.debian.lnx
Server: 192.168.10.10
Address: 192.168.10.10#53
Name: dns.debian.lnx
Address: 192.168.10.10
Most nézzünk egy olyan címet, amit biztosan nem tud helyben feloldani és egy másik DNS szerverhez kell fordulnia. Kérjük meg dig
utasítással a szerverünket, hogy oldja fel a www.index.hu domain nevet.
# dig @192.168.10.10 www.index.hu
; <<>> DiG 9.9.5-9+deb8u5-Debian <<>> @192.168.10.10 www.index.hu
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11439
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.index.hu. IN A
;; ANSWER SECTION:
www.index.hu. 89 IN A 217.20.130.99
;; AUTHORITY SECTION:
. 11755 IN NS c.root-servers.net.
. 11755 IN NS d.root-servers.net.
. 11755 IN NS g.root-servers.net.
. 11755 IN NS h.root-servers.net.
. 11755 IN NS m.root-servers.net.
. 11755 IN NS j.root-servers.net.
. 11755 IN NS l.root-servers.net.
. 11755 IN NS f.root-servers.net.
. 11755 IN NS k.root-servers.net.
. 11755 IN NS a.root-servers.net.
. 11755 IN NS b.root-servers.net.
. 11755 IN NS e.root-servers.net.
. 11755 IN NS i.root-servers.net.
;; Query time: 203 msec
;; SERVER: 192.168.10.10#53(192.168.10.10)
;; WHEN: Thu Mar 03 20:39:07 CET 2016
;; MSG SIZE rcvd: 268
Látható, hogy minden további nélkül feloldotta, vagyis a forwarders
opció működik. Ha most még egyszer lekérjük ugyanezt, akkor a válasz végén levő statisztikából kiderül, hogy már nem fordul a másik DNS szerverhez, hanem cache-böl válaszol rá, amit láthatunk a Query time
különbségéből.
# dig @192.168.10.10 www.index.hu
; <<>> DiG 9.9.5-9+deb8u5-Debian <<>> @192.168.10.10 www.index.hu
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23696
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1
...
...
;; Query time: 31 msec
;; SERVER: 192.168.10.10#53(192.168.10.10)
;; WHEN: Thu Mar 03 20:44:37 CET 2016
;; MSG SIZE rcvd: 268
Így már csak 31 msec a válasz idő az elöbbi 203-al szemben.
Ez már elég, ahhoz hogy a BIND9 DNS szerver alapszinten működjön. A késöbbiek folyamán majd leírom, a DNS szerverünk kiegészítését egy slave DNS szerverrel, ahova autómatán szinkronizálódnak majd a zóna változások és a fő DNS szerver kiesése esetén tökéletesen működik, mint tartalék DNS szerver.