przejście do zawartości
Jan Kończak
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Ostatnie zmiany
Menadżer multimediów
Indeks
Jesteś tutaj:
start
»
sk2
»
dns
sk2:dns
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Domain Name System ====== **[[http://www.cs.put.poznan.pl/ddwornikowski/sieci/sieci2/dns.html]]** ** //Przygotowanie do laboratoriów w salach 1.6.16 / 1.6.18// ** \\ Na początku zajęć pobierz skrypt {{:sk2:dns_lab_setup.sh|}} i wykonaj go z uprawnieniami roota, podając jako argument adres IP podany przez prowadzącego. ===== FQDN ===== Nazwa domenowa [[https://en.wikipedia.org/wiki/Domain_name|[2]]] \\ Budowa nazwy domenowej: [[https://pl.wikipedia.org/wiki/Domena_internetowa#/media/File:Dns-schemat.svg|struktura drzewiasta]], [[https://en.wikipedia.org/wiki/DNS_root_zone|korzeń]]. \\ Top Level Domain [[https://en.wikipedia.org/wiki/Top-level_domain|[3]]], [[http://www.iana.org/domains/root/db|lista]] \\ Fully qualified domain name – pełna nazwa domenowa [[https://en.wikipedia.org/wiki/Fully_qualified_domain_name|[1]]] //Zadanie 1.// Porównaj wynik poniższych poleceń: $ ping -c1 lab-net-1 $ ping -c1 lab-net-1.cs.put.poznan.pl ===== Role serwerów DNS ===== Serwery nazw można podzielić ze względu na pełnione zadanie na: * root servers [[https://en.wikipedia.org/wiki/Root_name_server|[1]]] – odpowiadają za TLD; odpowiadają tylko na pytania o TLD * authoritative servers [[https://en.wikipedia.org/wiki/Name_server#Authoritative_name_server|[2]]] – wpisywane do serwerów nazw nadrzędnej domeny serwery odpowiedzialne za rozgłoszenie domeny w sieci; odpowiadają na pytania o swoją domenę * caching name servers [[https://en.wikipedia.org/wiki/Name_server#Caching_name_server|[3]]] – serwery zbierające informacje z powyższych, przeznaczone dla użytkowników końcowych (zwane czasem //public DNS//) ===== Drzewo DNS a serwery DNS ===== {{:sk2:dns.svg|}} ===== Zapytania DNS ===== Klienci odpytujący DNS korzystają z UDP((z pewnymi wyjątkami podsumowanymi w [[https://tools.ietf.org/html/rfc7766|RFC7766]])) Do odpytywania serwerów DNS można używać np. komend: * ''host'' (<html><small></html>uwaga, różne wersje: [[http://www.isc.org/software/bind|[1]]] [[http://www.weird.com/~woods/projects/host.html|[2]]] <html></small></html>) * ''dig -h'' * <html><small></html>''nslookup'' (zacznij od przeczytania ''man nslookup'')<html></small></html> * <html><small></html>''dnstracer'' (pozwala przejść całe drzewo DFSem, np: ''dnstracer -c -o -s . assets.publishing.service.gov.uk.'' )<html></small></html> //Zadanie 2.// Przetestuj poniższe zapytania: host lab-net-1.cs.put.poznan.pl host lab-net-1.cs.put.poznan.pl. host lab-net-1 dig lab-net-1.cs.put.poznan.pl dig +noall +answer lab-net-1.cs.put.poznan.pl dig +short lab-net-1.cs.put.poznan.pl dig www.cs.put.edu.pl dig wp.pl host wp.pl ==== Rodzaje rekordów ==== Wybór typu rekordu: * ''host -t //typ// //nazwa_domenowa//'' np: \\ ''host -t MX put.poznan.pl'' * ''dig //nazwa_domenowa// //typ//'' np: \\ ''dig put.poznan.pl AAAA'' Pytanie o "wszystkie" rekordy: * ''host -a [-v] //nazwa_domenowa//'' * ''dig //nazwa_domenowa// any'' //Zadanie 3.// Odpytaj kilka domen o wszystkie rekordy. Jakie typy rekordów głównie widzisz? Ważniejsze typy rekordów: | A | Adres IPv4 | | AAAA | Adres IPv6 | | NS | Serwer nazw | | SOA | Start of Authority (omówione dokładniej przy konfiguracji serwera DNS) | | MX | Serwer odbierający pocztę dla domeny | | CNAME| Alias na inną nazwę domenową ( ++ np. | \\ ''host -t cname %%www.cs.put.edu.pl%%'' \\ ''dig unixlab.cs.put.poznan.pl cname'' ++ ) | | TXT | Dowolny tekst (dosłownie dowolny). \\ Używany np. na potrzeby mechanizmów walki ze spamem – [[https://en.wikipedia.org/wiki/Sender_Policy_Framework|SPF]] i [[https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail|DKIM]]) ( ++ przykłady: | \\ Cokolwiek: ''dig akamai.net txt'' \\ Cokolwiek: ''host -t txt lenovo.com'' \\ SPF: ''dig student.put.poznan.pl txt'' \\ DKIM: ''host -t txt 20161025._domainkey.googlegroups.com'' ++ ) | | SRV | Host i port usługi, ( ++ np. | \\ dla klientów xmpp: ''dig _xmpp-client._tcp.jabber.org srv'' \\ dla klientów minecrafta: ''host -t srv _minecraft._tcp.cubecraft.net'' \\ w domenie AD: https://technet.microsoft.com/en-us/library/cc961719.aspx ++ ) | | PTR | Nazwa domenowa (patrz niżej) | Pozostałe: https://en.wikipedia.org/wiki/List_of_DNS_record_types //Zadanie 4a.// Wykonaj zapytania o odwzorowanie odwrotne: host 150.254.30.43 dig -x 150.254.30.43 dig @8.8.8.8 -x 150.254.30.43 host -t ptr 43.30.254.150.in-addr.arpa dig 43.30.254.150.in-addr.arpa ptr <html><small></html> //Zadanie 4b.// Zadaj zapytania odwrotne o adres IPv6. Jaka domena jest użyta? <html></small></html> <html> <div style="display: block; margin-left: 0.5em; padding-left: 0.5em; border-left: gray 1px solid"> </html> // „Żeby dowiedzieć się jaki IP ma ''home.cern'', zapytam się root serwera gdzie jest serwer nazw dla ''cern''. Serwer nazw jest pod adresem ''a2.nic.cern'', więc żeby dowiedzieć się, gdzie jest ''a2.nic.cern'', zapytam się root serwera gdzie jest serwer nazw dla ''cern''…“ // <html> </div> Błędne koło? </html> Jeśli NS jest w tej samej domenie, którą rozwiązuje, to razem z rekordem NS w nadrzędnym serwerze nazw musi być też rekord A lub AAAA tzw. [[https://en.wikipedia.org/wiki/Domain_Name_System#Circular_dependencies_and_glue_records|glue record]] //Zadanie 5.// Sprawdź jak wygląda wynik komendy: ''dig nask.pl @a-dns.pl''. Które rekordy to glue records? ==== Kogo pytamy? ==== System operacyjny Linux używa serwera DNS skonfigurowanego w pliku ''/etc/resolv.conf''. Dokumentacja możliwych wpisów w tym pliku: ''man resolv.conf'' Ręczne wybranie serwera: * ''host //name// //server//'', np: \\ ''host pl.wikipedia.org dns.tpsa.pl'' \\ ''host pl.wikipedia.org one.one.one.one'' * ''dig @//server// //name//'', np: \\ ''dig @dns.tpsa.pl pl.wikipedia.org'' \\ ''dig @one.one.one.one pl.wikipedia.org'' Rodzaje zapytań [[http://www.cs.put.poznan.pl/ddwornikowski/sieci/sieci2/dns.html|[1]]]: * iteracyjne * automatycznie: \\ ''dig //nazwa// +trace'' * <html><small></html>ręcznie krok po kroku, np. dla cs.put.poznan.pl: \\ ''dig @a.root-servers.net cs.put.poznan.pl'' \\ ''dig @a-dns.pl cs.put.poznan.pl'' \\ ''………'' <html></small></html> * rekurencyjne (domyślne) \\ ''dig //nazwa// +recurse'' <html><small></html> Przykładowe adresy publicznych serwerów DNS: * ''8.8.8.8'' oraz ''8.4.4.8'' [[https://en.wikipedia.org/wiki/Google_Public_DNS|Google Public DNS]] * ''1.1.1.1'' oraz ''1.0.0.1'' [[https://en.wikipedia.org/wiki/1.1.1.1|Cloudflare DNS]] * ''9.9.9.9'' [[https://en.wikipedia.org/wiki/Quad9|IBM (Quad9)]] * dłuższa lista: [[https://en.wikipedia.org/wiki/Public_recursive_name_server]] <html></small></html> //Zadanie 6.// Wykonaj zapytanie iteracyjne dla przykładowej nazwy domenowej Serwery authoritative i caching – przypomnienie //Zadanie 7a.// Porównaj odpytanie o stronę //poznan.pl// programem ''dig'' następujących serwerów DNS: \\ ''dns.tpsa.pl'' ''recpubns1.nstld.net'' ''ordns.he.net'' ''bilbo.nask.org.pl'' \\ Co oznacza druga kolumna wyników? Czym różnią się flagi odpowiedzi? <html><small></html> Bezpieczeństwo: * Problem: [[https://en.wikipedia.org/wiki/DNS_spoofing|DNS spoofing]] * Powszechnie przyjęte rozwiązanie: [[https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions|DNSSEC]] Prywatność: * Problem: zapytania DNS są wysyłane otwartym tekstem * Brak powszechnych rozwiązań * Zaproponowano: DNS over {TLS,HTTPS,QUIC,SSH}, dnscrypt, … <html></small></html> //Zadanie 7b.// Porównaj wynik zapytania o adres dowolnej strony z listy: https://hazard.mf.gov.pl/ pytając różne serwery DNS. ===== Konfiguracja DNS ===== Rodzaje serwerów – master (pri), slave (sec) W trakcie laboratoriów jest używany serwer DNS [[https://www.isc.org/bind/|BIND]] w wersji 9 którego rozwój dba [[https://en.wikipedia.org/wiki/Internet_Systems_Consortium|ISC]]. \\ BIND9 pozwala tworzyć zarówno serwery authoritative jak i caching (i serwery pełniące obie role naraz, co zwykle jest odradzane). \\ Inne popularne authoritative DNS to [[https://www.nlnetlabs.nl/projects/nsd|NSD]] i [[https://www.knot-dns.cz/|Knot DNS]]. \\ Inne popularne caching DNS to [[https://www.nlnetlabs.nl/projects/unbound/about/|Unbound]] czy [[https://pl.wikipedia.org/wiki/Dnsmasq|dnsmasq]] (który łączy w sobie serwer DNS i DHCP). Format [[https://en.wikipedia.org/wiki/Zone_file|plików stref]] (zone files) opisujących informacje znajdujące się w DNS (a pochodzący z BIND) stał się standardem używanym do konfiguracji rekordów DNS w większości serwerów DNS. Standardowa nazwa głównego programu serwera DNS to ''named'' (od //name daemon//). **Uwaga:** ścieżki, polecenia i przykłady named.conf są w konwencji przyjętej w OpenSUSE. \\ Pliki stref są standardowe. **Uwaga:** przykłady są dla adresu lab-net-1 i domeny example.com. Proszę je odpowiednio zmodyfikować ==== Przykładowe pliki ==== Przykładowa konfiguracja authoritative serwera bind: {{bind9_example_config.tar.xz}} <html><small></html> ++++Toy example konfiguracji caching serwera bind: | <code - named.conf>options { querylog yes; // loguje wszystkie zapytania recursion yes; // pozwala wykonywać zapytania rekursywne };</code>Uruchomienie w/w konfiguracji w trybie pierwszoplanowym z logowaniem na konsolę: ''named -g -c named.conf'' \\ Sensowniejszy przykład konfiguracji jest np. [[https://bind9.readthedocs.io/en/latest/configuration.html#a-caching-only-name-server|tutaj]]. ++++ <html></small></html> <html><!-- ==== Przykładowe pliki ==== //Zadanie 8.// Wykonaj następujące polecenia, by pobrać i wypakować uproszczoną konfigurację przykładową:<code> $ su # cd / # wget -q -O - http://www.cs.put.poznan.pl/jkonczak/_media/sk2:bind9_example_config.tar.xz | tar xpvJ </code> --></html> ==== Uruchamianie ==== Aby uruchomić bind9 do testów wykonaj komendę: \\ ** ''named -g'' ** Można ręcznie podać inną niż domyślną ścieżkę do głównego pliku z konfiguracją: \\ ''named -g -c sciezka/do/named.conf'' <html><small></html> Do sprawdzenia konfiguracji możesz wykonać komendę: \\ ''named-checkconf'' \\ natomiast do sprawdzenia pliku strefy: \\ ''named-checkzone example.com sciezka/do/pliku/example.com.zone'' ++++Aby uruchomić bind9 w dystrybucjach używających systemd, należy:| * Start usługi: \\ ''systemctl start named'' * Sprawdzanie stanu: \\ ''journalctl _SYSTEMD_UNIT=named.service'' * Wczytanie na nowo plików konfiguracyjnych i wyświetlenie stanu: \\ ''systemctl reload named ; systemctl status named'' ++++ <html></small></html> ==== Główny plik konfiguracyjny ==== Główny plik konfiguracyjny BIND9 to ''/etc/named.conf'' lub ''/etc/bind/named.conf'' ([[https://bind9.readthedocs.io/en/latest/reference.html|ref]]) i jest podzielony na sekcje, np: <html> <pre style="font-size:75%; line-height: 85%;">acl <em>nazwa</em> { … }; options { <em>nazwa_opcji wartość</em>; … }; zone <em>nazwa</em> { … };</pre> </html> Plik pozwala on na skonfigurowanie: * W sekcji ''options'' [[https://bind9.readthedocs.io/en/latest/reference.html#options-statement-grammar|[1]]]: * ''directory //katalog//'' – katalog względem którego będą liczone wszystkie względne ścieżki * ''allow-query …'' – ogranicza kto może wysyłać zapytania [[https://bind9.readthedocs.io/en/latest/reference.html#access-control|[2]]] * ''recursion no|yes'' (domyślnie wyłączone) – pozwala działać jako caching nameserver * ''forwarders …'' – lista serwerów, do których mają być przesyłane nieobsłużone zapytania (zmienia serwer w pośrednika) [[https://bind9.readthedocs.io/en/latest/reference.html#forwarding|[3]]] * ''allow-recursion …'' – ogranicza kto może wysyłać zapytania rekursywne [[https://bind9.readthedocs.io/en/latest/reference.html#access-control|[2]]] * Sekcje ''zone'' definiują strefy. * Składnia dla serwera master to: <code> zone "pelna.nazwa.domenowa.pl" IN { type master; file "sciezka_do/pliku_strefy.zone"; }; </code><html><small>IN oznacza INternet (alternatywą jest np. CHaos)</small></html> * ++Składnia dla serwera slave|:<code> zone "pelna.nazwa.domenowa.pl" IN { type slave; masters { 10.0.0.1; }; # lista adresów IP serwerów master file "sciezka_gdzie/serwer_stworzy_plik_strefy.zone"; };</code>++ <html><small></html> ++++ Odwzorowanie odwrotne | <code conf /etc/named.conf.include> zone "130.32.254.150.in-addr.arpa" IN { type master; file "master/130.32.254.150.in-addr.arpa.zone"; }; ## Rzadko deleguje się rozwiązywanie pojedynczych adresów IP; częściej całych sieci, np: #zone "32.254.150.in-addr.arpa" IN { # type master; # file "master/32.254.150.in-addr.arpa.zone"; #}; </code> ++++ <html></small></html> //Zadanie 8.// Sprawdź gdzie znajduje się główny plik konfiguracyjny programu bind. Sprawdź w jakim katalogu na twoim systemie bind będzie domyślnie szukać plików stref. Wyświetl zawartość tego katalogu. ==== Pliki strefy ==== <html><small></html> //Zadanie 9.// Jakie pliki stref są dostarczane z serwerem bind9 (i umieszczone w OpenSUSE w katalogu ''/var/lib/named'')? <html></small></html> Składnia plików stref: * plik strefy musi zaczynać się od rekordu SOA, który zawiera: * **serial** – monotonicznie rosnący numer kolejnej wersji pliku strefy, używany przez slave'y do sprawdzania czy wiedzą co powinny * timeouty (patrz przykład pliku) * mail <html><small> (w przykładzie: root → root.example.com → root@example.com)</small></html> * plik strefy musi zawierać **przynajmniej** jeden rekord **NS** dla domeny * **komentarze** zaczynają się od '';'' * **znak ''@''** oznacza nazwę strefy (z pliku ''named.conf'', nie z nazwy pliku strefy) * **pustka** (brak tekstu) oznacza powtórzenie z linii wyżej * brak ''.'' (kropki) po tekście w dowolnym miejscu gdzie BIND spodziewa się nazwy domeny spowoduje doklejenie ''.@'' na koniec tekstu; stąd do podania adresu bezwzględnego trzeba zakończyć go kropką, np: ''domain.com.'' <code bind example.com.zone> $TTL 1H ; czas jaki ważny będzie cache dla poniższych rekordów ; jednostki: sekundy @ IN SOA ns root ( 2015121600 ; serial number 6H ; / refresh time 1H ; slave | time to retry refresh 1W ; \ slave expiry after no refresh 1D ) ; minimum TTL for caching NS; on timeout NXDOMAIN IN NS ns IN A 150.254.32.130 ns IN A 150.254.32.130 www IN CNAME @ </code> //Zadanie 10.// Włącz bind i przetestuj działanie przykładowej konfiguracji. Następnie przerób konfigurację tak, Twój komputer działał jako serwer nazw dla wybranej domeny (innej niż example.com). <html><small></html> ++++ Odwzorowanie odwrotne | <code bind 130.32.254.150.in-addr.arpa.zone> $TTL 1H @ IN SOA ns.example.com. root.example.com. ( 2015121600 ; serial 6H ; refresh 1H ; retry 1W ; expiry 1D ) ; minimum IN NS ns.example.com. IN PTR example.com. </code> <code bind 32.254.150.in-addr.arpa.zone> $TTL 1H @ IN SOA ns.example.com. root.example.com. ( 2015121600 ; serial 6H ; refresh 1H ; retry 1W ; expiry 1D ) ; minimum IN NS ns.example.com. 1 IN PTR somehost.example.com. 2 IN PTR anotherhost.example.com. # ... 130 IN PTR example.com. # ... </code> ++++ //Zadanie 11.// Dodaj przykładowe rekordy typu A, CNAME, MX i TXT i odpytaj o nie. Dla rekordu CNAME podaj nazwę domenową spoza swojej domeny. <html></small></html> ==== Zone transfer ==== Serwery slave ściągają kompletny plik strefy od serwerów master wykonując tzw. **zone transfer** [[https://en.wikipedia.org/wiki/DNS_zone_transfer|[1]]], czyli zapytanie AXFR. \\ Wymiana danych między serwerem master a serwerem slave (zone transfer) wykorzystuje TCP //Zadanie 12a.// Wykonaj zone transfer dla domeny [[https://digi.ninja/projects/zonetransferme.php|zonetransfer.me]] i porównaj wyniki z zapytaniem o wszystkie rekordy: * zone transfer: \\ ''host -al zonetransfer.me nsztm1.digi.ninja'' \\ ''dig @nsztm1.digi.ninja zonetransfer.me axfr'' * pytanie o wszystkie rekordy: \\ ''host -a zonetransfer.me nsztm1.digi.ninja'' \\ ''dig @nsztm1.digi.ninja zonetransfer.me any'' //Zadanie 12b.// Wykonaj zone transfer dla skonfigurowanej przez ciebie wcześniej domeny ==== Worek linków ==== * [[http://www.bind9.net/links]] * [[http://www.cs.put.poznan.pl/ddwornikowski/sieci/sieci2/dns.html#serwer-dns]] * [[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s1-bind]] \\ [[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s2-bind-zone]]
sk2/dns.1611662793.txt.gz
· ostatnio zmienione: 2021/01/26 13:06 przez
jkonczak
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Złóż / rozłóż wszystko
Do góry