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
).
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).
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:
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
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
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
/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.
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 [...]
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 [...]
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
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:
bind9
pe sistemul fizic și îl configurăm să fie autoritar pe domeniul host.ixlabs
.host.ixlabs
pe sistemul fizic.
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.
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
).