Laborator 04: Serviciul de DNS

Demo: Funcționarea serviciului DNS

Pentru a verifica funcționarea serviciului DNS, putem folosi comenzi precum host sau dig care sunt aplicații de tip client DNS. Aceste aplicații interoghează server-ul DNS și afișează informațiile cerute.

Mai jos, aflăm adresa IP a domeniului hotnews.ro folosind host și dig:

student@eg106-pc:~$ host hotnews.ro
hotnews.ro has address 91.195.7.1
hotnews.ro mail is handled by 10 smtp.hotnews.ro.

student@eg106-pc:~$ dig hotnews.ro

; <<>> DiG 9.9.5-9ubuntu0.3-Ubuntu <<>> hotnews.ro
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11548
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;hotnews.ro.			IN	A

;; ANSWER SECTION:
hotnews.ro.		86388	IN	A	91.195.7.1

;; AUTHORITY SECTION:
hotnews.ro.		69394	IN	NS	ns-1701.awsdns-20.co.uk.
hotnews.ro.		69394	IN	NS	ns-1148.awsdns-15.org.
hotnews.ro.		69394	IN	NS	ns-943.awsdns-53.net.
hotnews.ro.		69394	IN	NS	ns-302.awsdns-37.com.

;; ADDITIONAL SECTION:
ns-302.awsdns-37.com.	22667	IN	A	205.251.193.46
ns-943.awsdns-53.net.	22667	IN	A	205.251.195.175
ns-1148.awsdns-15.org.	100500	IN	A	205.251.196.124
ns-1701.awsdns-20.co.uk. 22667	IN	A	205.251.198.165

;; Query time: 1 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Thu Dec 03 13:31:01 EET 2015
;; MSG SIZE  rcvd: 259

Observăm că output-ul dig este mai verbose afișând și informații despre serverele de nume autoritare pe domeniul hotnews.ro. Pentru același comportament din partea comenzii host putem folosi opțiunea -v a acestei comenzi:

student@eg106-pc:~$ host -v hotnews.ro
Trying "hotnews.ro"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35674
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;hotnews.ro.			IN	A

;; ANSWER SECTION:
hotnews.ro.		86129	IN	A	91.195.7.1
[...]

În mod similar, dacă dorim forma scurtă a comenzii dig folosim comanda

student@eg106-pc:~$ dig +short hotnews.ro
91.195.7.1

În comanda de mai sus am folosit pentru interogare serverul DNS configurat implicit în sistem, în fișierul /etc/resolv.conf. Dacă dorim să folosim alt server de nume (de exemplu 8.8.8.8) folosim comenzile în forma de mai jos

student@eg106-pc:~$ host hotnews.ro 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases: 

hotnews.ro has address 91.195.7.1
hotnews.ro mail is handled by 10 smtp.hotnews.ro.
student@eg106-pc:~$ dig +short hotnews.ro @8.8.8.8
91.195.7.1

De avut în vedere că o comandă de interogare DNS (precum host sau dig) folosește direct serviciul DNS. Nu accesează fișierul /etc/nsswitch.conf și nici resolver-ul sistemului (de obicei o bibliotecă). Putem observa acest lucru în output-ul comenzilor de mai jos:

student@eg106-pc:~$ strace -e open host hotnews.ro
[...[
open("/etc/resolv.conf", O_RDONLY)      = 6
hotnews.ro has address 91.195.7.1
hotnews.ro mail is handled by 10 smtp.hotnews.ro.
[...]

student@eg106-pc:~$ strace -e open ping -c 1 hotnews.ro
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
[...]
open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_myhostname.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
[...]

Observăm că folosirea comenzii host duce la interogarea directă a fișierului /etc/resolv.conf în vreme ce folosirea comenzii ping duce la interogarea configurației de resolver: sunt deschise și fișierul /etc/nsswitch.conf și /etc/hosts și bibliotecile aferente pentru NSS (Name Service Switch) culminând cu apelarea bibliotecii de resolving (libresolv.so.2).

Urmărire configurare server DNS

Pentru următoarele exerciții folosim mașina virtuală GSR Debian. Mașina virtuală o gasiti la adresa de mai jos (trebuie sa va logati cu credentialele de pe cs.curs.pub.ro):

https://repository.grid.pub.ro/cs/gsr/GSR%20Debian.ova

Dupa ce o descarcati, trebuie importata în VirtualBox (File → Import Appliance).

Pentru autentificarea în mașina virtuală folosim numele de utilizator student cu parola student. Ne putem conecta și prin SSH de pe sistemul fizic folosind comanda

student@eg106-pc:~$ ssh -l student 192.168.56.115
[...]
Last login: Thu Dec  3 13:57:01 2015
student@gsr-server:~$

Contul student are permisiuni privilegiate. Putem accesa drepturile de root folosind comanda

sudo su

Pe mașina virtuală este configurat numele de domeniu ixlabs. Putem interoga acest domeniu de pe sistemul fizic, folosind comanda host și folosind adresa IP a mașinii virtuale ca server DNS:

student@eg106-pc:~$ host ixlabs 192.168.56.115
Using domain server:
Name: 192.168.56.115
Address: 192.168.56.115#53
Aliases:

ixlabs has address 192.168.56.115
ixlabs mail is handled by 10 mail.ixlabs.

Alte comenzi de interogare a serverului DNS pot fi pentru a afla serverul de nume al domeniului sau serverul de e-mail al domeniului:

istudent@eg106-pc:~$ host -t NS ixlabs 192.168.56.115
Using domain server:
Name: 192.168.56.115
Address: 192.168.56.115#53
Aliases: 

ixlabs name server ns.ixlabs.
student@eg106-pc:~$ host -t MX ixlabs 192.168.56.115
Using domain server:
Name: 192.168.56.115
Address: 192.168.56.115#53
Aliases: 

ixlabs mail is handled by 10 mail.ixlabs.
student@eg106-pc:~$ host mail.ixlabs 192.168.56.115
Using domain server:
Name: 192.168.56.115
Address: 192.168.56.115#53
Aliases: 

mail.ixlabs has address 192.168.56.115
student@eg106-pc:~$ host ns.ixlabs. 192.168.56.115
Using domain server:
Name: 192.168.56.115
Address: 192.168.56.115#53
Aliases: 

ns.ixlabs has address 192.168.56.115

Pentru a verifica ce configurație avem definită pe serverul DNS inspectăm, în mașina virtuală, configurările serverului:

istudent@gsr-server:/etc/bind$ cat named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "ixlabs." {
	type master;
	file "/etc/bind/db.ixlabs";
};

student@gsr-server:/etc/bind$ cat db.ixlabs
;
; BIND data file for ixlabs.
;
$TTL	604800
@	IN	SOA	ixlabs. root.ixlabs. (
			2015111901	; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	ns
ns	IN	A	192.168.56.115
@	IN	A	192.168.56.115
@	IN	MX	10 mail
mail	IN	A	192.168.56.115

De aici observăm că serverul DNS configurat pe mașina virtuală este autoritar pe domeniul ixlabs și are configurat serverul de nume (înregistrare de tipul NS) și serverul de e-mail (înregistrare de tipul MX).

Modificare configurare server DNS

În continuare vom configura pe sistemul fizic ca server DNS adresa IP a mașinii virtuale (adică 192.168.56.115). Adică trebuie să scriem adresa 192.168.56.115 în fișierul /etc/resolv.conf.

Întrucât clientul de DHCP (dhclient) poate modifica adresa IP a sistemului fizic și poate suprascrie fișierul /etc/resolv.conf, vom dezactiva Network Manager și client DHCP. Adică vom urma pașii de mai jos:

  1. Aflăm interfața activă, adresa IP a sistemului fizic și default gateway-ul:
    student@eg106-pc:~$ ip a s
    [...]
    2: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 70:71:bc:08:25:c6 brd ff:ff:ff:ff:ff:ff
        inet 172.16.5.11/22 brd 172.16.7.255 scope global eth4
           valid_lft forever preferred_lft forever
    [...]
    student@eg106-pc:~$ ip r s
    default via 172.16.4.254 dev eth4
    172.16.4.0/22 dev eth4  proto kernel  scope link  src 172.16.5.11
    172.16.242.0/24 dev vmnet8  proto kernel  scope link  metric 100
    192.168.56.0/24 dev vboxnet0  proto kernel  scope link  metric 100
    192.168.108.0/24 dev vmnet1  proto kernel  scope link  metric 100
    <code> În cazul de mai sus (va diferi pe sistemul vostru), interfața activă este ''eth4'', adresa IP este ''172.16.5.11/22'' iar adresa de broadcast este ''172.16.4.254''.
      - Dezactivăm configurațiile curente realizate de ''NetworkManager''/''dhclient'' și încheiem execuția acestor procese:<code>
    student@eg106-pc:~$ sudo ip a f eth4
    student@eg106-pc:~$ sudo service network-manager stop
    student@eg106-pc:~$ sudo pkill -f dhclient
    student@eg106-pc:~$ ip a s eth4
    2: eth4: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
        link/ether 70:71:bc:08:25:c6 brd ff:ff:ff:ff:ff:ff
    student@eg106-pc:~$ ps -ef | grep dhclient
    student   3958  3481  0 14:45 pts/2    00:00:00 grep --color=auto dhclient
  2. Configurăm static adresa IP de mai sus și default gateway-ul:
    student@eg106-pc:~$ sudo ip a a 172.16.5.11/22 dev eth4
    student@eg106-pc:~$ sudo ip l s dev eth4 up
    student@eg106-pc:~$ sudo ip r a default via 172.16.4.254
    student@eg106-pc:~$ ip r s
    default via 172.16.4.254 dev eth4
    172.16.4.0/22 dev eth4  proto kernel  scope link  src 172.16.5.11
  3. Reactivăm interfața vboxnet0 pentru a permite comunicarea prin SSH dintre sistemul fizic și mașina virtuală VirtualBox:
    student@eg106-pc:~$ vboxmanage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0
    student@eg106-pc:~$ ip r s
    default via 172.16.4.254 dev eth4
    172.16.4.0/22 dev eth4  proto kernel  scope link  src 172.16.5.11
    192.168.56.0/24 dev vboxnet0  proto kernel  scope link  src 192.168.56.1
  4. Configurăm adresa IP a mașinii virtuale ca server de DNS în fișierul /etc/resolv.conf
    student@eg106-pc:~$ sudo vi /etc/resolv.conf
    student@eg106-pc:~$ cat /etc/resolv.conf
    nameserver 192.168.56.115
    student@eg106-pc:~$ host ixlabs
    ixlabs has address 192.168.56.115
    ixlabs mail is handled by 10 mail.ixlabs.
    student@eg106-pc:~$ host -NS ixlabs
    ixlabs has address 192.168.56.115
    ixlabs mail is handled by 10 mail.ixlabs.

Dacă pe parcursul laboratorului apar probleme de conectare, se pot rerula pașii de mai sus pentru reconfigurarea interfeței active a sistemului fizic.

Pe configurația curentă a serverului DNS, dacă încercăm să aflăm adresa IP a unor stații din afara domeniului ixlabs, aceste cereri vor eșua:

student@eg106-pc:~$ host google.com
Host google.com not found: 2(SERVFAIL)

Pentru aceasta putem opta pentru una din două configurații pentru serverul de DNS: un caching DNS server (numit și resolver) care va primi cereri recursive de la clienți, sau un forwarding DNS server care va transmite cereri mai departe la alte servere DNS (cele inițiale). Puteți opta pentru oricare dintre configurațiile de mai jos.

Configurare caching DNS server

Pentru a configura un server DNS de tip caching resolver, va trebui să definim o listă de control a accesului și să activăm posibilitatea primirii de cereri recursive. Pentru aceasta operăm, pe mașina virtuală, în directorul /etc/bind/ corespunzătorul serverului DNS, modificările indicate mai jos:

student@gsr-server:/etc/bind$ cat named.conf.options
acl goodclients {
	192.168.56.0/24;
	localhost;
	localnets;
};

options {
[...]
	recursion yes;
	allow-query { goodclients; };
[...]
};

În output-ul de mai sus am selectat liniile care trebuie adăugate în fișierul /etc/bind/named.conf.options.

Apoi repornim serviciul bind9 și verificăm repornirea sa cu succes:

student@gsr-server:/etc/bind$ sudo service bind9 restart

student@gsr-server:/etc/bind$ sudo tail /var/log/daemon.log
Dec  3 15:05:42 gsr-server named[1146]: managed-keys-zone: journal file is out of date: removing journal file
Dec  3 15:05:42 gsr-server named[1146]: managed-keys-zone: loaded serial 3
Dec  3 15:05:42 gsr-server named[1146]: zone 0.in-addr.arpa/IN: loaded serial 1
Dec  3 15:05:42 gsr-server named[1146]: zone 127.in-addr.arpa/IN: loaded serial 1
Dec  3 15:05:42 gsr-server named[1146]: zone 255.in-addr.arpa/IN: loaded serial 1
Dec  3 15:05:42 gsr-server named[1146]: zone ixlabs/IN: loaded serial 2015111901
Dec  3 15:05:42 gsr-server named[1146]: zone localhost/IN: loaded serial 2
Dec  3 15:05:42 gsr-server named[1146]: all zones loaded
Dec  3 15:05:42 gsr-server named[1146]: running
Dec  3 15:05:42 gsr-server named[1146]: zone ixlabs/IN: sending notifies (serial 2015111901)

student@gsr-server:/etc/bind$ sudo netstat -ulpn | grep named
udp        0      0 192.168.56.115:53       0.0.0.0:*                           1146/named
udp        0      0 10.0.2.15:53            0.0.0.0:*                           1146/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           1146/named
udp6       0      0 :::53                   :::*                                1146/named

Acum putem, de pe sistemul fizic, să interogăm serverul DNS de pe mașina virtuală și pentru domenii pentru care nu este autoritar și acesta va rezolva cererile și va oferi răspunsul:

student@eg106-pc:~$ host google.com
google.com has address 217.73.160.226
google.com has address 217.73.160.230
google.com has address 217.73.160.221
[...]

Configurare forwarding DNS server

Putem configura serverul DNS de pe mașina virtuală ca server de forwarding. Acesta va retransmite cererile recursive primite către alte servere DNS care să facă rezolvarea. În cazul nostru vom folosi serverele DNS inițial configurate pentru rețeaua laboratorului, adică 141.85.226.5 și 141.85.241.113. Pentru aceasta operăm, pe mașina virtuală, în directorul /etc/bind/ corespunzătorul serverului DNS, modificările indicate mai jos:

student@gsr-server:/etc/bind$ sudo vi named.conf.options    
student@gsr-server:/etc/bind$ cat named.conf.options 
acl goodclients {
	192.168.56.0/24;
	localhost;
	localnets;
};

options {
[...]
	forwarders {
		141.85.226.5;
		141.85.241.113;
	};
	forward only;
	allow-query { goodclients; };
[...]
};

În output-ul de mai sus am selectat liniile care trebuie adăugate în fișierul /etc/bind/named.conf.options.

Apoi repornim serviciul bind9 și verificăm repornirea sa cu succes:

student@gsr-server:/etc/bind$ sudo service bind9 restart

student@gsr-server:/etc/bind$ sudo tail /var/log/daemon.log
Dec  3 15:22:35 gsr-server named[1301]: command channel listening on ::1#953
Dec  3 15:22:35 gsr-server named[1301]: managed-keys-zone: loaded serial 3
Dec  3 15:22:35 gsr-server named[1301]: zone 0.in-addr.arpa/IN: loaded serial 1
Dec  3 15:22:35 gsr-server named[1301]: zone 127.in-addr.arpa/IN: loaded serial 1
Dec  3 15:22:35 gsr-server named[1301]: zone 255.in-addr.arpa/IN: loaded serial 1
Dec  3 15:22:35 gsr-server named[1301]: zone ixlabs/IN: loaded serial 2015111901
Dec  3 15:22:35 gsr-server named[1301]: zone localhost/IN: loaded serial 2
Dec  3 15:22:35 gsr-server named[1301]: all zones loaded
Dec  3 15:22:35 gsr-server named[1301]: running
Dec  3 15:22:35 gsr-server named[1301]: zone ixlabs/IN: sending notifies (serial 2015111901)
student@gsr-server:/etc/bind$ sudo netstat -ulpn | grep named
udp        0      0 192.168.56.115:53       0.0.0.0:*                           1301/named      
udp        0      0 10.0.2.15:53            0.0.0.0:*                           1301/named      
udp        0      0 127.0.0.1:53            0.0.0.0:*                           1301/named      
udp6       0      0 :::53                   :::*                                1301/named 

Acum putem, de pe sistemul fizic, să interogăm serverul DNS de pe mașina virtuală și pentru domenii pentru care nu este autoritar și acesta va rezolva cererile și va oferi răspunsul:

istudent@eg106-pc:~$ host google.com
google.com has address 217.73.160.226
google.com has address 217.73.160.230
google.com has address 217.73.160.221
[...]

Adăugare o nouă înregistrare

Ne propunem să adăugăm o nouă înregistrare în server-ul de DNS. Să mapăm adresa IP a sistemului fizic la numele host.ixlabs. Pentru aceasta operăm, în mașina virtuală, în directorul /etc/bind, modificările de mai jos

istudent@gsr-server:/etc/bind$ sudo vi db.ixlabs
student@gsr-server:/etc/bind$ cat db.ixlabs
[...]
host	IN	A	192.168.56.1

Înregistrarea de mai sus, adăugată în cadrul fișierului /etc/bind/db.ixlabs, fișier de configurare a zonei ixlabs, face maparea dorită.

Repornim serverul de nume

student@gsr-server:/etc/bind$ sudo service bind9 restart

și apoi, de pe sistemul fizic, validăm adăugarea noii întrări:

student@eg106-pc:~$ host host.ixlabs
host.ixlabs has address 192.168.56.1
student@eg106-pc:~$ ping host.ixlabs
PING host.ixlabs (192.168.56.1) 56(84) bytes of data.
64 bytes from eg106-pc (192.168.56.1): icmp_seq=1 ttl=64 time=0.045 ms
64 bytes from eg106-pc (192.168.56.1): icmp_seq=2 ttl=64 time=0.042 ms

Delegare server DNS

Vrem să configurăm host.ixlabs ca domeniu pe sistemul fizic delegat de serverul DNS de pe mașina virtuală. Pentru aceasta vom urma doi pași:

  1. Instalăm serverul bind9 pe sistemul fizic și îl configurăm să fie autoritar pe domeniul host.ixlabs.
  2. Delegăm din serverul de pe mașina virtuală domeniul host.ixlabs pe sistemul fizic.

Instalare și configurare domeniu ''host.ixlabs''

Pentru început instalăm pachetul bind9 pe sistemul fizic și verificăm pornirea serverului bind9

student@eg106-pc:~$ sudo apt-get install bind9
[...]

student@eg106-pc:~$ sudo service bind9 restart
student@eg106-pc:~$ sudo netstat -ulpn | grep named
udp        0      0 192.168.56.1:53         0.0.0.0:*                           5565/named
udp        0      0 172.16.5.11:53          0.0.0.0:*                           5565/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           5565/named
udp6       0      0 :::53                   :::*                                5565/named

Apoi adăugăm configurația pentru zona host.ixlabs și verificăm configurația:

student@eg106-pc:/etc/bind$ vi named.conf.local
student@eg106-pc:/etc/bind$ cat named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "host.ixlabs" {
	type master;
	file "/etc/bind/db.host.ixlabs";
};

student@eg106-pc:/etc/bind$ named-checkconf named.conf.local 

Apoi adăugăm fișierul de configurare a zonei, pornind de la un fișier existent și verificăm configurația:

student@eg106-pc:/etc/bind$ sudo cp db.local db.host.ixlabs
student@eg106-pc:/etc/bind$ sudo vi db.host.ixlabs
student@eg106-pc:/etc/bind$ cat db.host.ixlabs
;
; BIND data file for host.ixlabs domain.
;
$TTL	604800
@	IN	SOA	ns.host.ixlabs. root.host.ixlabs. (
			      2		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	ns
@	IN	A	192.168.56.1
ns	IN	A	192.168.56.1

student@eg106-pc:/etc/bind$ named-checkzone host.ixlabs db.host.ixlabs
zone host.ixlabs/IN: loaded serial 2
OK

Repornim acum serviciul:

student@eg106-pc:/etc/bind$ sudo service bind9 restart

și verificăm configurația locală

student@eg106-pc:/etc/bind$ host host.ixlabs localhost
Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases:

host.ixlabs has address 192.168.56.1
student@eg106-pc:/etc/bind$ host -t NS host.ixlabs localhost
Using domain server:
Name: localhost
Address: 127.0.0.1#53
Aliases:

host.ixlabs name server ns.host.ixlabs.

Delegare domeniu ''host.ixlabs''

Ca să facem legătura în domeniul ixlabs și subdomeniul host.ixlabs, vom configura delegare în cadrul serverului bind9 de pe mașina virtuală. Pentru aceasta vom altera fișierul de configurare a zonei ixlabs (/etc/bind/db.ixlabs).

gsr/laboratoare/laborator-04.txt · Last modified: 2016/11/02 23:31 by alexandru.carp
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0