DNS Queries (1)

Vom începe astăzi să vorbim despre DNS queries (interogări DNS). Dar înainte de asta, hai să mai discutăm un pic despre protocolul DNS.

După cum bine ştie toată lumea, protocolul DNS funcţionează by default pe portul 53. Pentru a elimina problemele legate de performanţa procesului, interogările DNS (queries) funcţionează pe portul 53 (UDP) cu o limită de 512 bytes a block-size-ului. Dacă, de exemplu, răspunsul la un query depăşeşte 512 bytes, TCP-ul este folosit. Dacă interogările şi răspunsurile folosesc UDP 53, operaţiile de mentenanţă ale zonelor folosesc portul TCP 53 din motive de siguranţă.

Interogările DNS

Raspunsul la DNS queries este una dintre cele mai importante misiuni ale unui name server. De unde pot veni aceste interogări? De la un resolver local sau remote şi de la un alt name server ce acţionează în numele unui alt resolver. Resolver-ul (sau stub resolver-ul) este o librărie software instalată pe orice PC şi care este folosită pentru traducerea request-ului unui user sau a unei aplicaţii într-un query care merge la name server. Cum ar suna un query de ăsta despre care tot vorbim? Ceva de genul: “Care este adresa IP a web site-ului www.alexbobica.com?” Resolver-ul va folosi un server DNS local pe post de “răspunzător”.

Ar urma acum întrebarea firească: “De unde ştie stub resolver-ul ce name server să interogheze?” Păi lista cu servere DNS folosite de resolver este obţinută în Windows din Network Properties iar în *nix din /etc/resolv.conf.

Un name server poate avea fişiere zonă care îl definesc ca şi autoritar pentru anumite domenii sau slave pentru altele.

Există trei tipuri de interogări DNS:

1. Interogări recursive: un querry recursiv este atunci când un name server care îl primeşte face toată munca pentru a returna răspunsul corect. “Munca” de mai sus presupune şi interogarea la rândul lor a altor servere DNS de către “inculpatul” nostru. DNS serverele nu trebuie neapărat să suporte acet tip de interogări.

2. Interogări nerecursive: dacă name serverul deţine răspunsul la intergoarea iniţială îl va livra “solicitantului”. Dacă nu, va returna orice informaţie care poate să fie folositoare, dar nu va interoga la rândul său alte name servere, aşa cum proceda în cazul interogărilor recursive. Taote name serverele trebuie să suporte querie-urile iterative (nerecursive).

3. Interogări inverse: Userul doreşte să afle numele de domeniu în funcţie de un RR. Serverele DNS nu prea suportă acest feature. Şi nu confundaţi reverse mapping-ul cu acet tip de interogare. Reverse mapping-ul foloseşte primele două modalităţi descrise mai sus şi domeniul special IN-ADDR.ARPA.

Vom vedea acum, mai pe larg, exact cum stă situaţia în cazul querie-urilor recursive.

Un querry recursiv este acela căruia un name server îi livrează un răspuns complet, sau îi dă o eroare. Serverele DNS nu trebuie să suporte neapărat acest tip de query. Resolver-ul negociază folosirea serviciului recursiv prin bits-ii puşi în headerele interogărilor. Sunt 3 răspunsuri posibile livrate de un name server în cazul unei interogări recursive, şi anume:

- răspunsul la solicitare plus orice CNAME folosit. Acest răspuns va indica şi dacă datele livrate sunt autoritare sau cached (neautoritare);
- o eroare care indică inexistenţa domeniului sau a hostului. Acest răspuns poate conţine şi aliasuri înspre hostul care nu există;
- o eroare temporară, survenită de exemplu în urma imposibilităţii de a accesa alte name servere.

Haideşi să vedem exact care sunt paşii făcuţi de un name server care nu este autoritar pentru alexbobica.com şi suportă querie-urile recursive. Să zicem că primeşte interogarea următoare: “Care este adresa IP a web site-ului www.alexbobica.com?”.

1. userul bagă de la tastatură http://www.alexbobica.com într-un browser;
2. browser-ul trimite request-ul pentru adresa IP a site-ului respectiv înspre resolver;
3. resolver-ul interoghează name serverul configurat local;
4. name serverul se uită în cache şi nu găseşte adresa IP a site-ului;
5. name serverul local trimite un query către un root-server;
6. root serverul suportă doar interogările iterative şi răspunde cu o listă a name serverelor care sunt autoritare pentru .com;
7. name serverul local alege un server din listă şi trimite din nou query-ul pentru aflarea adresei IP a web site-ului www.alexbobica.com;
8. name serverele gTLD suportă doar interogări iterative aşa că răspunde cu o listă de name servere autoritare pentru Second-Level Domain (SLD) alexbobica.com;
9. name serverul local selectează un server din listă şi trimite din nou query-ul iniţial;
10. fişierul zonă pentru alexbobica.com defineşte www.alexbobica.com ca şi intrare CNAME (alias) pentru florin.alexbobica.com. Astfel, serverul autoritar răspunde cu aliasul www.alexbobica.com şi intrarea de tip A pentru florin.alexbobica.com, care să zicem că este 192.168.1.1;
11. name serverul local trimite răspunsul florin.alexbobica.com=192.168.1.1 împreună cu aliasul www=florin la resolver;
12. resolverul trimite www.alexbobica.com=192.168.1.1 către browser-ul userului;
13. browser-ul trimite un request înspre 192.168.1.1 pentru web site-ul respectiv.

Cam atât deocamdată. Vom continua cu restul tipurilor de interogări în următorul material.

Post a Response

Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Romania License.