[[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