DNS Round Robin

By Andrei Ungureanu - Last updated: Wednesday, March 3, 2010 - Save & Share - 2 Comments

DNS Round Robin e un mecanism destul de utilizat si cateodata neinteles. Azi m-am gandit sa explic cate putin despre cum functioneaza Round Robin.

DNS Round Robin este un mecanism de balansare a incarcarii serverelor, sau altfel zis, de distribuire a conexiunilor catre mai multe servere. Nu o sa explic scenariile pentru care este folosit ci o sa ma concentrez pe modul de functionare. Sa luam exemplul in care avem 4 servere web care au acelasi continut (static), si dorim sa distribuim conexiunile care vin catre numele DNS test.winadmin.local spre toate cele 4 servere. Prima data va trebui sa cream urmatoarele inregistrari in DNS:

test.winadmin.local. IN A 192.168.1.10

test.winadmin.local. IN A 192.168.1.20

test.winadmin.local. IN A 192.168.1.30

test.winadmin.local. IN A 192.168.1.40

image

Daca serverul nostru DNS are activata optiunea Round Robin, atunci cand un client va incerca sa rezolve test.winadmin.local, serverul ii va raspunde cu toate cele 4 IP-uri care rezolva catre numele test.winadmin.local.

image

Ok, o sa spuneti ca teoria si manualele Microsoft spun cu totul altceva, bla, bla. Nici o problema, intr-un fel si manualul are dreptate. Raspunsul serverului este de fapt o lista, care contine toate IP-urile de mai sus, si din care clientul il va folosi pe primul din lista. La fiecare interogare noua, serverul va roti IP-urile din lista, in asa fel incat de fiecare data clientul va avea o lista cu IP-urile dar in alta ordine. Putem vedea ce primeste clientul folosing nslookup:

image

De ce totusi 192.168.0.40 ramane primul in lista? Pentru ca serverul DNS are activata optiunea “Enable netmask ordering”. Aceasta optiune aranjeaza IP-urile in lista pe baza IP-ului de la care a venit cererea, in asa fel incat sa ofere cea mai apropiata adresa de client. Netmask ordering are prioritate peste round robin, asa ca daca ambele optiuni sunt activate (default) IP-urile din acelasi subnet (se face un simplu match in binar) cu clientul vor fi primele in lista.

Mai sus am testat cu NSLOOKUP pentru ca trece peste cache-ul local si imi arata direct raspunsul serverului. Daca as fi incercat doar cu ping raspunsul ar fi fost cache-uit local. Putem dezactiva cache-ul de DNS oprind serviciul DNS Client pe statia de pe care testam. Serviciul este responsabil pentru cache-uirea raspunsurilor, asa ca daca il oprim nu o sa mai fie nevoie sa rulam ipconfig /flushdns dupa fiecare test. Stati fara grija, serviciul nu este responsabil pentru functionarea interogarilor, asa ca in scenarii de troubleshooting e chiar recomandata oprirea lui. Se face cu NET STOP DNSCACHE.

Iata si exemplu de captura cu Wireshark:

image

Sa revenim, ca de aici incepe “distractia”. Ce IP alege clientul din lista care tocmai a primit-o? Normal ar trebui sa il ia pe primul, ca sa poata beneficia de Netmask Ordering . Doar ca nu functioneaza ca in carti. Clientul mai face si el Netmask Ordering local sau altfel spus Subnet Prioritization. Deci indiferent daca noi am activat pe server optiunea Netmask Ordering sau nu, clientul alege cel mai apropiat IP. Si uite asa Round Robin-ul in clipa asta se duce pe rapa mai ales atunci cand avem in lista un IP din acelasi subnet cu clientul.

Ca sa dezactivam Subnet Prioritization pe client trebuie sa adaugam urmatoarea cheie in registry:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DnsCache\Parameters\PrioritizeRecordData de tipul REG_DWORD si valoarea 0.

Insa optiunea asta merge doar pe Windows 2000/XP/2003. Sa va mai zic ca la Windows Vista lucrurile s-au schimbat? Complicat, nu? De Vista nu prea stiu mare lucru pentru ca este un OS mort si nici nu are rost sa-mi mai pierd timpul facand research pe el.

Dar stiu ca exista acest KB http://support.microsoft.com/default.aspx?scid=kb;EN-US;968920 care explica despre cum sa dezactivezi Subnet Prioritization. Iar algoritmul dupa care ar trebui sa aleaga IP-ul e descris aici : http://www.ietf.org/rfc/rfc3484.txt.

Si cum nu se putea altfel, modul de procesare a raspunsurilor serverului DNS s-a schimbat din nou in Windows 7. In Windows 7, valoarea pentru OverrideDefaultAddressSelection din KB-ul de mai sus e implicit 1.

Cu toate astea, Windows 7 ignora ordinea inregistrarilor primite de server si alege random (CRED, pentru ca nu am reusit sa stabilesc un pattern si nici nu am acces la codul sursa) o inregistrare din lista. Nu am reusit sa gasesc nici un mod prin care sa il fortez sa foloseasca primul IP din lista returnata de server.

 UPDATE: Se pare ca by default Windows 7 respecta raspunsul primit de server si alege primul IP din lista. Totusi, in cazul testului facut mai sus, cu IP-urile de acolo si cu un client cu ip-ul 192.168.0.131, lucrurile o iau razna. Daca reuseste cineva sa repete testul il rog sa ma anunte.

Pffff .. cam complicat Round Robin-ul asta pentru o singur bifa in consola DNS.

Posted in Networking, Windows Server • Tags: , Top Of Page

2 Responses to “DNS Round Robin”

Comment from codvali
Time June 26, 2012 at 3:37 pm

Am cumparat acest domeniu http://www.hostdrive.ro am pus pe doua servere linuxul ubuntu 11.10 cu ispconfig dupa care am mers la rotld sa pun ns-urile , le-am pus dar nu stiu sa creez zonele dns !!! Poti sa i-mi dai un sfat ? Multumesc anticipat !!!

Comment from codvali
Time July 11, 2012 at 9:31 am

Am reusit sa creez zonele !!! Salut !

Write a comment