DNS Server – Algoritmi di ordinamento delle risposte
Capita spesso, in un server DNS, che per un singolo nome host si abbiano più indirizzi IP corrispondenti. In questa situazione il server DNS restituisce un elenco contenente tutti gli indirizzi associati al nome richiesto in fase di risoluzione.
Quando il DNS ha più record A per un singolo nome, esso applica due algoritmi di ordinamento distinti:
- ROUND ROBIN
- NETMASK ORDERING
Round Robin
Il primo algoritmo è abbastanza semplice, è un primitive load balancing che in maniera ciclica mette in testa alla risposta sempre un server diverso.
Ad esempio se la lista iniziale è A-B-C, il DNS risponderà con:
- A-B-C
- B-C-A
- C-A-B
- A-B-C
...etc...
NetMask Ordering
Il secondo algoritmo, serve per dare priorità alle risorse locali, mettendo in cima alla risposta gli indirizzi che appartengono alla stessa sottorete del client che fa la richiesta.
L’algoritmo utilizza una netmask fissa per individuare la "vicinanza" degli IP, senza tenere conto della netmask dell'IP del client.
Il server utilizza di default una netmask di classe C, che nel caso più semplice, fa si che se un IP della lista ha i primi tre ottetti uguali all'IP del client, allora viene messo in cima alla risposta.
Nel caso di più match positivi, la lista viene sottoposta ulteriormente al Round Robin, sempre però mantenendo il blocco di risorse locali in testa alla risposta.
Riassumendo, il DNS server applica in sequenza questi due algoritmi e ordina la risposta in questo modo:
- Risorse locali in Round Robin (se esistono)
- Round Robin degli altri record
Come detto, di default è applicata una netmask di classe C (255.255.255.0), ma esiste una chiave per modificare questo comportamento:
[HKLM\SYSTEM\CurrentControlSet\Services\DNS\Parameters\LocalNetPriorityNetMask]
type: DWORD
Value: FF -> FFFFFF
Questi sono i valori più comuni:
FFFFFF = 255.0.0.0
FFFF = 255.255.0.0
FF = 255.255.255.0
ma si può settare anche un valore specifico in base alla propria configurazione di rete, utilizzando la logica negata per ricavare il valore della chiave partendo dalla netmask:
netmask (DEC)= 255.255.240.0
netmask (BIN)= 11111111.11111111.11110000.00000000
netmask (HEX)= FF.FF.F0.00
negando la netmask si ottiene il valore della chiave: 00.00.0F.FF
netmask (DEC)= 255.255.252.0
netmask (BIN)= 11111111.11111111.11111100.00000000
netmask (HEX)= FF.FF.FC.00
negando la netmask si ottiene il valore della chiave: 00.00.03.FF
E’ importante sottolineare che il NetMask Ordering non tiene conto delle subnet e dei siti configurati in Active Directory, ma solamente dell'IP del client che fa la richiesta.
Per maggiori informazioni è disponibile la seguente documentazione:
- How DNS Works
- Description of the netmask ordering feature and the round robin feature in Windows Server 2003 DNS
Gianluca Bertelli
Support Engineer
Microsoft Enterprise Platforms Support