====== Domain Name System - odpytywanie serwerów ====== ===== FQDN ===== [[https://en.wikipedia.org/wiki/Domain_name|Nazwa domenowa]] składa się z etykiet oddzielanych kropkami – np. //%%www.cs.put.poznan.pl%%//. \\ Nazwy domenowe są zorganizowane hierarchicznie ([[https://pl.wikipedia.org/wiki/Domena_internetowa#/media/File:Dns-schemat.svg|w drzewo]]), stąd należy je "czytać" od końca. Skrajnie prawa etykieta nazywana jest [[https://en.wikipedia.org/wiki/Top-level_domain|domeną najwyższego poziomu]] (TLD, Top Level Domain). \\ Domeny są podzielone na krajowe (ccTLD, np. //.pl//, //.va//, stworzone od dwuliterowego kodu kraju) oraz generyczne (gTLD, np. //.cern//, //.family//) i sponsorowane (sTLD, np. //.edu//, //.gov//). [[http://www.iana.org/domains/root/db|Lista TLD]] jest jawna. Nad domenami TLD znajduje się [[https://en.wikipedia.org/wiki/DNS_root_zone|korzeń]] DNS (pusta etykieta). \\ O warunkach rejestracji poddomen w danej domenie decyduje jej właściciel. Nazwy domenowe mogą być [[https://en.wikipedia.org/wiki/Fully_qualified_domain_name|pełne kwalifikowane]] (FQDN, fully qualified domain name) lub względne (podobnie jak np. ścieżki do plików). ~~Zadanie.#~~ Porównaj wynik poniższych poleceń:
$ ping -c4 lab-net-55 $ ping -c4 lab-net-55.cs.put.poznan.pl ===== Drzewo DNS a serwery DNS ===== {{:sk2:dns.svg|}} Znając adresy IP serwerów odpowiedzialnych za korzeń można kolejno odpytywać serwery o ich poddomeny i w ten sposób znaleźć serwer odpowiedzialny za poszukiwaną nazwę domenową. ===== Role serwerów DNS ===== Serwery nazw można podzielić ze względu na pełnione zadanie na: * [[https://en.wikipedia.org/wiki/Root_name_server|root servers]] – odpowiadają za TLD; odpowiadają tylko na pytania o TLD, * [[https://en.wikipedia.org/wiki/Name_server#Authoritative_name_server|authoritative servers]] – wpisywane do serwerów nazw nadrzędnej domeny serwery odpowiedzialne za rozgłoszenie domeny w sieci; odpowiadają na pytania o swoją domenę, * [[https://en.wikipedia.org/wiki/Name_server#Caching_name_server|caching name servers]] – serwery zbierające informacje z powyższych, przeznaczone dla użytkowników końcowych (zwane czasem //public DNS//). ===== Zapytania DNS ===== Klienci odpytujący DNS korzystają zwykle z UDP. Do odpytywania serwerów DNS można używać np. komend: * ''host'' (uwaga, różne wersje: [[http://www.isc.org/software/bind|[1]]] [[http://www.weird.com/~woods/projects/host.html|[2]]] ) * ''dig -h'' * ''nslookup'' (zacznij od przeczytania ''man nslookup'') * ''dnstracer'' (pozwala przejść całe drzewo DFSem, np: ''dnstracer -c -o -s . assets.publishing.service.gov.uk.'' ) ~~Zadanie.#~~ Przetestuj poniższe zapytania: host lab-net-1.cs.put.poznan.pl dig +short lab-net-1.cs.put.poznan.pl dig +noall +answer lab-net-1.cs.put.poznan.pl dig lab-net-1.cs.put.poznan.pl dig www.cs.put.edu.pl dig wp.pl host student.put.poznan.pl ==== Rodzaje rekordów ==== Ważniejsze typy rekordów: | NS | Wskazuje serwer nazw dla domeny | | SOA | Start of Authority, istotny dla konfiguracji serwerów nazw | | CNAME| Alias na inną nazwę domenową ( ++ np. | \\ ''host -t cname %%www.cs.put.edu.pl%%'' \\ ''dig unixlab.cs.put.poznan.pl cname'' ++ ) | | A | Adres IPv4 | | AAAA | Adres IPv6 | | MX | Serwer odbierający pocztę dla domeny ( ++ np. | \\ ''host -t mx ngo.pl'' / ''dig ngo.pl mx'' ++ ) | | 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]], [[https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail|DKIM]] i [[https://dmarc.org/overview/|DMARC]]) ( ++ przykłady: | \\ Cokolwiek: ''dig akamai.net txt'' \\ Cokolwiek: ''host -t txt lenovo.com'' \\ SPF: ''dig student.put.poznan.pl txt'' \\ DKIM: ''host -t txt dkim1024._domainkey.allegro.pl'' \\ DMARC: ''dig +noall +answer _dmarc.um.poznan.pl txt'' ++ ) | | PTR | Nazwa domenowa odpowiadająca (odpowiednio zakodowanemu) adresowi IP | Więcej o różnych rodzajach rekordów możesz przeczytać [[https://www.cloudflare.com/learning/dns/dns-records/|tutaj]]. Pytanie o wskazany typ 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.#~~ Odpytaj kilka domen o wszystkie rekordy. Jakie typy rekordów głównie widzisz? Czy są to wszystkie rekordy dla tej domeny? ~~Zadanie.#~~ Wykonaj zapytania o odwzorowanie odwrotne (zapytanie o rekord PTR): host 150.254.30.233 dig -x 150.254.30.233 Jak adres IP jest przetwarzany na nazwę domenową o którą jest wysyłane zapytanie? ~~Zadanie.#~~ Zadaj zapytania odwrotne o adres IPv6. Jaka domena jest użyta? ==== Kogo pytamy? ==== System operacyjny Linux używa serwera DNS skonfigurowanego w pliku ''/etc/resolv.conf''. Dokumentacja możliwych wpisów w tym pliku jest w podręczniku systemowym (''man resolv.conf''). W narzędziach ''dig'' i ''host'' można ręczne wybrać serwer do którego kierowane są zapytania: * ''host //name// //server//'', np: \\ ''host pl.wikipedia.org dns.tpsa.pl'' \\ ''host pl.wikipedia.org one.one.one.one'' * ''dig @//server// //name//'', np: \\ ''dig @netia-dns1.inetia.pl pl.wikipedia.org'' \\ ''dig @dns9.quad9.net pl.wikipedia.org'' Przykładowe adresy publicznych serwerów DNS: * ''8.8.8.8'' oraz ''8.8.4.4'' [[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]] Serwery authoritative i caching – przypomnienie. ~~Zadanie.#~~ Porównaj rekordy zwrócone przez następujące wywołania programu ''dig'': dig +noall +answer @cns1a.atman.pl poznan.pl dig +noall +answer @ordns.he.net poznan.pl dig +noall +answer @bilbo.nask.org.pl poznan.pl Czy ponowne wykonanie tych poleceń zwróci takie same rekordy? Co oznacza druga kolumna wyników? ~~Zadanie.#~~ Znajdź w wynikach ''dig'' informację o tym, czy serwer ustawił flagę ''aa'' (authoritative answer) wskazującą że uznaje siebie za serwer authoritative dla wskazanej domeny. ~~Zadanie.#~~ Porównaj wynik zapytania o adres dowolnej strony z listy: https://hazard.mf.gov.pl/ pytając poniższe serwery DNS: \\ ''1.0.0.1'' ''ordns.he.net'' ''dns.tpsa.pl'' ''netia-dns1.inetia.pl'' \\ oraz serwer ustawiony jako domyślny w systemie operacyjnym. DNS wysyła zapytania otwartym tekstem co nie zapewnia prywatności, oraz używa protokołu UDP co upraszcza [[https://en.wikipedia.org/wiki/DNS_spoofing|spoofing]]. ==== Przykłady odpowiedzi na zapytania ==== ++++ Przykłady odpowiedzi na zapytania | Przykładowy wynik komendy ''dig'' – ogólny opis sekcji:$ dig +norecurse bip.put.poznan.pl @sol.put.poznan.pl ; <<>> DiG 9.16.48 <<>> +norecurse bip.put.poznan.pl @sol.put.poznan.pl ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54420 ;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 4 ;; QUESTION SECTION: ;bip.put.poznan.pl. IN A ;; ANSWER SECTION: bip.put.poznan.pl. 86400 IN A 89.191.148.30 ;; AUTHORITY SECTION: put.poznan.pl. 86400 IN NS orion.put.poznan.pl. put.poznan.pl. 86400 IN NS sunflower.man.poznan.pl. put.poznan.pl. 86400 IN NS sol.put.poznan.pl. ;; ADDITIONAL SECTION: sol.put.poznan.pl. 86400 IN AAAA 2001:808:201::5:11 orion.put.poznan.pl. 86400 IN AAAA 2001:808:201::5:4 sol.put.poznan.pl. 86400 IN A 150.254.5.11 orion.put.poznan.pl. 86400 IN A 150.254.5.4 ;; Query time: 57 msec ;; SERVER: 2001:808:201::5:11#53(2001:808:201::5:11) ;; WHEN: Thu Jan 1 01:00:00 CET 1970 ;; MSG SIZE rcvd: 214Przykładowy wynik komendy ''dig'' – flagi i treść rekordu:
$ dig bip.put.poznan.pl @sol.put.poznan.pl ; <<>> DiG 9.16.48 <<>> bip.put.poznan.pl @sol.put.poznan.pl ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54144 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;bip.put.poznan.pl. IN A ;; ANSWER SECTION: bip.put.poznan.pl. 86400 IN A 89.191.148.30 ;; Query time: 48 msec ;; SERVER: 2001:808:201::5:11#53(2001:808:201::5:11) ;; WHEN: Thu Jan 1 01:00:00 CET 1970 ;; MSG SIZE rcvd: 62Wybór wybranych sekcji z wyników ''dig''
$ dig +norecurse +noall +question bip.put.poznan.pl @sol.put.poznan.pl ;bip.put.poznan.pl. IN A $ dig +norecurse +noall +answer bip.put.poznan.pl @sol.put.poznan.pl bip.put.poznan.pl. 86400 IN A 89.191.148.30 $ dig +norecurse +noall +authority bip.put.poznan.pl @sol.put.poznan.pl put.poznan.pl. 86400 IN NS orion.put.poznan.pl. put.poznan.pl. 86400 IN NS sunflower.man.poznan.pl. put.poznan.pl. 86400 IN NS sol.put.poznan.pl. $ dig +norecurse +noall +additional bip.put.poznan.pl @sol.put.poznan.pl sol.put.poznan.pl. 86400 IN AAAA 2001:808:201::5:11 orion.put.poznan.pl. 86400 IN AAAA 2001:808:201::5:4 sol.put.poznan.pl. 86400 IN A 150.254.5.11 orion.put.poznan.pl. 86400 IN A 150.254.5.4 $ dig +norecurse +noall +question +answer bip.put.poznan.pl @sol.put.poznan.pl ;bip.put.poznan.pl. IN A bip.put.poznan.pl. 86400 IN A 89.191.148.30Wysyłanie kilku zapytań naraz
$ dig @sol.put.poznan.pl +norecurse +noall +question +answer www.put.poznan.pl A www.put.poznan.pl AAAA ;www.put.poznan.pl. IN A www.put.poznan.pl. 86400 IN CNAME maxine.put.poznan.pl. maxine.put.poznan.pl. 86400 IN A 150.254.5.114 ;www.put.poznan.pl. IN AAAA www.put.poznan.pl. 86400 IN CNAME maxine.put.poznan.pl. maxine.put.poznan.pl. 86400 IN AAAA 2001:808:201::5:114 $ dig @1.1.1.1 +noall +answer put.poznan.pl A put.poznan.pl MX put.poznan.pl TXT put.poznan.pl. 82927 IN A 150.254.5.114 put.poznan.pl. 78005 IN MX 0 sargas.put.poznan.pl. put.poznan.pl. 78005 IN MX 0 antares.put.poznan.pl. put.poznan.pl. 86398 IN TXT "v=spf1 ip4:150.254.5.18 ip4:150.254.5.16 ip4:150.254.5.15 ip4:150.254.5.14 ip4:150.254.5.28 -all" (…)Rekordy używane przez pocztę internetową
$ dig +noall +answer sejm.gov.pl MX sejm.gov.pl. 3600 IN MX 10 mx1.sejm.gov.pl. sejm.gov.pl. 3600 IN MX 5 mx2.sejm.gov.pl. $ dig +noall +answer _dmarc.sejm.gov.pl txt _dmarc.sejm.gov.pl. 3600 IN TXT "v=DMARC1; p=reject; aspf=s; adkim=s; rua=mailto:dmarc@sejm.gov.pl; ruf=mailto:dmarc@sejm.gov.pl;fo=1" $ dig +noall +answer put.poznan.pl TXT put.poznan.pl. 86398 IN TXT "v=spf1 ip4:150.254.5.18 ip4:150.254.5.16 ip4:150.254.5.15 ip4:150.254.5.14 ip4:150.254.5.28 -all" $ cat mail.eml (…) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=smtpapi; bh=… (…) $ dig +short smtpapi._domainkey.github.com txt "k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDPtW5iwpXVPiH5FzJ7Nrl8USzuY9zqqzjE0D1r04xDN6qwziDnmgcFNNfMewVKN2D1O+2J9N14hRprzByFwfQW76yojh54Xu3uSbQ3JP0A7k8o8GutRF8zbFUA8n0ZH2y0cIEjMliXY4W4LwPA7m4q0ObmvSjhd63O9d8z1XkUBwIDAQAB"Odwzorowania odwrotne ("IP" na nazwę domenową)
$ dig +noall +answer -x 150.254.5.15 15.5.254.150.in-addr.arpa. 86390 IN PTR mercury.put.poznan.pl. $ dig +noall +answer -x 2001:808:201::5:29 9.2.0.0.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.2.0.8.0.8.0.1.0.0.2.ip6.arpa. 86249 IN PTR kerio.put.poznan.pl.TTL – czas przez jaki rekord jest jeszcze ważny (i może być trzymany w cache'u)
$ for S in 1.0.0.1 ordns.he.net bilbo.nask.org.pl; do dig +noall +answer @$S nask.pl A; done nask.pl. 22 IN A 45.60.74.15 nask.pl. 579 IN A 45.60.74.15 nask.pl. 600 IN A 45.60.74.15Serwery cache mogą być skonfigurowane tak, by nie odpowiadać na wybrane nazwy domenowe bądź zmieniać treść odpowiedzi na wybrane nazwy domenowe; np. dla walki z niepłaceniem podatków od gier hazardowych czy blokowania reklam:
$ dig +noall +answer @dns.google casino.com casino.com. 120 IN A 159.203.128.199 $ dig +noall +answer @dns.tpsa.pl casino.com casino.com. 0 IN A 145.237.235.240 $ dig +noall +answer @dns.google tpc.googlesyndication.com tpc.googlesyndication.com. 30 IN A 216.58.215.65 $ dig +noall +answer @dns.adguard-dns.com tpc.googlesyndication.com tpc.googlesyndication.com. 3600 IN A 0.0.0.0 $ dig +noall +comments @adblock.dns.mullvad.net tpc.googlesyndication.com ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 49888 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1++++