====== 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: 214
Przykł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: 62
Wybó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.30
Wysył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.15
Serwery 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
++++