5 Apr 2009

DNS (Domain Name System) krótkie wprowadzenie

DNS to system serwerów oraz protokół komunikacyjny (działający w oparciu o UDP) zapewniający zamianę adresów symbolicznych (np. 0x1fff.com) znanych użytkownikom Internetu na adresy zrozumiałe dla urządzeń tworzących sieć komputerową (np. 192.168.0.1). Budowa systemu została opisana już w roku 1982 w dokumencie IETF-RFC819, natomiast dokumenty z roku 1983 RFC 882 i RFC 883 były oficjalną specyfikacją protokołu DNS, aż do roku 1989. Obecnie system DNS jest zdefiniowany, przez następujące RFC: RFC 1034, RFC 1035, RFC 1918 Żeby zacząć przygodę z DNS, wypadało by poznać jeszcze parę pojęć:
Co to jest FQDN? (za Wikipedią)
FQDN (ang. Fully Qualified Domain Name) - pol. pełna, jednoznaczna nazwa domenowa, określająca położenie danego węzła w systemie DNS. Składa się zwykle z nazwy hosta i co najmniej jednej domeny (etykiety) wyższego poziomu rozdzielonych symbolem "." i kończy się zawsze domeną najwyższego poziomu. Na przykład www.wikipedia.org jest pełną nazwą domenową: www oznacza hosta, wikipedia jest domeną drugiego poziomu, a .org domeną najwyższego poziomu.
W systemie DNS FQDN zawsze kończy się kropką, nazw bezwzględne kończą się kropką - jest bardzo ważne (np: ns1.0x1fff.com.).

Typy rekordów i ich przeznaczenie

By system DNS mógł działać, każda domena musi mieć swój serwer autorytatywny (master) dostarczający informacje o domenie. Serwer taki posiada rekord SOA - Start Of Authority Record - w którym są zapisane informacje techniczne o domenie.

Parametry rekordu SOA

  1. Numer seryjny domeny - jakakolwiek zmiana w konfiguracji domeny, powinna być poprzedzona zmianą numeru seryjnego (najczęściej wpisywana jest data zmiany)
  2. Czas życia (Time To Live) decyduje o tym, jak długo serwery cachujące mogą przetrzymywać informację o rekordach w swoich buforach
  3. Częstość odświeżania (refresh) decyduje o tym, jak często serwery dodatkowe będą sprawdzać, czy ich dane na temat strefy są aktualne.
  4. Częstość powtórek (retry) jeśli serwerowi dodatkowemu nie uda się skontaktować z serwerem podstawowym po czasie odświeżania, to próbuje co co czas określony w polu retry.
  5. Czas wygaśnięcia (expire) Jeśli serwerowi dodatkowemu nie uda się skontaktować z serwerem podstawowym przez czas wygaśnięcia, to zaczyna usuwać stare dane. Czas wygaśnięcia zawsze powinien być znacznie większy od częstości odświeżania i powtórek.
Przykład wykorzystania tych danych wygląda tak:
$TTL 64
0x1fff.com. IN SOA      batnet.pl. root.batnet.pl. (
                        2009032514      ; serial
                        8H              ; refresh
                        2H              ; retry
                        1W              ; expire
                        1D)             ; ttl

Najważniejsze typy rekordów DNS, oraz ich znaczenie

Rekordy serwerów nazw (ang. name server record - NS)
Rekordy NS pozwalają na mapowanie nazwy domenowej na listę serwerów DNS dla tej domeny. Wpis rekordu NS powinien zawierać adresy/nazwy serwerów, które obsługują domenę.
   IN  NS ns1.host.pl.
 
Rekordy adresów (ang. address record - A)
Rekordy A przypisują nazwom 32 bitowe adresy IPv4. Pierwsze pole wpisu zawsze jest rozwijane do FQDN, aby temu zapobiec należy dodać użyć bezwzględnego wpisu z kropką na końcu lub znakiem '@' (at).
 test IN A 127.0.0.1 ; to samo co niżej
 test.0x1fff.com. IN A 127.0.0.1 ; to samo co wyżej
 test.0x1fff.com@ IN A 127.0.0.1 ; to samo co wyżej
 test.0x1fff.com. IN A 192.168.0.1 ; i jeszcze to
 
Jest możliwość mapowania jednej nazwy na kilka adresów IP celem rozładowania obciążenia - algorytm miał być podobny do Round Robina, ale ze względu na specyfikę (rozproszoność, cachowanie) systemu DNS - średnio takie coś działa. Niemniej jednak, by uzyskać taką funkcjonalność należy wpisać różne rekordy A z taką samą nazwą, ale z różnymi adresami IP.
  IN A 192.168.0.1 ; wpis dla calej domeny 0x1fff.com => 192.168.0.1
 test IN A 192.168.0.1
 test IN A 192.168.0.2
 test.0x1fff.com. IN A 192.168.0.3
 
Rekordy adresów IPv6 (ang. IPv6 address record - AAAA)
Rekordy AAAA przypisują nazwom 128-bitowe adresy IPv6. Wpisy wyglądają i mają taka samą funkcjonalności jak w przypadku rekordu A, oraz również zezwalają na load balancing.
 testv6 IN AAAA 2001:db8::1428:57ab
 testv6.0x1fff.com. IN AAAA 2001:db8::1428:57ab  ; to samo co wyzej
 @  IN AAAA 2001:db8::1428:57ab ; dla głównej domeny
 
Rekordy aliasów (ang. canonical name record - CNAME)
Rekord CNAME pozwala na stworzenie aliasu nazwy domeny. Wszystkie wpisy DNS oraz pod domeny są poprawne także dla aliasu. Przykładem zastosowania rekordu typu CNAME, może być sytuacja w której rekord A "tp-link" wskazujący na adres IP 192.168.0.1, to kolejna nazwa (np. "router") wskazująca na ten sam aders IP powinna być rekordem CNAME wskazującym na istniejącą już nazwę. Inne przykłady zastosowania to:
  • jest wiele nazw domenowych dla tego samego adresu IP.
  • wskazywany rekord jest poza bieżącą strefą (np. przekierowanie usług na serwery Google) - tutaj trzeba pamiętać o kropce na końcu wpisu
  • jeśli wymagane jest przechwycenie wszystkich odwołań do strefy (rekord CNAME wieloznaczny)
  tp-link  IN A 192.168.0.1
  router  IN CNAME tp-link
  moj-router IN CNAME tp-link.0x1fff.com.
  *  IN CNAME  tp-link ; rekord wieloznaczny
 
Rekordy wymiany poczty (ang. mail exchange record - MX)
Rekordy MX służą do obsługi poczty, wpis rekordu składa się adresu komputera do którego poczta ma być kierowana, oraz tzw. liczby preferowanej - ustalającej priorytet w tym wypadku jest to kolejność łączenia się z serwerami poczty. Jeśli domena posiada kilka wpisów MX, domyślnym będzie ten z najniższą liczbą preferowaną.
   IN             MX      1       ASPMX.L.GOOGLE.COM.
   IN             MX      5       ALT1.ASPMX.L.GOOGLE.COM.
   IN             MX      5       ALT2.ASPMX.L.GOOGLE.COM.
   IN             MX      10      ASPMX2.GOOGLEMAIL.COM.
   IN             MX      10      ASPMX3.GOOGLEMAIL.COM.
   IN             MX      10      ASPMX4.GOOGLEMAIL.COM.
   IN             MX      10      ASPMX5.GOOGLEMAIL.COM.
 
Rekordy PTR (ang. pointer record)
Zamienia adres IPv4 lub IPv6 na nazwę kanoniczną hosta. Określenie rekordu PTR dla nazwy hosta (ang. hostname) w domenie in-addr.arpa (IPv4), bądź ip6.arpa (IPv6), który odpowiada adresowi IP, pozwala na dokonanie odwrotnej translacji adresów DNS (ang. reverse DNS lookup). By móc zmodyfikować strefę odwrotną trzeba mieć odpowiednie prawa. Jednemu adresowi IPv4 i IPv6 może być przypisana jedna nazwa kanoniczna (w przypadku innych rekordów nie ma takiego ograniczenia).
  130             IN      PTR     rev130.0x1fff.com.
  131             IN      PTR     rev131.0x1fff.com.
  132             IN      PTR     rev132.0x1fff.com.
  133             IN      PTR     rev133.0x1fff.com.
 
Rekordy (TXT) tekstowe
Rekordy TXT mogą służyć do dołączenia dowolnego tekstu i nazwy do rekordu DNS. Często są używane do zaimplementowania informacji o tym, które adresy z danej domeny mogą wysyłać pocztę (systemy antyspamowe - specyfikacja Sender Policy Framework).
  TXT     "v=spf1 ip4:195.82.172.129 ip4:195.82.172.28 a mx ~all"
 
Rekordy serwisów (ang. service record - SRV)
Zawierają dodatkowe informacje dotyczące usług, którą udostępnia serwer wskazywany przez adres DNS. Nazwy rekordów SRV powstają ze sklejenia nazwy usługi, protokołu (tcp lub udp) i nazwy domeny (w bieżącej strefie). Np. "_sip._tcp" dla rekordu SRV dla VoIP. Rekordy te sa powszechnie używane w usłudze Jabber.
  ; srvce.prot.name  ttl  class   rr  pri  weight port target
  _xmpp-server._tcp.0x1fff.com. IN SRV 5 0 5269 xmpp-server.l.google.com.
  _xmpp-server._tcp.0x1fff.com. IN SRV 20 0 5269 xmpp-server1.l.google.com.
  _xmpp-server._tcp.0x1fff.com. IN SRV 20 0 5269 xmpp-server2.l.google.com.
  _xmpp-server._tcp.0x1fff.com. IN SRV 20 0 5269 xmpp-server3.l.google.com.
  _xmpp-server._tcp.0x1fff.com. IN SRV 20 0 5269 xmpp-server4.l.google.com.
  _jabber._tcp.0x1fff.com. IN SRV 5 0 5269 xmpp-server.l.google.com.
  _jabber._tcp.0x1fff.com. IN SRV 20 0 5269 xmpp-server1.l.google.com.
  _jabber._tcp.0x1fff.com. IN SRV 20 0 5269 xmpp-server2.l.google.com.
  _jabber._tcp.0x1fff.com. IN SRV 20 0 5269 xmpp-server3.l.google.com.
  _jabber._tcp.0x1fff.com. IN SRV 20 0 5269 xmpp-server4.l.google.com.
  _xmpp-client._tcp.0x1fff.com. IN SRV 5 0 5269 talk.l.google.com.
  _xmpp-client._tcp.0x1fff.com. IN SRV 20 0 5269 talk1.l.google.com.
  _xmpp-client._tcp.0x1fff.com. IN SRV 20 0 5269 talk2.l.google.com.
  _xmpp-client._tcp.0x1fff.com. IN SRV 20 0 5269 talk3.l.google.com.
  _xmpp-client._tcp.0x1fff.com. IN SRV 20 0 5269 talk4.l.google.com.
 
Inne typy rekordów w systemie DNS
To był opis najczęściej używanych typów rekordów DNS - by uzyskać więcej informacji, np. o tym jak działa cały system, jak przetwarzane są zapytania itp. polecam zajrzeć do referencji umieszczonych na dole artykułu.
Oprócz tych ustawień serwer BIND posiada plik konfiguracyjny w którym podaje się jakie domeny są hostowane, oraz jakie inne hosty mogą ją transferować całą jej zawartość. Zwykle te komputery to dodatkowe serwery DNS dla strefy. W celu ochrony lista ta nie powinna być za duża, przykładowy plik do włączenia strefy wygląda następująco:
 zone "0x1fff.com" {
  type master;
  file "master/0x1fff.com";
  allow-update { none; };
  allow-query { any; };
  allow-transfer { 193.111.27.194; 194.145.96.21;  };
 };
 

Rodzaje odpowiedzi na zapytania DNS

autorytatywne
dotyczące domeny w strefie, nad którą dany serwer DNS ma zarząd, pochodzą one bezpośrednio z bazy danych serwera
nieautorytatywne
dane które zwraca serwer pochodzą spoza zarządzanej przez niego strefy (np. serwer cachujący)

Narzędzia przydatne podczas testowania usług DNS

Darmowe serwery DNS

Więcej informacji

W sumie ostatnio koledze coś konfigurowałem z domeną graniec.pl i powiem, że zostałem pozytywnie zaskoczony szybkością reakcji serwisu u którego domena była wykupiona (domenyonline.pl), więc właśnie dlatego podlinkuje do nich.

5 comments:

  1. Dobra. Przydało się :). Mogłem tylko dokładniej czytać.

    ReplyDelete
  2. Jak sprawdzić czy na *KONKRETNYM* serwerze istnieje wpis DNS?:

    dig @fns1.sgh.waw.pl blog.0x1fff.com

    Można w ten sposób odpytywać dowolne serwery. Chyba komuś brakowało tego w tym wpisie.

    ReplyDelete
  3. By przyspieszyć odpytywanie serwerów DNS w sieci lokalnej można skorzystać z paru programów:

    dnsmasq (local dns cache)

    Bind as remote DNS cache

    djbdns as local/remote DNS cache

    ReplyDelete