Feltételezzük, hogy van egy futó működő szerver, jól beállított fix IP címmel.
Az IP címet ellenőrizzük az „ip a s” paranccsal. Erre az IP címre kell beállítanunk tartománynevünket.
Rendelkezésre álló verzió:
# apt install bind9
Szükség lesz még a dig parancsra. Ez két csomagban is benne van:
# apt install knot-dnsutils
vagy
# apt install dnsutils
rndc status systemctl status bind9
systemctl start bind9
rndc reload systemctl status bind9
/etc/bind/
Minden zónát fel kell vennünk a /etc/bind/named.conf.local fájlban. A gyökér szerverek elérhetősége alapból konfigurálva van a db.root fájlban.
A /etc/bind/named.conf.options fájl globális az bind egészére vonatkozó beállításokat tartalmazza.
Ha TOP level domainek lekérdezése helyett az ISP szervereitől akarunk lekérdezni DNS-t a gyorsabb elérés érdekében (mivel azok a névszerverek közelebb vannak), akkor ide írjuk azok IP címét.
Query-source address * port 53;
A 8.3 bindtól tetszőleges port megadható amelyen a bind figyeli a kéréseket.
Minden zónának kell külön ún. zónafájlt készíteni, melyek szokásos helye /var/cache/bind, bár ezt megváltoztathatjuk.
Itt két újabb könyvtár létrehozása szokásos. A master és a slave. A master könyvtárban tároljuk azokat a zónákat amelyeknek „master” szervere vagyunk, és értelemszerűen a slave könyvtárban azoknak a zónáknak a fájljait tesszük amelyeknek „slave” vagyunk.
Minden zónafájl rekordokból áll. Egy rekord a következő részekből áll.
Általánosan:
név | TTL | osztály | típus | adat |
Részletek:
név | TTL | osztály | típus | adat |
amit be akarunk állítani | meddig tárolhatják a rekord adatait (nem kötelező) | IN | SOA A PTR NS CNAME MX | adatok |
Példa:
név | TTL | osztály | típus | adat |
zold.and. | 3D | IN | A | 192.168.5.4 |
mkdir /var/cache/bind/master mkdir /var/cache/bind/slave
A bind a zónaátvitelhez használhat kulcsokat a párbeszédhez. Ezeket egy managed-keys.bind fájlba szokás menteni. A Bind e nélkül is elindul, azonban annak hiánya a naplófájlokban hibaüzenetet generál.
Hozzunk létre a kulcsok számára is egy állományt:
touch /var/cache/bind/managed-keys.bind chown bind:bind /var/cache/bind/managed-keys.bind
Utóbbi, hogy a bind tudja is írni.
A példában olyan top level domaint választottam, amely nem létezik: „and”.
A zold.and zóna bejegyzése:
mcedit /etc/bind/named.conf.local
zone "zold.and" in { type master; notify yes; file "master/zold.and.zone"; };
Részletek
zone "zold.and" in { | A zóna neve |
type master; | Mester típusú zóna |
notify yes; | A Slave szervernek nem kell a refresh lejáratára figyelni, maga kezdeményezheti a frissítést |
file "master/zold.and.zone"; | A zónafájl helye |
Ellenőrizzük, a konfiguráció helyességét a named-checkconf paranccsal:
named-checkconf /etc/bind/named.conf.local
A zónafájloknak szokásos kiterjesztése .zone Szokás szerint a fájl neve a zóna nevével megegyezik, amelynek adunk egy .zone kiterjesztést. (Ettől eltérhetünk, de így találjuk meg könnyen zónafájljainkat.
touch /var/cache/bind/master/zold.and.zone
Minimális zóna:
$TTL 3D zold.and. SOA ns.zold.and. hostmaster.zold.and. ( 2012012401 8H 2H 4W 1D) zold.and. NS ns.zold.and. zold.and. A 192.168.5.4 ns.zold.and. A 192.168.5.4
Az A rekord neve előtt a zóna neve helyett megadható @ karakter is:
zold.and.
De akár el is hagyhatjuk.
$TTL 3D zold.and. SOA ns.zold.and. hostmaster.zold.and. ( 2012012401 8H 2H 4W 1D) NS ns.zold.and. A 192.168.5.4 ns A 192.168.5.4
Szintaktikai ellenőrzés:
named-checkzone zold.and /var/cache/bind/master/zold.and.zone
Újraindítjuk a szervert:
invoke-rc.d bind9 restart
Ellenőrizzük, van-e hibaüzenetünk a syslog állományban:
tail /var/log/syslog
Ellenőrizzük, hogy névszerverünk szolgáltatja-e a domaint:
dig @localhost zold.and
; <<>> DiG 9.7.3 <<>> @localhost zold.and ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41154 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;zold.and. IN A ;; ANSWER SECTION: zold.and. 86400 IN A 192.168.5.4 ;; AUTHORITY SECTION: zold.and. 86400 IN NS zold.and. ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Tue Jan 24 20:44:21 2012 ;; MSG SIZE rcvd: 56
A kimenetben keressük az „ANSWER SECTION” sorokat, amit követ a helyes név domainnév és IP cím összerendelés:
zold.and. 86400 IN A 192.168.5.4
Most ellenőrizzük, hogy az alkalmazásaink is képesek-e használni. A zold.and zónát egyelőre csak saját szerverünk ismeri, ezért állítsuk be azt DNS szervernek.
Ezek után állítsuk be a /etc/resolv.conf fájlban a DNS szervernek a saját DNS szerverünk címét, majd ellenőrizzük a host paranccsal is:
host zold.and
nslookup zold.and
Állítsunk be aldomaineket, aliasokat.
Az NS rekordnak és az első A rekordnak (amely nem tartalmazza a host nevet sem), rögtön a SOA rekord után kell megadni. Csak ezek után jöhet a többi!
$TTL 3D @ SOA ns.zold.and hostmaster.zold.and. ( 2012012401 8H 2H 4W 1D) NS ns.zold.and. NS ns2.zold.and. A 192.168.5.4 ns A 192.168.5.4 ns2 A 192.168.5.4 iskolazo A 192.168.5.4 mail A 192.168.5.4 www CNAME iskolazo
DNS szerverünkön működnie kell a postmaster@zold.and e-mail címnek. E nélkül a regirsztrátorok nem fogadják el kérelmünket.
Technikai ellenőrzés
Új zóna esetén:
/etc/init.d/bind9 reload
Ha változtatunk egy zónán:
rndc reload
Amire ügyelni kell a sorrend. Az MX rekordot az NS rekord után helyezzük el. A másik, hogy a mail.zold.and. ne alias legyen, helyette „A” rekord.
@ SOA ns.zold.and hostmaster.zold.and ( 2012012401 8H 2H 4W 1D) NS ns.zold.and. NS ns2.zold.and. MX 10 zold.and. A 192.168.5.4 ns A 192.168.5.4 ns2 A 192.168.5.4 iskolazo A 192.168.5.4 mail A 192.168.5.4 www CNAME iskolazo
Megadjuk neki melyik névszerver beállításaira vagyunk kíváncsiak, és melyik domain-re.
dig @localhost zold.and
A példában a localhost-on futó DNS szerverre vagyok kíváncsi, és szeretném tudni mit mond a zold.and domaintről.
Ha csak az „A” rekordot szeretnénk látni, lebeszélhetjük a dig parancsot a többi sor kiírásáról:
dig +nocomments +nostats +nocmd +noquestion szit.hu
Ha az MX rekordra vagyunk kíváncsiak:
dig +nocomments +nostats +nocmd +noquestion MX szit.hu
Ha még kevesebb szükséges:
dig +short szit.hu
dig +short MX szit.hu
telnet localhost 25
vagy
telnet 127.0.0.1 25
Megnézzük a postaládát
Ha távolról lépünk be, akkor nem kell megnézni, ha nincs ilyen e-mail cím akkor nem fogadja el, hacsak nem vagyunk OpenRelay
mcedit /etc/bind/named.conf.local
zone "8.22.165.195.in-addr.arpa" in { type master; notify yes; file "master/159.166.22.8.zone"; };
Ellenőrizzük:
named-checkconf /etc/bind/named.conf.local
mcedit /var/cache/bind/master/195.166.22.8.zone
$TTL 3D @ SOA ns1.zold.and hostmaster.zold.and ( 2006092401 8H 2H 4W 1D) NS ns1.zold.and. PTR zold.and.
A zónafájl szintaktikai ellenőrzése:
named-checkzone 8.22.166.195.in-addr.arpa /var/cache/bind/master/195.166.22.8.zone
invokde-rc.d bind9 restart
Elkészültünk a beállításokkal. Ellenőrizzük, hogy a DNS szerverünk szolgáltatja-e a bejegyzést.
dig -t ptr @localhost 4.5.168.192.in-addr.arpa
Helyes válasz esetén:
;; ANSWER SECTION: 4.5.168.192.in-addr.arpa. 259200 IN PTR zold.and.
A host paranccsal:
A vizsgálathoz legyen beállítva a /etc/resolv.conf fájlban a DNS szervernek a localhost.
host 195.166.22.8
Az iskolapéldánk:
host 192.168.5.4
Ha rendben van a futtatás eredménye:
4.5.168.192.in-addr.arpa domain name pointer zold.and.
Ha egy meglévő zónát módosítunk, kezdjük a sorozatszám növelésével!
Másodlagos illetékes szerver.
Egy másik szerveren beállítom zold.and zónát:
zone "zold.and" { type slave; masters { 192.168.5.4; }; }; zone "4.5.168.192.in.addr.arpa" { type slave; masters { 192.168.5.4; }; };
Ha szeretnénk, hogy az adatokat el is mentse a bind, akkor állítsunk be file sort is. A bind számára adjunk írási jogot.
zone "zold.and" { type slave; masters { 192.168.5.4; }; file "/var/cache/bind/slave/zold.and.zone"; };
chown bind.bind /var/cache/bind/slave invoke-rc.d bind9 restart
Újraindítás után nézzük meg:
cat /var/cache/bind/slave/zold.and.zone
Lehetséges eredmény:
$ORIGIN . $TTL 80 ; 1 minute 20 seconds zold.and IN SOA ns1.zold.and. hostmaster.zold.and. ( 2012032301 ; serial 60 ; refresh (1 minute) 20 ; retry (20 seconds) 120 ; expire (2 minutes) 90 ; minimum (1 minute 30 seconds) ) NS ns1.zold.and. NS ns2.zold.and. A 192.168.5.100 $ORIGIN zold.and. iskolazo A 192.168.5.100 ns1 A 192.168.5.100 ns2 A 192.168.5.100 www CNAME iskolazo
A tesztelés érdekében nagyon kis TTL értékeket állítottam be a master zónafájlban.
Zónaátvitelt ne engedélyezzük mindenhonnan.
A példában csak a 192.168.5.8-as másodlagos szervernek és localhoston engedélyezzük:
zone "zold.and" { allow-transfer { 192.168.5.8; localhost; }; };
Ha valaki nem a mi tartományunkból kérdez le, akkor azt ne engedjük.
options { allow-query { 192.168.5.0/24; localhost; }; }; zone "zold.and" { allow-query { any; }; }; zone "5.168.192.in-addr.arpa" { allow-query { any; }; };
Rekurzív lekérdezéseket is csak a saját tartományból engedélyezzük.
options { allow-recursion { 192.168.5.0/24; localhost; }; };
Alapvetően Debian rendszerben dolgozunk és itt alapból nem rootként fut a bind. Ha forrásból telepítettük vagy más rendszeren dolgozunk, ahol nem így van, akkor használjuk a -u kapcsolót a felhasználó megadásához.
Keressük meg az indító scriptet, amely lehet például a következő:
/etc/init.d/bind9
A -u kapcsolót illesszük a kapcsolók közzé. Például:
start-stop-daemon --start --oknodo --quiet --exec /usr/sbin/named -u bind
apt-get install bind9-doc
ls /usr/share/doc/bind9-doc
Gyakorláshoz használható toplevel domainek:
Ezek sehol nem szerepelnek a világhálón.
Ezek után ilyen domaineket hozhatunk létre:
$TTL 3D zold.and. SOA zold.and. hostmaster.zold.and. ( 2012032301 8H 2H 3W 1D) NS zold.and. A 192.168.5.4
$TTL 3D @ SOA ns1.zold.and. hostmaster.zold.and. ( 2012032301 8H 2H 3W 1D) NS ns1.zold.and. A 192.168.5.4 ns1 A 192.168.5.4
$TTL 3D @ SOA ns1.zold.and. hostmaster.zold.and. ( 2012032301 8H 2H 3W 1D) NS ns1.zold.and. A 192.168.5.4 ns1 A 192.168.5.4 iskolazo A 192.168.5.4
$TTL 3D @ SOA ns1.zold.and. hostmaster.zold.and. ( 2012032301 8H 2H 3W 1D) NS ns1.zold.and. A 192.168.5.4 ns1 A 192.168.5.4 iskolazo A 192.168.5.4 www CNAME iskolazo ftp CNAME iskolazo irc CNAME iskolazo
$TTL 3D @ SOA ns1.zold.and. hostmaster.zold.and. ( 2012032301 8H 2H 3W 1D) NS ns1.zold.and. MX 10 mail.zold.and. A 192.168.5.4 ns1 A 192.168.5.4 iskolazo A 192.168.5.4 mail A 192.168.5.4 www CNAME iskolazo ftp CNAME iskolazo irc CNAME iskolazo
$TTL 3D @ SOA ns1.zold.and. hostmaster.zold.and. ( 2012032301 8H 2H 3W 1D) NS ns1.zold.and. PTR zold.and.
A zóna neve:
4.5.168.192.in-addr.arpa
Ha mi vagyunk az illetékesek a 192.168.5.0 hálózatban:
$TTL 3D @ SOA ns1.zold.and. hostmaster.zold.and. ( 2012032301 8H 2H 3W 1D) NS ns1.zold.and. 4 PTR elso.zold.and. 5 PTR masodik.zold.and.
A zóna neve:
5.168.192.in-addr.arpa
$TTL 3D @ IN SOA ns1.zold.and. hostmaster.zold.and. ( 2012032301 8H 2H 3W 1D) IN NS ns1.zold.and. IN MX 10 mail.zold.and. IN A 192.168.5.4 ns1 IN A 192.168.5.4 iskolazo IN A 192.168.5.4 mail IN A 192.168.5.4 www IN CNAME iskolazo ftp IN CNAME iskolazo irc IN CNAME iskolazo
Ha szerverünk illetékes domainek számára, de rekurzív feloldást nem szeretnénk, akkor a következő beállítások kellenek:
allow-query { any; }; recursion no;
Ha a rekurzió engedni kell valahol, akkor ezekhez hasonlóan tehetjük meg:
allow-recursion { 192.168.5/24; }; allow-recursion { 10.0/16; }; allow-recursion-on { 192.168.2.3; };
Lehetővé teszi, egy névszerveren rekordok hozzáadását, elvételét a zónafájl frissítése közben. Például dinamikus IP esetén jól jöhet.
Erre való az nsupdate parancs:
nsupdate
Az nsupdate a dnsutils csomagban található.
A következő példában egy .and toplevel domainnek nézzük meg egy domain hierarchia kialakítását.
options { directory "/etc/bind/zones"; }; zone "." { type master; file "root.zone"; allow-transfer { none; }; };
$TTL 2d . IN SOA ns.root. hostmaster.ns.root. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Nagative Cache TTL . NS ns.root. ns.root. A 10.30.20.1 $ORIGIN and. @ NS a.and. a.and. A 10.30.20.2
options { directory "/etc/bind/zones"; recursion yes; allow-query { any; }; version "not currently available"; }; zone "and" { type master; file "and.zone"; allow-transfer { none; }; }; zone "10.in-addr.arpa" { type master; file "10.rev"; };
$TTL 2d @ IN SOA a.and. hostmaster.a.and. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL and. NS a.and. a.and. A 10.30.20.2 $ORIGIN piros.and. @ NS ns.zold.and. ns.zold.and. A 10.30.20.3 $ORIGIN zold.and. @ NS ns ns A 10.30.20.3
$ORIGIN 10.in-addr.arpa. $TTL 2d @ SOA ns.zold.and. hostmaster.zold.and. ( 20170106 3h 15m 1w 2d ) @ NS ns.zold.and. 3 PTR ns.zold.and.
options { directory "/etc/bind/zones"; recursion yes; allow-query { any; }; }; zone "piros.and" { type master; file "piros.and.zone"; allow-transfer { none; }; }; zone "zold.and" { type master; file "zold.and.zone"; allow-transfer { none; }; }; zone "10.in-addr.arpa" { type master; file "10.rev"; allow-transfer { none; }; }; zone "30.10.in-addr.arpa" { type master; file "10.30.rev"; allow-transfer { none; }; }; zone "20.30.10.in-addr.arpa" { type master; file "10.30.20.rev"; allow-transfer { none; }; }; zone "in-addr.arpa" { type master; file "root.rev"; allow-transfer { none; }; };
$ORIGIN 20.30.10.in-addr.arpa. $TTL 2d @ SOA ns.zold.and. hostmaster.zold.and. ( 2017010600 3h 15m 1w 2d ) @ NS ns.zold.and. @ PTR ns.zold.and. 3 PTR ns.zold.and. 4 PTR ns.zold.and.
$ORIGIN 30.10.in-addr.arpa. $TTL 2d @ SOA ns.zold.and. hostmaster.zold.and. ( 2017010600 3h 15m 1w 2d ) @ NS ns.zold.and. @ PTR ns.zold.and.
$ORIGIN 10.in-addr.arpa. $TTL 2d @ SOA ns.zold.and. hostmaster.zold.and. ( 2017010600 3h 15m 1w 2d ) @ NS ns.zold.and. 30 NS ns.zold.and. @ PTR ns.zold.and.
$TTL 2d @ SOA ns.zold.and. hostmaster.zold.and. ( 2017010600 3h 15m 1w 2d ) piros.and. NS ns.zold.and. piros.and. A 10.30.20.4
$ORIGIN in-addr.arpa $TTL 2d @ SOA ns.root. hostmaster.ns.root. ( 2017010600 3h 15m 1w 2d ) @ NS ns.root. $ORIGIN 10.in-addr.arpa @ NS ns.zold.and.
. 3600 NS ns.root. ns.root. 3600 A 10.30.20.1
$ORIGIN zold.and. $TTL 2d @ SOA ns.zold.and. hostmaster.zold.and. ( 2017010600 3h 15m 1w 2d ) zold.and. NS ns.zold.and. zold.and. A 10.30.20.3 ns.zold.and. A 10.30.20.3 www CNAME zold.and.
options { directory "/etc/bind/zones"; }; zone "." { type hint; file "root.zone"; };
. 3600 NS ns.root. ns.root. 3600 A 10.30.20.1