[[oktatas:linux:dns szerver|< DNS szerver]]
====== BIND9 ======
* **Szerző:** Sallai András
* Copyright (c) 2011, Sallai András
* Szerkesztve: 2011, 2013, 2017, 2018, 2019
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Előfeltevések =====
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.
===== BIND - Berkeley Internet Name Domain =====
==== Telepítés ====
Rendelkezésre álló verzió:
* BIND9
# 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
==== Ellenőrzés ====
rndc status
systemctl status bind9
systemctl start bind9
rndc reload
systemctl status bind9
===== BIND9 konfig fájlok I. =====
/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.
==== directory opció ====
* Egy könyvtárra mutat
* A zónafájlok helye ehhez a könyvtárhoz képest ralatívan értendők.
* Esetünkben ezért így helyes:
* /var/cache/bind
==== forwarders opció ====
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 ====
Query-source address * port 53;
A 8.3 bindtól tetszőleges port megadható amelyen a bind figyeli a kéréseket.
==== Zónafájlok ====
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.
==== Rekord ====
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 |
==== Zónafájlok helye ====
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.
==== Egy zónabejegyzés ====
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
* SOA rekord
* zold.and. - a domain, amiről szó van
* SOA - a rekord neve
* zold.and. - névszerver - ez most önmagára mutat
* hostmaster.zold.and. - e-mail cím
* szériaszám
* slave frissítési idő
* slave mennyi idő múlva próbálkozzon újra, ha sikertelen volt a frissítés
* a zóna lejár ekkor
* egy feloldó (rezolver) mennyi ideig tartsa elérhetetlennek, ha elérhetetlen volt
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
==== Zóna újra ====
Á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
=== postmaster@zold.and ===
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 ====
* http://www.domain.hu/domain/regcheck
Technikai ellenőrzés
* .hu domain esetén 2 hét várakozási idő
* A regisztrátor csak akkor delegálja a toplevel szervereken a domainünket, ha lefut a regchek, azaz a technikai ellenőrzés sikeres
==== BIND újraindítása ====
Új zóna esetén:
/etc/init.d/bind9 reload
Ha változtatunk egy zónán:
rndc reload
==== MX rekord a BIND-ban ====
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
===== Ellenőrző eszközök =====
* **host** kiszolgáló lekérdezése (bind9-host csomag része)
* **dig** kiszolgáló tesztelése (dnsutils csomag része)
* **dlint** hiba ellenőrző
* **nslookup** kiszolgáló interaktív lekérdezése (dnsutils csomag része)
* **rblcheck** a domainünk rbl listán van-e?
===== dig =====
==== Kiszolgáló tesztelése ====
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
===== Postmaster ellenőrzése =====
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
===== Inverz zóna =====
==== Konfigurációs állomány ====
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
==== Zóna fájl ====
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
==== Újraindítás ====
invokde-rc.d bind9 restart
==== PTR ellenőrzése ====
Elkészültünk a beállításokkal. Ellenőrizzük, hogy a DNS szerverünk szolgáltatja-e a bejegyzést.
=== dig ===
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.
=== host ===
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.
===== Módosítás =====
Ha egy meglévő zónát módosítunk, kezdjük a sorozatszám növelésével!
===== Másodlagos szerver =====
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.
===== Biztonság =====
==== Zónaátvitelek korlátozása ====
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; };
};
==== Lekérdezések korlátozása ====
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; };
};
==== Futtatás nem root felhasználóként ====
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
===== Dokumentáció =====
apt-get install bind9-doc
ls /usr/share/doc/bind9-doc
===== Függelék =====
==== Tartománynév ====
Gyakorláshoz használható toplevel domainek:
* .suli
* .isi
* .and
Ezek sehol nem szerepelnek a világhálón.
Ezek után ilyen domaineket hozhatunk létre:
* toretlen.suli
* toretlen.isi
* toretlen.and
* kezes.suli
* kezes.isi
* kezes.and
* stb.
==== Zónaminták ====
=== Minimális zóna ===
$TTL 3D
zold.and. SOA zold.and. hostmaster.zold.and. (
2012032301
8H
2H
3W
1D)
NS zold.and.
A 192.168.5.4
=== NS rekorddal ===
$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
=== A hostnév felvétele ===
$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
=== Becenevek (aliasok) megadása ===
$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
=== Levelezés ===
$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
* Az MX rekordot az NS után vegyük fel!
* A mail.zold.and. ne alias legyen!
=== Inverz feloldás ===
$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
=== Inverz feloldás több IP esetén ===
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
=== IN osztály ===
$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
==== Illetékesség, rekurzív feloldás ====
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; };
==== Dinamikus DNS frissítés ====
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ó.
==== DNS hierarchia a gyökértől ====
A következő példában egy .and toplevel domainnek nézzük meg egy domain hierarchia kialakítását.
=== ns.root szerver -- 10.30.20.1 ===
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
=== a.and szerver 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.
=== zold.and szerver -- 10.30.20.3 ===
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.
=== isp.and szerver -- 10.30.20.5 ===
options {
directory "/etc/bind/zones";
};
zone "." {
type hint;
file "root.zone";
};
. 3600 NS ns.root.
ns.root. 3600 A 10.30.20.1