MATERIAŁY DO PRZEDMIOTU SKO1 - LEKCJA 3 DNS





Część 1: DNS - Domain Name System


Dokumenty RFC:

  • RFC-819 The Domain Naming Convention for Internet User Applications (1982)
  • RFC-1034 DOMAIN NAMES - CONCEPTS AND FACILITIES (1987)
  • RFC-1035 DOMAIN NAMES - IMPLEMENTATION and SPECIFICATION (1987)

Protokół tłumaczący nazwy na adresy IP. Port 53 UDP (przede wszystkim)
Szczegółowy opis: http://pl.wikipedia.org/wiki/DNS

Pakiet DNS dzieli się na sekcje:
- zapytania
- odpowiedzi
- zarządcy domeny
- dodatkowych informacji

Do zobrazowania działania DNS'a użyjemy program dig
Będziemy chcieli uzyskać adres serwera uczelni PJWSTK zaczynając od końca adresu (czyli od domyślnej kropki).
Pytamy o '.' (kropkę)

Zuerst:~ # dig

; <<>> DiG 9.3.2 <<>>
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53127
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       457328  IN      NS      J.ROOT-SERVERS.NET.
.                       457328  IN      NS      K.ROOT-SERVERS.NET.
.                       457328  IN      NS      L.ROOT-SERVERS.NET.
.                       457328  IN      NS      M.ROOT-SERVERS.NET.
.                       457328  IN      NS      A.ROOT-SERVERS.NET.
.                       457328  IN      NS      B.ROOT-SERVERS.NET.
.                       457328  IN      NS      C.ROOT-SERVERS.NET.
.                       457328  IN      NS      D.ROOT-SERVERS.NET.
.                       457328  IN      NS      E.ROOT-SERVERS.NET.
.                       457328  IN      NS      F.ROOT-SERVERS.NET.
.                       457328  IN      NS      G.ROOT-SERVERS.NET.
.                       457328  IN      NS      H.ROOT-SERVERS.NET.
.                       457328  IN      NS      I.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
A.ROOT-SERVERS.NET.     24527   IN      A       198.41.0.4
B.ROOT-SERVERS.NET.     32998   IN      A       192.228.79.201
C.ROOT-SERVERS.NET.     29309   IN      A       192.33.4.12
D.ROOT-SERVERS.NET.     29308   IN      A       128.8.10.90
E.ROOT-SERVERS.NET.     32997   IN      A       192.203.230.10
F.ROOT-SERVERS.NET.     32997   IN      A       192.5.5.241
G.ROOT-SERVERS.NET.     32997   IN      A       192.112.36.4
H.ROOT-SERVERS.NET.     32997   IN      A       128.63.2.53
I.ROOT-SERVERS.NET.     32998   IN      A       192.36.148.17
J.ROOT-SERVERS.NET.     24527   IN      A       192.58.128.30
K.ROOT-SERVERS.NET.     32998   IN      A       193.0.14.129
L.ROOT-SERVERS.NET.     32998   IN      A       198.32.64.12
M.ROOT-SERVERS.NET.     32998   IN      A       202.12.27.33

;; Query time: 14 msec
;; SERVER: 213.241.79.37#53(213.241.79.37)
;; WHEN: Tue Apr 10 01:37:46 2007
;; MSG SIZE  rcvd: 436

Odpowiedziały nam serwery główne tzw "root-serwery".
Lokalizacje serwerów głównych dns: http://en.wikipedia.org/wiki/Root_nameserver
oraz mapka (kopia z wikipedii): Root-current.svg

Wybieramy jeden z nich i pytamy się o 'pl.'

Zuerst:~ # dig  -t ns pl @a.root-servers.net

; <<>> DiG 9.3.2 <<>> -t ns pl @a.root-servers.net
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40739
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 9

;; QUESTION SECTION:
;pl.                            IN      NS

;; AUTHORITY SECTION:
pl.                     172800  IN      NS      B-DNS.pl.
pl.                     172800  IN      NS      C-DNS.pl.
pl.                     172800  IN      NS      D-DNS.pl.
pl.                     172800  IN      NS      E-DNS.pl.
pl.                     172800  IN      NS      F-DNS.pl.
pl.                     172800  IN      NS      G-DNS.pl.
pl.                     172800  IN      NS      A-DNS.pl.

;; ADDITIONAL SECTION:
A-DNS.pl.               172800  IN      A       195.187.245.44
B-DNS.pl.               172800  IN      A       80.50.50.10
C-DNS.pl.               172800  IN      A       193.171.255.47
D-DNS.pl.               172800  IN      A       213.172.174.70
E-DNS.pl.               172800  IN      A       213.218.118.26
F-DNS.pl.               172800  IN      A       217.17.46.189
F-DNS.pl.               172800  IN      AAAA    2001:1a68:0:10::189
G-DNS.pl.               172800  IN      A       149.156.1.6
G-DNS.pl.               172800  IN      AAAA    2001:6d8:0:1::a:6

;; Query time: 145 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Tue Apr 10 01:40:50 2007
;; MSG SIZE  rcvd: 328

Odpowiedziały nam serwery odpowiedzialne za domenę pl.
Wybieramy jeden z nich i pytamy się o 'edu.pl.'

Zuerst:~ # dig  -t ns edu.pl @c-dns.pl.

; <<>> DiG 9.3.2 <<>> -t ns edu.pl @c-dns.pl.
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43580
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 8

;; QUESTION SECTION:
;edu.pl.                                IN      NS

;; AUTHORITY SECTION:
edu.pl.                 86400   IN      NS      a-dns.pl.
edu.pl.                 86400   IN      NS      b-dns.pl.
edu.pl.                 86400   IN      NS      d-dns.pl.
edu.pl.                 86400   IN      NS      e-dns.pl.
edu.pl.                 86400   IN      NS      f-dns.pl.
edu.pl.                 86400   IN      NS      g-dns.pl.

;; ADDITIONAL SECTION:
a-dns.pl.               86400   IN      A       195.187.245.44
b-dns.pl.               86400   IN      A       80.50.50.10
d-dns.pl.               86400   IN      A       213.172.174.70
e-dns.pl.               86400   IN      A       213.218.118.26
f-dns.pl.               86400   IN      A       217.17.46.189
f-dns.pl.               86400   IN      AAAA    2001:1a68:0:10::189
g-dns.pl.               86400   IN      A       149.156.1.6
g-dns.pl.               86400   IN      AAAA    2001:6d8:0:1::a:6

;; Query time: 43 msec
;; SERVER: 193.171.255.47#53(193.171.255.47)
;; WHEN: Tue Apr 10 01:43:54 2007
;; MSG SIZE  rcvd: 296

i tak dalej...

Zuerst:~ # dig  -t ns pjwstk.edu.pl @80.50.50.10

; <<>> DiG 9.3.2 <<>> -t ns pjwstk.edu.pl @80.50.50.10
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32935
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;pjwstk.edu.pl.                 IN      NS

;; AUTHORITY SECTION:
pjwstk.edu.pl.          86400   IN      NS      dns.pjwstk.edu.pl.
pjwstk.edu.pl.          86400   IN      NS      pjb.pjwstk.edu.pl.

;; ADDITIONAL SECTION:
dns.pjwstk.edu.pl.      86400   IN      A       148.81.141.10
pjb.pjwstk.edu.pl.      86400   IN      A       80.53.134.186

;; Query time: 19 msec
;; SERVER: 80.50.50.10#53(80.50.50.10)
;; WHEN: Tue Apr 10 01:46:56 2007
;; MSG SIZE  rcvd: 99

z rekordu typu A w sekcji dodatkowej widzimy, że:
dns.pjwstk.edu.pl. to 148.81.141.10
i jest on odpowiedzialny za domenę pjwstk.edu.pl.

Typy rekordów DNS:

A               adres hosta (ipV4)
AAAA            adres hosta (ipV6)
NS              autorytatywny serwer nazw (serwer, który trzyma informację o domenie)
CNAME           alias (mapowanie nazwy na nazwe)
SOA             początek odpowiedzialności za domenę (informacja o komputerze obsługującym domenę)
PTR             wskaźnik odwracający adres IP na nazwę hosta (odwrotny DNS)
HINFO           informacja o hoście
MX              nazwa serwera poczty dla tej domeny

Tutorial DNS - Ethereal można pobrać -> TU





Część 2: DOMENA in-addr.arpa i zdobywanie nazw z IPv4


domena służąca do "odwracania" adresów IP (domyślnie IPv4) na nazwy domen.

Przykładowo jeżeli chcemy dowiedzieć się jaka nazwa dns jest przypisana do
ipV4:148.81.141.10 pytamy o 10.141.81.148.in-addr.arpa

Inne subdomeny domeny arpa "odwracają" inne typy adresów:

źródło: wikipedia
    * e164.arpa - ENUM lookup mapping telephone numbers into DNS
    * in-addr.arpa - reverse DNS lookup for IPv4 addresses
    * iris.arpa - For use in CRISP
    * ip6.arpa - reverse DNS lookup for IPv6 addresses
    * uri.arpa - for dynamic discovery of URI addressing schemes
    * urn.arpa - for dynamic discovery of URN addressing schemes


host - Program działający podobnie do dig. Wykonuje różnego rodzaju translacje IPv4 -> dns; IPv6 -> dns i odwrotnie.
Przykład użycia:

tomek@Zuerst:~/tmp> host dns.pjwstk.edu.pl
dns.pjwstk.edu.pl has address 148.81.141.10
dns.pjwstk.edu.pl has IPv6 address 2001:808:102::a1a

tomek@Zuerst:~/tmp> host 148.81.141.10
10.141.81.148.in-addr.arpa domain name pointer dns.pjwstk.edu.pl.

jak widzimy z pierwszego polecenia program zdobył adresy IP V4 oraz V6; z drugiego otrzymaliśmy pointer na dns.pjwstk.edu.pl
W drugim poleceniu program host automatycznie przetłumaczył nasz szukany IP na format odpowiadający "in-addr.arpa".

Poniżej okienko ze sniffera.

host_sniffing

pakiety nr 1, 3 i 5 odpowiadają kolejnym zapytaniom dns, które wywołaliśmy poleceniem pierwszym.
pakiety nr 2, 4 i 6 odpowiadają odpowiedziom na powyższe zapytania (czyli pola IPv4, IPv6, MX)

polecenie drugie powoduje wysłanie pakietu nr 11 (pytanie o typ rekordu PTR).
odpowiedź na to pytanie to pakiet nr 12 który jest zaznaczony i widoczny w obszarze środkowym sniffera.
widzimy, że podany adres ip odpowiada domenie dns.pjwstk.edu.pl.


jeżeli chcemy sprawdzić jakieś dodatkowe ip z tej podsieci możemy spróbować przetłumaczyć kolejne IP...
czy znacie te subdomeny ? :)

tomek@Zuerst:~/tmp> host 148.81.141.11
11.141.81.148.in-addr.arpa domain name pointer exch.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.12
12.141.81.148.in-addr.arpa domain name pointer jlab.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.13
13.141.81.148.in-addr.arpa domain name pointer nano.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.14
14.141.81.148.in-addr.arpa domain name pointer ufo.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.15
15.141.81.148.in-addr.arpa domain name pointer npa.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.16
16.141.81.148.in-addr.arpa domain name pointer www.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.17
17.141.81.148.in-addr.arpa domain name pointer io.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.18
Host 18.141.81.148.in-addr.arpa not found: 3(NXDOMAIN)
tomek@Zuerst:~/tmp> host 148.81.141.19
19.141.81.148.in-addr.arpa domain name pointer poczta.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.20
20.141.81.148.in-addr.arpa domain name pointer edu.pjwstk.edu.pl.


Ćwiczenie: sprawdzić poleceniem host inne zakresy ip i odkryć resztę szkolnych serwerów

Dla lubiących bash'a proponuję wykorzystać poniższy skrypt ;)
Skrypt tłumaczy ip z podanego zakresu i wyciąga wartość TTL z ping'a (rozpoznawanie Sys.Op. według wartości TTL)

#!/bin/bash
liczba=1
while [ $liczba -lt 120 ]
do
   host 148.81.141.$liczba
   ping -c 1 148.81.141.$liczba | grep ttl | cut -d" " -f 6
   liczba=`expr $liczba + 1`
done




Valid HTML 4.01 Transitional

created by Tomasz Kaszuba (2006-2008)