A DNS működése

A Unix/Linux szerverek üzemeltetése wikiből
A lap korábbi változatát látod, amilyen KornAndras (vitalap | szerkesztései) 2006. szeptember 14., 23:44-kor történt szerkesztése után volt.

A DNS, mint azt tudjuk, az a protokoll, ami az IP-címekhez neveket rendel, és fordítva. Ennél persze többről van szó.

Fontos fogalom: autoritatív szerver. Két megközelítés:

  • Saját magát autoritatívnak gondolja, ha rendelkezik egy olyan adatbázissal, amelyben egy zóna (~domain) tartalma megtalálható.
  • Mások autoritatívnak gondolják, ha a hierarchiában felette álló szerverek hozzá delegálnak egy domainre vonatkozó kérdéseket.

Tartalomjegyzék

1 A DNS-feloldás menete

Legyen mondjuk az a kérdés, mi a www.bme.hu IP-címe. Hogy kezdjünk neki?

Mit jelent egyáltalán az, hogy a www.bme.hu IP-címe ez és ez?

Azt, hogy van valahol egy autoritatív szerver, amelyben a www.bme.hu névnek van egy A rekordja; a rekord tartalma az IP-cím.

A feloldás a következőképpen történik:

  1. Küldünk egy query-t (kérdést) az egyik root szervernek (amelynek a címét mindenki "tudja"), amelyben megkérdezzük, hogy A? www.bme.hu.
    • Erre ő, ha tudná a választ, mondhatná, hogy "hohó, ídös fiam, a www.bme.hu A rekordja nem más, mint 152.66.115.35".
    • De nem tudja, mert az ő feladata nem az, hogy minden gép címét tudja, hanem az, hogy tudja, kit kell megkérdezni.
    • Ezzel együtt fontos tudnunk, hogy akár meg is mondhatná a választ; ez a DNS egyik gyenge pontja. Bővebben később.
  2. A root szerver azt mondja, hogy ő nem tudja, de kérdezzük meg valamelyik .hu szervert, amelyeknek a nevét meg is mondja.
    • Emellett megmondja a nevekhez tartozó IP-ket is, ez a glue.
    • Ha nem mondaná meg, esetleg bajban lennénk, mert a .hu szerverek neveit ugyan tudjuk, de a nekik küldendő DNS queryt az IP-címükre kell küldeni, amit valahonnan meg kell tudni...
  3. Megkérdezzük valamelyik .hu szervertől, mondjuk az ns.nic.hu-tól (193.239.148.62), hogy A? www.bme.hu.
    • Erre ő, ha tudná a választ, mondhatná, hogy "hohó, ídös fiam, a www.bme.hu A rekordja nem más, mint 152.66.115.35".
    • De nem tudja, mert az ő feladata nem az, hogy minden .hu alatti gép címét tudja, hanem az, hogy tudja, kit kell megkérdezni.
    • Ezzel együtt fontos tudnunk, hogy akár meg is mondhatná a választ; ez a DNS egyik gyenge pontja. Bővebben később.
  4. Az ns.nic.hu azt mondja, hogy ő nem tudja, de kérdezzük meg valamelyik bme.hu szervert, amelyeknek a nevét meg is mondja.
    • glue mint fent.
  5. Megkérdezzük valamelyik bme.hu szervertől, mondjuk a nic.bme.hu-tól (152.66.115.1), hogy A? www.bme.hu.
  6. A nic.bme.hu benyúl az adatbázisába, és azt mondja, hogy "hohó, ídös fiam, a www.bme.hu A rekordja nem más, mint 152.66.115.35, de ezt legfeljebb 4 óráig jegyezd meg!".
    • Merthogy minden DNS-rekordnak van egy TTL értéke, ennyi ideig szabad cache-elni.

Lássuk ugyanezt a parancssorból.

Előszőr használjuk a hagyományos mosóport, a host(1) programot:

chardonnay:~% host -vvv -t a www.bme.hu 198.41.0.4        
Trying "www.bme.hu"
Using domain server:
Name: 198.41.0.4
Address: 198.41.0.4#53
Aliases: 

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59973
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 6

;; QUESTION SECTION:
;www.bme.hu.    IN   A

;; AUTHORITY SECTION:
hu.            172800 IN NS    NS.NIC.hu.
hu.            172800 IN NS    NS2.NIC.FR.
hu.            172800 IN NS    SUNIC.SUNET.SE.
hu.            172800 IN NS    NS1.NIC.hu.
hu.            172800 IN NS    NS2.NIC.hu.
hu.            172800 IN NS    NS3.NIC.hu.

;; ADDITIONAL SECTION:
NS.NIC.hu.     172800 IN A 193.239.148.62
NS2.NIC.FR.    172800 IN A 192.93.0.4
SUNIC.SUNET.SE.  172800 IN A   192.36.125.2
NS1.NIC.hu.    172800 IN A 193.239.149.3
NS2.NIC.hu.    172800 IN A 193.6.16.1
NS3.NIC.hu.    172800 IN A 195.70.35.250

Received 251 bytes from 198.41.0.4#53 in 114 ms

Látható, hogy megtudtuk, merre kell tovább érdeklődnünk, de magát a választ nem. Nézzük tovább:

chardonnay:~% host -vvv -t a www.bme.hu 193.239.148.62
Trying "www.bme.hu"
Using domain server:
Name: 193.239.148.62
Address: 193.239.148.62#53
Aliases: 

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50701
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 3, ADDITIONAL: 3

;; QUESTION SECTION:
;www.bme.hu.    IN   A

;; AUTHORITY SECTION:
bme.hu.        86400 IN NS ns.bme.hu.
bme.hu.        86400 IN NS nic.bme.hu.
bme.hu.        86400 IN NS ns2.pantel.net.

;; ADDITIONAL SECTION:
ns.bme.hu.     86400 IN AAAA   2001:738:2001:8001::2
nic.bme.hu.    86400 IN A  152.66.115.1
nic.bme.hu.    86400 IN AAAA   2001:738:2001:2001::2

Received 163 bytes from 193.239.148.62#53 in 2 ms

Közeledünk, közeledünk. Végül:

chardonnay:~# host -vvv -t a www.bme.hu 152.66.115.1  
Trying "www.bme.hu"
Using domain server:
Name: 152.66.115.1
Address: 152.66.115.1#53
Aliases: 

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13192
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 5

;; QUESTION SECTION:
;www.bme.hu.    IN   A

;; ANSWER SECTION:
www.bme.hu.    14400 IN A  152.66.115.35

;; AUTHORITY SECTION:
bme.hu.        14400 IN NS ns2.pantel.net.
bme.hu.        14400 IN NS ns.bme.hu.
bme.hu.        14400 IN NS nic.bme.hu.

;; ADDITIONAL SECTION:
ns.bme.hu.     14400 IN A  152.66.116.1
ns.bme.hu.     14400 IN AAAA   2001:738:2001:8001::2
nic.bme.hu.    14400 IN A  152.66.115.1
nic.bme.hu.    14400 IN AAAA   2001:738:2001:2001::2
ns2.pantel.net.  35857 IN  A   212.24.160.1

Received 211 bytes from 152.66.115.1#53 in 1 ms

Most próbáljuk meg ugyanezt egy kevésbé ismert eszközzel, a dnsq nevűvel (a djbdns csomagban van):

chardonnay:~% dnsq a www.bme.hu 198.41.0.4            
1 www.bme.hu:
251 bytes, 1+0+6+6 records, response, noerror
query: 1 www.bme.hu
authority: hu 172800 NS ns.nic.hu
authority: hu 172800 NS ns2.nic.fr
authority: hu 172800 NS sunic.sunet.se
authority: hu 172800 NS ns1.nic.hu
authority: hu 172800 NS ns2.nic.hu
authority: hu 172800 NS ns3.nic.hu
additional: ns.nic.hu 172800 A 193.239.148.62
additional: ns2.nic.fr 172800 A 192.93.0.4
additional: sunic.sunet.se 172800 A 192.36.125.2
additional: ns1.nic.hu 172800 A 193.239.149.3
additional: ns2.nic.hu 172800 A 193.6.16.1
additional: ns3.nic.hu 172800 A 195.70.35.250

chardonnay:~% dnsq a www.bme.hu 193.239.148.62
1 www.bme.hu:
163 bytes, 1+0+3+3 records, response, noerror
query: 1 www.bme.hu
authority: bme.hu 86400 NS ns.bme.hu
authority: bme.hu 86400 NS nic.bme.hu
authority: bme.hu 86400 NS ns2.pantel.net
additional: ns.bme.hu 86400 28 \040\001\0078\040\001\200\001\000\000\000\000\000\000\000\002
additional: nic.bme.hu 86400 A 152.66.115.1
additional: nic.bme.hu 86400 28 \040\001\0078\040\001\040\001\000\000\000\000\000\000\000\002

chardonnay:~% dnsq a www.bme.hu 152.66.115.1  
1 www.bme.hu:
211 bytes, 1+1+3+5 records, response, authoritative, weird ra, noerror
query: 1 www.bme.hu
answer: www.bme.hu 14400 A 152.66.115.35
authority: bme.hu 14400 NS ns2.pantel.net
authority: bme.hu 14400 NS ns.bme.hu
authority: bme.hu 14400 NS nic.bme.hu
additional: ns.bme.hu 14400 A 152.66.116.1
additional: ns.bme.hu 14400 28 \040\001\0078\040\001\200\001\000\000\000\000\000\000\000\002
additional: nic.bme.hu 14400 A 152.66.115.1
additional: nic.bme.hu 14400 28 \040\001\0078\040\001\040\001\000\000\000\000\000\000\000\002
additional: ns2.pantel.net 35704 A 212.24.160.1

Talán látszik, hogy ennek az outputja scriptből könnyebben feldolgozható.

2 A DNS rekordtípusai

  • A: név->IP
    • www.bme.hu. IN A 152.66.115.35
  • PTR: IP->név
    • 35.115.66.152.in-addr.arpa. IN PTR torpapa.eik.bme.hu.
    • Azért így, hogy hierarchikusan lehessen delegálni,
  • MX: melyik szerver fogadja a domainbe címzett leveleket
    • bme.hu. IN MX 10 nic.bme.hu.
  • NS: ki nameservere egy domainnek
    • bme.hu. IN NS ns.bme.hu.
  • SOA: a domain "tulajdonságai"
    • bme.hu. IN SOA nic.bme.hu. hostmaster.bme.hu. 2006091400 43200 14400 2592000 86400
    • elsődleges nameserver, hostmaster emailcíme, sorozatszám, refresh time, retry time, expire time, minimum time.
      • refresh time: ilyen gyakran frissítik magukat a secondaryk (vagy NOTIFY hatására, vagy ...)
      • retry time: ennyi időnként próbálkozik egy secondary, ha elsőre nem sikerült a frissítés
      • expire time: ha ennyi ideig nem volt kapcsolat a primaryval, a secondary tekintse elavultnak az adatokat és tagadja meg a választ
      • minimum time: korábban az alapértelmezett TTL, ma az NXDOMAIN (nincs ilyen cím) TTL-je
  • TXT: megjegyzés
  • CNAME: átirányítás; minden, erre a névre vonatkozó queryvel kapcsolatban l. a másik megadott nevet.
    • www.math.bme.hu. IN CNAME proof.math.bme.hu.
  • HINFO: hardware info
    • Ma már nem használják.
  • stb.

3 A DNS-szolgáltatások típusai

A DNS igazából több, jól elkülöníthető szolgáltatás összessége. Ezek:

  • Autoritatív DNS.
Az autoritatív DNS-szervernek van egy adatbázisa, és az abban található adatokra vonatkozó kérdésekre válaszol. Más (pl. rekurzív) kérdésekre nem.
  • Rekurzív, cache-elő DNS.
Az ilyen szerver a DNS-fa rekurzív bejárását végzi el a kliensek számára, és az eredményeket cache-eli a gyorsabb kiszolgálás érdekében.
  • Zónatranszfer (AXFR).
Ez a szerver az autoritatív szerver adatbázisának replikálását végzi.
  • Resolver stub library.
Olyan függvénykönyvtár, amelyben a DNS-sel kapcsolatos funkciók vannak megvalósítva, hogy ne kelljen minden programban egyenként implementálni. Elsősorban rekurziv szerverrel kell tudnia szót érteni.

Ezekből az első hármat a BIND és a rá hasonlítani akaró szoftverek a közelmúltig összemosták.

4 Gyakori gondok a DNS-sel

  • Poisoning
    • Mára már nem igazán gond
  • Glue hiánya
    • foo.net IN NS ns.bar.com; bar.com IN NS ns.foo.net -> egyik se elérhető -> használjunk olyan nameservert, ami benne van abban a domainben, amire autoritatív, így glue-val átadható a címe is, nemcsak a neve
    • Akkor is gond, ha nem ér körbe: sok query kell a feloldáshoz
  • CNAME-láncok
  • Lustaságból elhelyezett joker-bejegyzések (pl. *.com)

5 Ajánlott irodalom

Személyes eszközök