System DNS Maciej Szmigiero <mhej@o2.pl>
DNS - Podstawowe informacje Służy do tłumaczenia nazw domen (takich jak na przykład www.wp.pl ) na adresy IP i odwrotnie, Silnie hierarchiczny, Dodatkowo wykorzystywany jako hierarchiczna, rozproszona baza danych: Na początku wyłącznie informacji o serwerach obsługujących odbiór poczty dla nazwy domeny, Później rozszerzono ten zapis także na inne usługi, np. Kerberos KDC czy serwery Jabber, Inne informacje, komentarze, uprawnienia mail itp.
DNS Podstawowe informacje Adresy domen zapisane są w postaci członów rozdzielonych kropkami niejako od prawej do lewej przykład dla www.wp.pl Podobnie zapisywane są 3 człon 2 człon adresy IP przy zapytaniu odwrotnym przykład dla adresu 1.2.3.4: 4.3.2.1.in-addr.arpa 1 człon część stała
DNS Podstawowe informacje Dozwolone znaki w członie (domenie): w protokole praktycznie dowolne, jednak w ICANN zezwala się wyłącznie na stosowanie liter alfabetu łacińskiego w zakresie stosowanym w języku angielskim, cyfr oraz łącznika ( - ). Nazwy nie mogą się zaczynać ani kończyć łącznikiem.
DNS Podstawowe informacje Istnieje możliwość rejestracji domen zawierających dowolne znaki z zestawu Unicode, jednak takie domeny i tak są tłumaczone na zapis zawierający wyłącznie znaki o zakresie z poprzedniego slajdu ( Punycode ). System ten działa również dla domen głównych. Przykład domena.рф (faktycznie - xn plai ). Problem: Zaskoczenie użytkownika, gdy zamiast żółty.pl zobaczy w przeglądarce xn ty-4ja03asj.pl, Problem z możliwością podszywania się pod inną domenę
DNS Przykład hierarchii Strefa główna. I Wskaźnik na serwer strefy pl Klient szukający adresu IP dla nazwy www.wp.pl II Strefa pl Wskaźnik na serwer strefy wp.pl III Strefa wp.pl wpis: www 1.2.3.4
DNS Przykład hierarchii Problem I skąd znać adres serwera strefy głównej? Wpisany na stałe Problem II serwer strefy głównej oraz popularne serwery domen zostały by zalane pytaniami od setek milionów klientów Każda strefa to w rzeczywistości co najmniej 2 serwery W strefie głównej dodatkowo rozproszenie geograficzne i anycast Caching odpowiedzi pozytywnych i negatywnych w systemach i aplikacjach, Serwery cache DNS np. w ISP
DNS Przykład hierarchii Klient szukający adresu IP dla nazwy www.wp.pl I Strefa główna. serwer 1 serwer 2 serwer 3 serwer 4 II Wskaźnik na serwery strefy pl Strefa pl... serwer n Serwer cache DNS III IV serwer 1 serwer 2 serwer 3 Strefa wp.pl wpis: www 1.2.3.4 serwer 1 serwer 2 Wskaźnik na serwery strefy wp.pl Za pierwszym pytaniem o www.wp.pl zapytania I do IV Dla następnego klienta pytającego o tą nazwę wyłącznie zapytanie I reszta danych z cache
DNS Przykład hierarchii Problem III spójność danych w obrębie strefy Podział master/slave serwerów strefy, Numery seryjne danych strefy, Powiadomienia master slave o zmianie danych strefy, Transfery stref pełne i inkrementalne Problem IV aktualność danych w cache Wartości czasu życia (TTL)
DNS Podstawowe informacje Implementacja techniczna: Komunikacja za pomocą UDP i TCP, port 53, W strefie zbiór rekordów w postaci trójek nazwa, typ, dane Rekord SOA rozpoczyna strefę, zawiera numer seryjny, adres e-mail osoby odpowiedzialnej,... Rekordy: A, NS, MX, CNAME, TXT Dynamic DNS
DNS Podstawowe informacje Problem odpowiedzi nie są weryfikowalne Być może odpowiedź pochodzi z komputera podszywającego się pod serwer strefy Rozwiązanie: DNSSEC Strefy z podpisem kryptograficznym, Wprowadzany w życie bardzo powoli, Duży opór ze względu na konieczność umożliwienia pobrania całej strefy, Wymaga zmian w klientach
De facto standard w dziedzinie serwerów DNS, bardzo szeroka implementacja specyfikacji DNS, Open source, licencja BSD, Bieżąca wersja BIND 9 napisana od zera pod koniec lat 90. XX wieku, ze względu na dużą ilość błędów bezpieczeństwa w poprzedniej wersji BIND 4 Obsługa ładowania stref z plików, katalogu LDAP, baz danych Berkeley DB, PGSQL, MySQL, Integracja z serwerem DHCP ISC dla automatycznych uaktualnień DDNS klientów DHCP, Transfery stref, DNSSEC, dodatkowe narzędzia,...
Zawarty w praktycznie każdej dystrybucji Linuxa, apt-get install bind9 emerge net-dns/bind Konfiguracja w katalogu /etc/bind, Program serwera named, program zarządzania rndc, W oficjalnych źródłach (stan na wersję 9.8.0) brak przykładowego pliku named.conf, stąd w różnych dystrybucjach zainstalowana konfiguracja przykładowa może się różnić
Konfiguracja stref w pliku named.conf Serwer główny (Master): zone "example.pl" { type master; file "/var/bind/pri/example.pl.zone"; allow-transfer { slaves-example.pl; }; }; Serwer(y) podrzędne (Slave): zone "example.pl" { type slave; file "/var/bind/sec/example.pl.zone"; masters { 192.168.1.1; }; }; Nazwa strefy Nazwa pliku strefy Adresy serwerów slave notify no; Adres serwera master
Pliki stref Wystarczy utworzyć je na serwerze master, Początek: rekord SOA (Start of Authority): @ IN SOA ns1 postmaster (2011032106 ; Serial 1200 ; Refresh Znak @ - oznacza podstaw w tym miejscu nazwę strefy 180 ; Retry 604800 ; Expire 60 ) ; Min TTL Adres (lub nazwa) serwera master strefy Adres e-mail administratora, @ zastąpić kropką. Numer seryjny strefy - dobra praktyka: data + kolejna liczba Po każdej zmianie zwiększyć
Pozostałe liczby w rekordzie SOA to czasy w sekundach, odświeżania strefy przez serwery slave (1), oczekiwania po nieudanej próbie odświeżania (2), ważności strefy od ostatniego kontaktu z serwerem master (3) oraz minimalna żywotność danych strefy w serwerach cache (typowo stosowana do odpowiedzi negatywnych) Ogólny czas ważności danych określa się za pomocą dyrektywy $TTL Przykład: $TTL 60 oznacza ważność 1 minuty
@ - podstaw nazwę strefy Po rekordzie SOA przyjmuje się, że należy zadeklarować serwery nazw dla strefy za pomocą rekordów NS: @ IN NS ns1 @ IN NS ns2 Nazwy serwerów nazw strefy, nie muszą być takiej postaci Dobra praktyka co najmniej 2 serwery nazw dla każdej strefy
Gdy nazwa nie kończy się kropką automatycznie dopisywana jest nazwa strefy Przykład ns1 ns1.example.pl Jeśli w pliku strefy ma być nazwa bezwzględna koniecznie musi być zakończona kropką Przykład ns1.example.pl.
Deklarowanie adresów hosta rekord A (lub AAAA dla IPv6) Przykłady: ns1 IN A 192.168.1.1 ns2 IN A 192.168.1.2 server IN A 1.2.3.4 Brak kropek na końcu = automatyczne uzupełnianie o nazwę aktualnej strefy
Równoważenie obciążenia przy wielu adresach dla tej samej nazwy W zwracanej odpowiedzi na pierwszym miejscu jest za każdym razem inny adres Przykład: mail A 192.168.1.3 mail A 192.168.1.4 W odpowiedziach na zapytania od nazwę mail na pierwszym miejscu będą na przemian 192.168.1.3 i 192.168.1.4
Obsługa poczty rekord MX Przykłady: Priorytet im mniejsza @ MX 10 mailserver1 wartość, tym większy @ MX 20 mailserver2 Komentarze rekord TXT Przykłady: @ TXT "moja pierwsza domena" mailserver2 TXT "niesprawny" Aliasy rekord CNAME Nie można robić aliasu do aliasu, Przykład: www CNAME mail
Subdomeny (delegacje) Jako rekordy NS, Przykład: sub IN NS ns1.sub sub IN NS ns2.sub Deleguje odpowiedzialność za poddomenę sub do serwerów nazw ns1.sub i ns2.sub Problem zależności okrężnej: aby wysłać zapytanie o nazwę w domenie sub trzeba się skontaktować z serwerem ns1.sub lub ns2.sub, do czego potrzebne jest ustalenie ich adresów, które znajdują się w domenie sub, czego bez ustalenia adresów jej serwerów nazw nie sposób zrobić
Rozwiązanie: rekordy sklejające (glue records) W delegacji należy nie tylko podać nazwy serwerów nazw obsługujących poddomenę, ale również dodać ich rekordy A (lub AAAA) Przykład: sub IN NS ns1.sub sub IN NS ns2.sub ns1.sub A 192.168.16.1 ns2.sub A 192.168.16.2 Serwer obsługujący zwróci te rekordy w dodatkowej części jako odpowiedź nieautorytatywną (nie pochodzącą z serwera danej strefy)
Przykład pliku konfiguracyjnego named.conf http://pastebin.com/fwwjhyyx Przykład pliku strefy http://pastebin.com/pc58fzsd Odkomentować odpowiednią strefę (master lub slave), Zakomentować wpisy odnoszące się do plików których nie ma, Dostosować adresy IP dozwolonych klientów rekursywnych, serwera master i slave