This shows you the differences between two versions of the page.
gsr:laboratoare:laborator-04 [2015/11/05 17:26] alexandru.carp [mod_rewrite] |
gsr:laboratoare:laborator-04 [2016/11/02 23:31] (current) alexandru.carp [Urmărire configurare server DNS] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Laborator 04: Serverul web ====== | + | ~~SHOWSOLUTION~~ |
+ | |||
+ | ====== 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'':<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | 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:<code> | ||
+ | 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 | ||
+ | [...] | ||
+ | </code> | ||
+ | |||
+ | În mod similar, dacă dorim forma scurtă a comenzii ''dig'' folosim comanda<code> | ||
+ | student@eg106-pc:~$ dig +short hotnews.ro | ||
+ | 91.195.7.1 | ||
+ | </code> | ||
+ | |||
+ | Î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<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | 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:<code> | ||
+ | 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 | ||
+ | [...] | ||
+ | </code> | ||
+ | |||
+ | 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 ===== | ||
+ | |||
+ | <note important> | ||
+ | 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<code> | ||
+ | student@eg106-pc:~$ ssh -l student 192.168.56.115 | ||
+ | [...] | ||
+ | Last login: Thu Dec 3 13:57:01 2015 | ||
+ | student@gsr-server:~$ | ||
+ | </code> | ||
+ | |||
+ | Contul ''student'' are permisiuni privilegiate. Putem accesa drepturile de ''root'' folosind comanda<code> | ||
+ | sudo su | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | 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:<code> | ||
+ | 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. | ||
+ | </code> | ||
+ | |||
+ | Alte comenzi de interogare a serverului DNS pot fi pentru a afla serverul de nume al domeniului sau serverul de e-mail al domeniului:<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | Pentru a verifica ce configurație avem definită pe serverul DNS inspectăm, **în mașina virtuală**, configurările serverului:<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | 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 ===== | ||
+ | |||
+ | <note> | ||
+ | Î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: | ||
+ | - Aflăm interfața activă, adresa IP a sistemului fizic și default gateway-ul:<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | - Configurăm static adresa IP de mai sus și default gateway-ul:<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | - Reactivăm interfața ''vboxnet0'' pentru a permite comunicarea prin SSH dintre sistemul fizic și mașina virtuală VirtualBox:<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | - Configurăm adresa IP a mașinii virtuale ca server de DNS în fișierul ''/etc/resolv.conf''<code> | ||
+ | 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. | ||
+ | </code> | ||
+ | |||
+ | Dacă pe parcursul laboratorului apar probleme de conectare, se pot rerula pașii de mai sus pentru reconfigurarea interfeței active a sistemului fizic. | ||
+ | </note> | ||
+ | |||
+ | 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:<code> | ||
+ | student@eg106-pc:~$ host google.com | ||
+ | Host google.com not found: 2(SERVFAIL) | ||
+ | </code> | ||
+ | |||
+ | 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:<code> | ||
+ | student@gsr-server:/etc/bind$ cat named.conf.options | ||
+ | acl goodclients { | ||
+ | 192.168.56.0/24; | ||
+ | localhost; | ||
+ | localnets; | ||
+ | }; | ||
+ | |||
+ | options { | ||
+ | [...] | ||
+ | recursion yes; | ||
+ | allow-query { goodclients; }; | ||
+ | [...] | ||
+ | }; | ||
+ | </code> | ||
+ | Î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:<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | 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:<code> | ||
+ | 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 | ||
+ | [...] | ||
+ | </code> | ||
+ | |||
+ | ==== 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:<code> | ||
+ | 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; }; | ||
+ | [...] | ||
+ | }; | ||
+ | </code> | ||
+ | Î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:<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | 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:<code> | ||
+ | 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 | ||
+ | [...] | ||
+ | </code> | ||
+ | |||
+ | ===== 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<code> | ||
+ | istudent@gsr-server:/etc/bind$ sudo vi db.ixlabs | ||
+ | student@gsr-server:/etc/bind$ cat db.ixlabs | ||
+ | [...] | ||
+ | host IN A 192.168.56.1 | ||
+ | </code> | ||
+ | Î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<code> | ||
+ | student@gsr-server:/etc/bind$ sudo service bind9 restart | ||
+ | </code> | ||
+ | și apoi, de pe **sistemul fizic**, validăm adăugarea noii întrări:<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | ===== 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: | ||
+ | - Instalăm serverul ''bind9'' pe sistemul fizic și îl configurăm să fie autoritar pe domeniul ''host.ixlabs''. | ||
+ | - 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''<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | Apoi adăugăm configurația pentru zona ''host.ixlabs'' și verificăm configurația:<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | Apoi adăugăm fișierul de configurare a zonei, pornind de la un fișier existent și verificăm configurația:<code> | ||
+ | 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 | ||
+ | </code> | ||
+ | |||
+ | Repornim acum serviciul:<code> | ||
+ | student@eg106-pc:/etc/bind$ sudo service bind9 restart | ||
+ | </code> | ||
+ | și verificăm configurația locală<code> | ||
+ | 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. | ||
+ | </code> | ||
+ | |||
+ | ==== 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''). | ||
+ | |||
+ | |||
+ | /* | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
Line 309: | Line 794: | ||
Modulul ''rewrite'' din Apache permite rescrierea URL-urilor din request-urile HTTP, dupa anumite reguli. | Modulul ''rewrite'' din Apache permite rescrierea URL-urilor din request-urile HTTP, dupa anumite reguli. | ||
- | * Configurati ''mod_rewrite'' astfel incat folosirea hostname-ului ''gsr.ro'' in URL sa duca la suprascrierea acestuia cu ''www.gsr.ro'' | + | * Configurati, ca in Laboratorul 3, modulul ''userdir''. |
+ | * Hint: http://ocw.cs.pub.ro/courses/gsr/laboratoare/laborator-03#userdir | ||
+ | * Folositi ''mod_userdir'' astfel incat cererile catre URL-uri de forma ''gsr.ro/users/$username'' sa fie rescrise in ''gsr.ro/~$username''. | ||
* Hint: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html | * Hint: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html | ||
* Hint: http://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalhost | * Hint: http://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#canonicalhost | ||
Line 319: | Line 806: | ||
To activate the new configuration, you need to run: | To activate the new configuration, you need to run: | ||
service apache2 restart | service apache2 restart | ||
- | + | | |
- | root@mjolnir:/etc/apache2/sites-available# cat gsr.ro | tail -n 7 | + | root@mjolnir:/etc/apache2/sites-available# cat gsr.ro | tail -n 5 |
- | RewriteEngine On | + | |
- | RewriteOptions Inherit | + | |
- | RewriteCond %{HTTP_HOST} !^www\.gsr\.ro [NC] | + | |
- | RewriteCond %{HTTP_HOST} !^$ | + | |
- | RewriteRule ^/?(.*) http://www.gsr.ro/$1 [L,R,NE] | + | |
- | + | ||
- | </VirtualHost> | + | |
- | </code> | + | |
- | + | ||
- | * Configurati, ca in Laboratorul 3, modulul ''userdir''. | + | |
- | * Hint: http://ocw.cs.pub.ro/courses/gsr/laboratoare/laborator-03#userdir | + | |
- | * Folositi ''mod_userdir'' astfel incat cererile catre URL-uri de forma ''gsr.ro/users/$username'' sa fie rescrise in ''gsr.ro/~$username''. | + | |
- | + | ||
- | <code> | + | |
RewriteEngine On | RewriteEngine On | ||
RewriteOptions Inherit | RewriteOptions Inherit | ||
- | RewriteRule ^/user/([^/]+)/?(.*) /~$1 [R] | + | RewriteRule ^/users/([^/]+)/?(.*) /~$1/$2 [R] |
RewriteRule ^/~/([^/]+)$ /~$1/ [R] | RewriteRule ^/~/([^/]+)$ /~$1/ [R] | ||
- | |||
</VirtualHost> | </VirtualHost> | ||
- | </solution> | + | </code> |
- | /* | ||
~~SHOWSOLUTION~~ | ~~SHOWSOLUTION~~ |