[[oktatas:linux:dns szerver|< DNS szerver]]
====== DNS szerver ======
* **Szerző:** Sallai András
* Copyright (c) 2011, Sallai András
* Szerkesztve: 2011, 2013, 2017, 2018
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Előfeltevések =====
Az iskolapélda bemutatásához kitaláltam egy olyan legfelső szintű tartománynevet (toplevel domaint),
amelyet a valóságban nem használnak:
.and
A .hu, .eu, .org, stb. helyett ezt fogjuk használni. Saját tartománynevünk a "zold" lesz, vagyis egy ilyen domaint szeretnénk
beállítani:
zold.and
A beállításokhoz a szerverünket el kell nevezni valahogy. Ez lesz a gépünk neve (host név vagy hostname).
Ennek beállításait lásd a [[oktatas:linux:hálózat#hosztnév|hostnév beállítása]] fejezetben.
A gépnevünk a példában:
iskolazo
A szerverünket tehát így is el lehet majd érni:
iskolazo.zold.and
Feltételezzük, hogy van egy fix IP címünk, amelyen állandóan elérhetjük majd az általunk konfigurált szervert.
Az iskolapéldában egy belső IP címet fogunk ehhez használni, vagyis éles szervereken ilyen
nem lesz. Legyen ez a példabeli IP cím:
192.168.5.4
Ez lesz a szerverünk IP címe.
===== Domain Name System =====
A DNS az IP cím és tartománynév összerendelések feloldására kitalált rendszer.
Hierarchikus felépítésű, osztott adatbázisból áll.
Az Interneten névszerverek százezrei, nevek millióit szolgálják ki.
Kezeli a redundanciát és jó hibatűrő képességekkel bír, és kiszolgál
a fő feladata mellett néhány más információt is.
Létrehozásának célja a kényelem volt. A számítógépeket IP címekkel azonosítjuk,
azok helyett viszont neveket szeretünk inkább beírni.
Ha nem lennének tartománynevek, akkor egy weboldal eléréséhez azt kellene
begépelnem, például:
195.199.1.5
Mennyivel jobb e helyett egy tartománynevet gépelni.
==== Hosts fájl ====
A DNS előtt is volt névfeloldás. Ezeket //hosts// fájlokkal oldották meg.
Konkrétan ez volt a fájl neve. Ezek a hosts fájlok ma is megtalálhatók
minden gépen és használhatók is.
Egy ilyen nevű állományban tárolták az IP címeket és a hozzájuk
tartozó neveket. Ezek az állományok azonban idővel igen nagyra nőttek.
Nagyon sűrűn kellett változtatni azokat. A hálózatok növekedése miatt
egyre több ember, egyre gyakrabban töltötte le a fájlokat, így szükségszerűvé
vált egy újabb megoldás.
195.199.200.48 jupiter.zold.and
180.123.5.24 mars.sarga.and
210.100.205.8 venus.piros.and
208.24.243.238 pluto.lila.and
==== DNS ====
A DNS rendszer megalkotásában Paul Mockapetris játszotta a legnagyobb szerepet, 1983-ban, amikor az ISI (Information Science Institute) munkatársa volt.
==== Feladatuk általánosan ====
A DNS szerverek a nevek feloldását hálózati kommunikációval oldják meg.
A feladatait két részre lehet osztani:
* láttatás
* látás
==== Illetékesség fogalma ====
Autoritatív - A szerver illetékes egy név dolgában.
Vagyis az adott szerveren van beállít "master"-ként
az adott domain.
==== A DNS szerkezete ====
A DNS hierarchikus felépítésű. Legfelül a gyökér van, amelyet több számítógép
képvisel. A gyökér alatt találhatók a top-level domainek. Ezek a hu, edu, org, com, stb.
A domainek a példában a nyf, a szit, a bme, az debian és kernel.
{{:oktatas:linux:dns_szerver:domain-nev-hierarchia.png|}}
Kérdezzük le a gyökérszervereket:
dig . ns
* http://www.root-servers.org/
==== Top-level ====
Legfelső szintű domain.
Az ISO-3166-1 szabvány alapján:
* http://hu.wikipedia.org/wiki/ISO_3166-1
* gov - kormányzati szervek
* edu - oktatási intézmények Amerikában
* org - non-profit szervezetek
* net - hálózati szervezetek
* mil - katonai szervezetek
* arpa - inverz zóna és a régi Arpanet egyes részei
==== Zóna ====
* A név-fa zónákra oszlik
* Egy zóna a fa egyben kezelt része (pl. az összes TLD-t kezelő root)
* Egy zóna az illetékes szerveren általában egy fájl.
==== Elsődleges - másodlagos ====
* Elsődleges szerver -> zóna adminja változtatja
* Másodlagos szerver -> tükrözzük az elsődlegesről
==== Delegálás ====
A zóna egyes darabjainak kezelését más szerverekre bízzuk.
Pl: én kezelem a intezet.hu zónát. Az osztaly1 nevű
aldomaint akar a cég léterehozni, és ezt az osztály1
osztályon levő szerverről akarják kezelni. Akkor a
szerveremen delegálom osztaly1.intezet.hu zónát.
Az osztály1 gazdája felelőse és teljes ura lesz ennek az aldomainnek.
A regisztrátoroknál bejegyzett fődomainek is tulajdonképpen delegált domainek.
A példánkban szereplő zold.and domain alá szeretne a barátunk egy barat.zold.and
domaint, amelyet ő fog kezelni saját szerverén. Ekkor a barat.zold.and domaint
delegálom számára.
==== Több színtű névmegadás ====
* Többszintű névmegadás delegálással lehetséges
* De nem feltétele!
* Magam is hozhatok létre olyan domaineket, amelyek pontot tartalmaznak:
* osztaly.intezet.hu
==== FQDN (Fully Qualified Domain Name) ====
A DNS rendszer hierarchikus felépítéséből következi, hogy minden név egyedi.
| Hierarchia -> | Minden név egyedi |
A top-level domain alatt megadok egy fő domaint, azok alatt pedig újabb
aldomaineket hozhatok létre. Azok alatt pedig megint újabb domainek lehetnek.
Az aldomainek így a zónák egy szegmensét jeltik. Az egyes szegmenseket
ponttal (.) tagolom, mint a fenti példánkban is:
iskolazo.zold.and
vagy
barat.zold.and
vagy
info.zold.and
vagy
prog.info.zold.and
vagy
prog.and.info.zold.and
vagy
zold.and.zold.and
A zónaleírásokban, ha egy zold.and zónában vagyok, akkor a szegmensekre való
hivatkozások során, nem kötelező zold.and kírása. Például írhatom ezeket a fentiek helyett:
iskolazo
barat
info
prog.info
prog.and.info
zold.and
Vegyük észre az utóbbi példában, ha leírom, hogy zold.and
akkor nem világos, hogy az "and" most top-level domain vagy
aldomain. Ezért ha top-level domainről van szó, akkor a végén ezt
egy ponttal (.) szokás jelezni.
zold.and.
Ha nem teszem ki pontot, akkor zold.and domain alatt lévő zold.and aldomainekről van szó.
Így egyértelműen jelezzük, hogy a teljes domaint képviselő nevet adom meg, vagy csak
egy aldomaint.
Láthattuk, hogy az .and végződés nem garantálja, hogy amit leírok annak az utolsó domaine
top-level.
A top-level domainekkel a végén megadott domaint FQDN-nek nevezzük. A fentiekből pedig
megtanultuk, hogy az FQDN-t mindig úgy jelezzük, hogy a domain végére egy pontot teszünk,
jelezve, hogy a teljse domaint kiírtuk.
Ezek utána a Fully Qualified Domain Name leghelyesebb fordítása talán "**teljes domaint képviselő név**".
==== Domain név megadás ====
A domain névben szerepelhetnek a latin ábécé angol betűi, számok és kötőjel:
* Latin ábécé angol betűi [a-z]
* Számjegyek [0-9]
* Kötőjel [-]
**Aláhúzás nem** lehet a domain névben.
Ma már használható ékeztes domain is. Ékezetes domain esetén egy szabály alapján meghatározott alakban írjuk a domaint,
vagyis le kell kódolnunk az ékezetes domain nevet. A kódolást nem kell nekünk elvégezni, az alábbi
weblapon találunk hozzá segítséget:
* http://www.domain.hu/domain/ekezetes.html
==== Inverz feloldás (reverz) ====
=== IP címből domain név ===
A teljesség igénye megkívánja, hogy ne csak a domain nevekből legyünk képesek IP címeket feloldani, hanem
fordítva is. Ezt nevezzük inverz feloldásnak.
=== Biztonság ===
Az inverz feloldás persze nem csak a teljesség igényét szolgálja. Ma már a spamek miatt a
levelezőszervereken követelmény, hogy ne fogadjunk el olyan szerverről leveleket,
amelyeknek az IP címe nem oldható fel domain névvé. Sőt, ha kaptunk egy domain nevet,
az legyen valós, vagyis a visszakapott doman név is feloldható legyen IP címmé.
=== Az inverz zóna neve ===
Ha adott az Interneten egy IP címünk, például 195.166.85.2, akkor a zóna nevünk
amit beállítunk persze nem ez lesz. Először az IP címünknek vesszük az értékes
részeit, majd leírjuk fordított sorrendben, a végére pedig a "in.addr-arpa" nevet fűzöm.
A 195.166.85.2 IP címből tehát ez lesz:
2.85.166.195.in-addr.arpa
| 195.166.85.2 | -> | 2.85.166.195.in-addr.arpa |
Ha fenti iskolapéldánknál akarunk maradni, akkor:
| 192.168.5.4 | -> | 4.5.168.192.in-addr.arpa |
Ha a 192.168.5.0/24 tartományunk van, amiért én felelek, akkor
az egész tartományt megadhatom, ha csak a hálózat címét adom meg:
| 5.168.192.in-addr.arpa |
Ezek után a zónafájlban több IP címet is megadhatok:
| 1 PTR elso.zold.and |
| 2 PTR masodik.zold.and |
| 3 PTR harmadik.zold.and |
IPv6 esetén a Google DNS szervere példaként:
host 2001:4860:4860::8888
8.8.8.8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.8.4.0.6.8.4.1.0.0.2.ip6.arpa domain
name pointer google-public-dns-a.google.com.
==== Névfeloldás menete ====
* pluto.bme.hu címet keressük
* Gépen van egy rezolver (feloldó program)
* Nem maga végzi a feloldást, csak kéri egy DNS szervertől
* Telepítéskor megadtunk két DNS szervert
* IP címet adunk meg
DNS kérés : pluto.bme.hu
* Az „én DNS szerverem” válaszol azonnal
* A gyökérszerverhez fordul megtudja hu zónáért illetékes szerverek listáját
* Az újabb névszervertől az „én DNS szerverem” most azt kérdezi ki a felelős a bme zónáért.
* Az újabb névszervertől az „én DNS szerverem” azt kérdezi hol található a pluto.
* Ezt nevezzük REKURZÍV FELOLDÁS-nak
=== Rekurzív feloldás ===
DNS-es szerverek nem végeznek minden kliensnek ilyen feloldást, csak a konfigurációban megadottaknak.
==== Cache -- TTL ====
* A névszerverek tárolják egy ideig a feloldást, hogy ha legközelebb kérik tőle azonnal tudja a választ
* hálózati forgalom csökkenése
* gyors névfeloldás
* A tárolás idejét a zóna adminisztrátora adja meg a zóna leírásánál
* TTL – Time To Live
* Ennyi másodpercig tárolják a cache szerverek az adatokat
==== Névszerver felosztása ====
* Illetékes, Autoritatív, láttató szerver
* Nem illetékes, látó szerver
* Továbbító (forwarder) - más szerverek számára gyorsítótárat szolgáltat
* Slave - Csak forwardert használ (mert például nem lát ki a Internetre)
* Nem keverendő az illetékes slave szerverrel
* Caching only (hint) - Csak gyorstáraz, sosem illetékes
==== Lame delegálás ====
Ha valahova delegálunk egy nevet, akkor azt
az ottani adminisztrátorral is meg kell
beszélni, hogy azt folyamatosan szolgáltassa.
Ha ez nem történik meg, akkor beszélünk
lame delegálásról.
===== DNS adatbázis rekordtípusai =====
A következőkben áttekintjük a DNS szerverekben használt rekordokat. A rekord neve előtt megadható, hogy milyen típusú
hálózatot használunk, például IN vagyis InterNet, de az alapértelmezett, ennek megadása nem kötelező.
* SOA – Start Of Authority
* A -- Address
* AAAA - Address
* NS – Name Server
* Glue rekord – speciális A rekord
* CNAME – Canonical NAME
* MX – Mail eXchanger
* TXT – TeXT
* HINFO – Hardware INFOrmation
* PTR – PoinTeR
=== SOA - Start of Authority rekord, zóna kezdő rekord ===
A SOA rekord adja meg egy zónára vonatkozó közös információkat.
zold.and. SOA iskolazo.zold.and.
hostmaster.zold.and. (
1999093001 ; Szériaszám - Serial nr.
86400 ; Frissíts gyakorisága - Refresh
1800 ; Újrapróbálkozás - Retry
604800 ; Lejár - Expire
43200) ;TTL
=== SOA rekord – első sor ===
zold.hu. SOA iskolazo.zold.and hostmaster.zold.and
* zóna neve
* elsődleges névszerver
* emailcím
úgy kapjuk, hogy az első pont karaktert (amit nem
előz meg egy (backslash \) at jelre (@) cseréljük
=== SOA rekord – második sor ===
2006091801 ; Serial nr.
A slave szerverek ellenőrizhetik, hogy a náluk lévő adatok nem avultak-e el.
Az elsődleges zóna adminja minden javításkor növeli ezt a számot.
Szokás: Akt. Dátum plusz a mai javítás száma két számjegyel: ÉÉÉÉHHNNVV
=== SOA rekord – harmadik sor ===
86400 ; Refresh
Másodpercben megadott szám
Frissítési idő
A Slave szervernek mennyi időnként kell megnézni, hogy nem avultak-e el az adatai
=== SOA rekord – negyedik sor ===
1800 ; Retry
Másodpercben megadott szám
Ha frissítés nem sikerült mennyi idő múlva próbálkozzunk újra.
=== SOA rekord – ötödik sor ===
604800 ; Expire
Másodpercben megadott szám
Ha nem sikerül a masterrel kommunikálni
akkor ennyi ideig szolgáltatják a világnak a zónát.
=== SOA rekord – hatodik sor ===
43200 ; TTL
Másodpercben megadott szám
Azt kérjük más névszerverektől, hogy legalább ennyi ideig szolgáltassák az zónát.
==== TTL értékek ====
Fontos az ésszerű beállítás.
Szokásos értékek:
| refresh | 86400 | 1 nap |
| retry | 3600 | 1 óra |
| expire | 604800 | 1 hét |
| TTL | 86400 | 1 nap |
Ha gyors változásvárható a TTL-et érdemes kicsire venni.
=== TTL értékek könnyebben ===
A 8-as változatú Bindtól használhatók a köv. formátáumok:
1W2D3H
| W | egy hét |
| D | egy nap |
| H | egy óra |
==== SOA előtti TTL ====
A SOA rekord előtti TTL, a zóna alapértelmezett TTL értéke.
Megmondja az egyes zóna egyes rekordjai meddig érvényesek.
Az egyes rekordokban ezt felülírhatjuk.
==== Hiba ====
Ha az expire idő nem nagyobb mint a refresh akkor a másodlagos szerver nem fogja szolgáltatni az adatokat.
==== A rekord ====
Az "A" rekorddal rendelünk a domain névhez IP címet.
Legyen például egy pandora.bme.hu domin:
pandora.bme.hu. A 195.199.17.8
Nem kötelező megadni a teljes FQDN-t:
pandora A 195.199.17.8
Mivel adott zónában, vagyunk, a többi egyértelmű.
Ha mégis FQDN-et adunk meg akkor pont a végén!
Az iskolapéldánkban ez így néz ki:
iskolazo.zold.and. A 192.168.10.1
==== AAAA rekord ====
IPv6-os cím
iskolazo.zold.and. AAAA 2001:db8:85a3:8d3:1319:8a2e:370:7348
==== NS rekord ====
A névszerverek címe Kettő szokott lenni:
Egyik maga a master szerver, a másik a Slave szerver
Pl:
NS iskolazo.zold.and.hu.
NS barat.lila.and.
=== Névszerver ===
* Ma már kötelező két névszerver megadása
* A két DNS szervernek különböző hálózatban kell lennie!
==== Glue rekord ====
Glue rekord -– Idegen (ragadvány) A rekord
A delegált zóna egyik névszervere az adott zónában van. Pl.:
A gep.osztaly.valami.hu -nak saját DNS szervere van,
mégis meg kell adni ezt feljebb a valami.hu
zónában is!
* Különben csapdába kerülünk!
* Konkrétan:
gep.osztaly A 195.166.12.1
Az iskolapéldánkban ez például így nézhet ki:
barat.zold.and A 192.168.5.4
==== CNAME rekord ====
A hostnak becenevet adhatunk vele.
Pl:
www CNAME gep
gep.valahol.hu ekkor így is elérhető:
www.valahol.hu
Iskolapéldánkban:
www CNAME iskolazo
vagy egy ftp:
ftp CNAME iskolazo
==== MX rekord ====
A domainbe érkező leveleket fogadó szerver címe
MX 10 mail.zold.and.
MX 20 mail2.zold.and.
A számoknak akkor van jelentősége, ha több (mint itt 2)
mail szerver várja a leveleket. Egyik elsődleges. A másik
csak akkor fogadja a leveleket, ha az első nem működik.
A szám a prioritást adja meg.
==== TXT rekord ====
Tetszőleges szöveget írhatunk ide. Megjegyzés stb.
==== HINFO rekord ====
Hardverről szokás (lehetne szokás, nem szokás) írni ide információkat.
==== PTR rekord ====
Az inverz zónákat állítjuk be a PTR rekord segítségével.
* Cím név feloldásra -> inverz feloldás
* Az in-addr.arpa domain alá tartozó ág szolgálja a IP címek feloldását
* Pl: 8.2.166.195.in-addr-arpa PTR valami.hu
Az iskolapélda:
4.5.168.192.in-addr.arpa PTR zold.and
===== Domaint akarunk magunknak =====
Az alábbiakban sorra vesszük, milyen lépéseket kell megtennünk, ha szeretnénk
magunknak egy saját tartománynevet az Interneten.
* Meg kell néznünk nem használja-e valaki már a kívánt domain nevet.
* Ehhez használjuk a következő oldalt:
* http://domain.hu
* Slave szerver szolgáltatót keresünk
* Regisztrátort keresünk
* Ha a mastert mi szolgáltatjuk: beállítjuk a szerverünkön
* Várakozási lista -> 2 hét
* Ha nincs Slave szerver a regisztrátor nem csinálja meg a delegálást!
* .hu domainre gondolok
===== Függelék =====
==== DNS szerver programok ====
* bind9
* pdns-server (PowerDNS)
* pdns-tools
* pdns-recursor
* pdns-backend-ldap
* pdns-backend-mysql
* pdns-backend-opendbx
* pdns-backend-pgsql
* pdns-backend-sqlite3
* pdns-backend-tinydns
* yadifa
* maradns
* knot
* nsd
* gdnsd
DNS proxy
* dnsproxy
Feloldók:
* unbound
==== Nyitott DNS szerverek ====
* 1.1.1.1 Cloudflare
* 8.8.8.8 Google
* 8.8.4.4 Google
* 9.9.9.9 IBM
* 208.67.222.222
* 208.67.220.220
* 80.80.80.80
* 80.80.81.81
* 77.88.8.8
* 77.88.8.1
* 77.88.8.88
* 77.88.8.2
* 77.88.8.7
* 77.88.8.3