Sistemul numelor de domenii Lenuta Alboaie (adria@info.uaic.ro) Andrei Panu (andrei.panu@info.uaic.ro) 1
Cuprins Domain Name System (DNS) Caracterizare Organizare Configurare Comenzi, Primitive IDN 2
DNS Adresele IP (ex. 85.122.23.145) sunt dificil de memorat Se utilizeaza un sistem al numelor de domenii pentru a translata adresele IP in nume de domenii si invers Numele de domenii se organizeaza in ierarhii RFC 1034, 1035, 1123, 2181 3
DNS organizare Initial: /etc/hosts perechi (nume, IP) Probleme de scalabilitate Actual: DNS consta dintr-o schema ierarhica de nume de domenii si a unui sistem de baze de date distribuite pentru implementarea acestei scheme de nume 4
Figura. O portiune a spatiului numelor de domenii in Internet [Computer Networks, 2003 Andrew S. Tanenbaum] 5
DNS Tipuri de domenii Primare (Top Level Domains TLD) pentru Infrastructura Internet un singur domeniu.arpa ARPA (Address and Routing Parameter Area) Changes to the.arpa zone must be coordinated manually with IANA State (cctld) coduri de state:.ro,.fr,.jp, IDN cctld (Internationalized Country Code Top-Level Domains) http:// 例子. 测试 http://example.test Generice:.biz,.com,.info,.name,.net,.org,.pro Sponsorizate:.aero,.edu,.gov,.int,.jobs,.mil,.tel Rezervate:.example,.invalid,.localhost,.test Pseudo-domenii:.bitnet,.local,.root,.uucp etc. http://www.iana.org/domains/root/db/ 6
DNS Tipuri de domenii 7
DNS Tipuri de domenii Domeniu de nume Subarbore al arborelui de domenii Nu trebuie sa respecte topologia retelei fizice Sub-domenii: intreaga cale de nume nu depaseste 255 de caractere Nume de calculatoare (gazde) 8
Exemplu: DNS 9
DNS organizare Reguli de alocare a numelor de domenii: Fiecare domeniu controleaza cum sunt alocate subdomeniile sale Pentru a crea un nou subdomeniu, se cere permisiunea domeniului in care va fi inclus (un domeniu de la un anumit nivel va avea o autoritate) Atribuirea de nume de domenii respecta granitele organizationale, nu pe cele ale retelelor Un anumit nivel din ierarhia de niveluri poate fi controlat de mai multe servere 10
DNS organizare Servere de nume (name servers) Teoretic, un singur server de nume poate contine intreaga baza de date DNS si poate raspunde tuturor cererilor Probleme: incarcarea si single point of failure Spatiul de nume DNS se divide in zone nesuprapuse 11
DNS organizare Servere de nume (name servers) Exemplu: O posibila impartire a spatiului de nume DNS in zone [Computer Networks, 2003 Andrew S. Tanenbaum] 12
DNS organizare Servere de nume (name servers) Exista un server primar (primary/authoritative name server) care deserveste un anumit domeniu si, eventual, mai multe servere secundare continind baze de date replicate TCP se utilizeaza pentru replicarea DNS UDP pentru interogari (lookups) 13
DNS organizare Client DNS Denumit resolver, trimite un pachet UDP serverului DNS care cauta numele si returneaza adresa IP [Retele de calculatoare curs 2007-2008, Sabin Buraga] 14
DNS organizare Exemplu de implementari ale serverului de nume: BIND (Berkeley Internet Name Domain), MSDNS, PowerDNS etc. Ca resolver (client) interactiv, se poate folosi de exemplu una dintre comenzile: nslookup, host sau dig. 15
DNS interogari Interogari: Recursiva daca un server DNS nu cunoaste adresa pentru numele solicitat, atunci va interoga alt server DNS Incrementala daca serverul DNS nu stie sa raspunda, returneaza eroare si adresa altui server DNS (numit si referral) care ar putea cunoaste raspunsul la interogare [http://technet.microsoft.com/en-us/library/cc775637%28v=ws.10%29.aspx] 16
DNS interogari Fiecarui domeniu ii este asociata o multime de inregistrari de resurse (resource record RR) Mecanismul: Cererea: resolver-ul trimite un nume de domeniu Raspunsul: inregistrarile de resurse asociate acelui nume (stocate in bazele de date DNS) DNS realizeaza corespondenta dintre numele de domenii si inregistrarile de resurse 17
DNS interogari Forma generala RR este: Nume_domeniu Timp_de_viata Tip Clasa Valoare Nume_domeniu (domain name) precizeaza domeniul caruia i se aplica aceasta inregistrare Timp_de_viata (time-to-live) da o indicatie despre cat de stabila este inregistrarea 18
DNS interogari Tip - precizeaza tipul inregistrarii SOA (Start Of Authority) : domeniul curent, adresa e-mail a administratorului, etc. A adresa IP a gazdei MX (mail exchangers) precizeaza numele domeniului pregatit sa accepte posta electronica pentru domeniul specificat CNAME (Canonical Name) permite crearea pseudonimelor PTR (Pointer) Pseudonim pentru adresa IP HINFO- permit aflarea tipului de masina si de sistem de operare carora le corespunde domeniul TXT: text neinterpretat (comentarii) 19
DNS interogari Clasa: pentru Internet valoarea acestuia este IN Valoare: acest camp poate fi un numar, un nume de domeniu sau un sir ASCII; semantica depinde de tipul de inregistrare Exemple de inregistrari de resurse DNS 20
DNS configurare Exemplu de fisier pentru specificarea unei zone DNS 21
DNS clienti, resolveri, servere Ca fisier de configurare al resolver-ului /etc/resolv.conf [Unix Network Programming, R. Stevens B. Fenner, A. Rudoff - 2003 22
DNS configurare Exemplu de fisier /etc/resolv.conf 23
DNS interogari inverse Problema: Data o adresa, care va fi numele ei simbolic? (reverse DNS resolution sau reverse DNS lookup) Exemple: 1) 2) 2001:db8::567:89ab b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa 24
DNS optimizari Proximitatea spatiala: serverele locale vor fi interogate mai des decat cele la distanta Proximitatea temporala: daca un set de domenii sunt referentiate repetat atunci se apeleaza la caching DNS Fiecare intrare DNS va avea stabilita o valoare TTL (time to live) Se va utiliza si replicarea (servere multiple, servere root multiple) se va interoga cel mai apropiat (geografic) server 25
DNS comenzi Ca resolver interactiv se pot folosi comenzile: nslookup dig host whois 26
DNS nslookup Exemple de utilizari: nslookup www.info.uaic.ro - Returneaza RR de tip A folosind serverul DNS local Host Lookup nslookup 85.122.23.1 - Returneaza RR de tip PTR pentru 85.122.23.1 in ierarhia de domenii in-addr.arpa Reverse IP Lookup [http://www.zytrax.com/books/dns/ch3/] 27
DNS nslookup Exemple de utilizari: nslookup www.axiologic.ro - Returneaza RR de tip A folosind serverul DNS specificat Host Lookup man nslookup 28
DNS dig dig un instrument mai puternic decat nslookup Exemplu de utilizare: dig www.info.uaic.ro A 29
DNS comenzi host Exemplu de utilizare: 30
DNS whois whois ibm.com 31
DNS primitive Nu trebuie scris un resolver pentru a afla adresa IP a unei gazde Functii principale: gethostbyname(); getaddrinfo(); gethostbyaddr() ; getnameinfo(); La unele sisteme de operare (e.g., Solaris) va trebui la compilare sa folosim biblioteca nsl (Name Server Library): gcc -lnsl 32
DNS primitive Una din structurile folosite: hostent struct hostent { char *h_name; /* nume oficial (canonical) */ char **h_aliases; /* alias-uri */ int h_addrtype; /* AF_INET */ int h_length; /* lungimea adresei: 4 sau 6 */ char **h_addr_list; /*pointeri la adresele IP */ }; 33
Structura hostent: DNS primitive h_name h_aliases h_addrtype h_length h_addr_list AF_INET Numele oficial al hostului (cannonical name) NULL alias 1 alias 2 Adresa IP 1 Adresa IP 2 NULL 34
DNS gethostbyname() #include <netdb.h> struct hostent *gethostbyname (const char *hostname); In termenii DNS, gethostbyname() realizeaza o cerere pentru o inregistrare A Obs. gethostbyname() se foloseste in special pentru IPv4 35
DNS gethostbyname() Returneaza: In caz de succes returneaza un pointer la hostent, ce contine adresa IP a host-ului In caz de eroare NULL, iar variabila h_errno indica eroarea aparuta: HOST_NOT_FOUND NO_RECOVERY Constante definite in netdb.h 36
DNS gethostbyname() Exemplu de utilizare: completarea structurii sockaddr_in avind in loc de adresa IP un nume simbolic: struct sockaddr_in server; struct hostent *hos; if(!( hos = gethostbyname( fenrir.info.uaic.ro ) ) {/*Eroare la rezolvarea adresei*/} server.sin_family=af_inet /* adresa IP o luam din structura hos */ memcpy(&server.sin_addr.s_addr, hos->h_addr_list[0], server.sin_port=htons(4321); sizeof(hos->h_addr_list)); 37
DNS gethostbyaddr() #include <netdb.h> struct hostent *gethostbyaddr ( const char *addr, socklen_t len, int family); In termenii DNS, gethostbyaddr() realizeaza o cerere la serverul de nume pentru o inregistrare PTR in domeniul in-addr.arpa Returneaza: In caz de succes returneaza un pointer la hostent, ce contine numele oficial al host-ului ; In caz de eroare NULL, iar variabila h_errno indica eroarea aparuta Obs. gethostbyaddr() se foloseste in special pentru IPv4 38
DNS getservbyname() #include <netdb.h> struct servent *getservbyname (const char *servname, const char *protoname); Returneaza: un pointer la struct servent in caz de sucess, NULL in caz de eroare struct servent { char *s_name; char **s_aliases; /* alias-uri */ /* numele oficial al serviciului*/ int s-port; /* portul (network-byte order) */ char *s_proto; /* protocolul */ }; Exemplu: struct servent *pserv; pserv=getservbyname( ftp, tcp ); /*FTP folosind TCP */ 39
DNS getservbyport() #include <netdb.h> struct servent *getservbyport (int port, const char *protoname); Cauta un serviciu dupa un numar de port si dupa protocol (optional) Returneaza: un pointer la struct servent in caz de sucess, NULL in caz de eroare Obs. port este in network byte order Exemplu: struct servent *pserv; pserv=getservbyport( htons(53), udp ); /*DNS folosind UDP */ pserv=getservbyport( htons(21), tcp ); /*FTP folosind TCP */ 40
#include <netdb.h> int getaddrinfo ( const char *hostname, const char *service, DNS getaddrinfo() const struct addrinfo *hints, struct addrinfo **result ) ; Numele host-lui sau o adresa IPv4 sau IPv6 ca string Portul serviciului sau numele serviciului ( http, pop,..) (vezi /etc/services ) Obs. hostname, service, hints parametri de intrare Returneaza: 0 in caz de sucess,!=0 in caz de eroare Contine informatii despre tipul de informatii pe care trebuie sa le intoarca primitiva Se recomanda a fi folosita si pentru IPv4 si pentru IPv6 Combina functionalitati ale: gethostbyname(), getservbyname(), getservbyport() 41
DNS getaddrinfo() struct addrinfo { }; int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ int ai_family; /* AF_INET, AF_INET6, AF_UNSPEC */ int ai_socktype; /* SOCK_STREAM sau SOCK_DGRAM */ int ai_protocol; /* 0 (auto) sau IPPROTO_TCP, IPPROTO_UDP */ socklen_t ai_addrlen; /* lungimea lui ai_addr */ char *ai_canonname; /* numele canonic al host-ului */ struct sockaddr *ai_addr; /* adresa binara a socket-ului */ struct addrinfo *ai_next; /* pointer la urmatoarea structura din lista */ 42
Discutii: DNS getaddrinfo() Daca functia returneaza cu succes result va pointa la lista de struct addrinfo. Cazuri cind se pot obtine structuri multiple: Exista mai multe adrese asociate cu numele hostului, si cate o structura este returnata pentru fiecare adresa Daca serviciul este furnizat pentru tipuri diferite de socket-uri, atunci cate o structura este returnata pentru fiecare tip de socket Informatia returnata de getaddrinfo() in structura struct addrinfo **result poate fi utilizata astfel: Pentru socket() : ai_family, ai_socktype, ai_protocol Pentru connect() sau bind(): ai_addr si ai_addrlen freeaddrinfo() 43
DNS getnameinfo() #include <netdb.h> int getnameinfo ( const struct sockaddr *sockaddr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags) ; Inlocuieste gethostbyaddr() si getservbyport() Adresa socket-ului trimisa ca argument numele host-ului intors Numele serviciului NI_NOFQDN -> host va contine doar numele host-ului si nu intreg numele al domeniului Returneaza: 0 in caz de sucess,!=0 in caz de eroare 44
DNS IDN International Domain Names (IDN) Extensie care permite folosirea caracterelor Unicode in numele de domenii, nu doar a celor ASCII http://www.icann.org/en/topics/idn/ 16 Noiembrie 2009 - Inregistrarea de domenii ccidn sau IDN cctld Pot fi exploatate pentru atacuri de tip phishing ( detalii intr-un curs viitor) 45
DNS administrare Radacina DNS este oficial administrata de Internet Corporation for Assigned Names and Numbers (ICANN) Exista si alte organizatii care ofera radacini alternative (alt DNS roots), precum OpenNIC (Network Information Center) sau New.Net 46
Rezumat Domain Name System (DNS) Caracterizare Organizare Configurare Comenzi, Primitive IDN 47
Intrebari? 48