Tuesday, April 26, 2011

Ένας DNS Server για Σχολικά Εργαστήρια - Μέρος Ι

Στη δική μου περίπτωση βέβαια, πρόκειται για δύο DNS servers. Καλό είναι να υπάρχει και ένα backup DNS, ειδικά όταν στηρίζει όλο το δίκτυο του σχολείου και όχι μόνο ένα σχολικό εργαστήριο. Αλλά ας πάρουμε τα πράγματα από την αρχή.



Σε τι χρησιμεύει ένας DNS Server; Αν ρωτήσετε ένα μαθητή της Γ' Τάξης του τομέα Πληροφορικής ΕΠΑΛ (και είστε τυχερός) θα σας πει ότι ο DNS απαντάει σε ερωτήματα του τύπου "Ποιο είναι το IP του www.freebsd.org" και "ποιος υπολογιστής έχει την διεύθυνση 10.14.28.10". Καθώς καταλαβαίνετε βέβαια δεν είναι δυνατόν ένα μηχάνημα να γνωρίζει τις διευθύνσεις όλου του διαδικτύου - αν και φυσιολογικά θα ξέρει και θα ανταποκρίνεται αυτόνομα στα ερωτήματα που αφορούν το εσωτερικό μας δίκτυο. Σε κάθε άλλη περίπτωση θα επικοινωνεί με άλλους DNS server για να ανακτήσει την απάντηση.



Σε ένα απλό οικιακό δίκτυο - και όταν δεν μας ενδιαφέρει το DNS για εσωτερικές διευθύνσεις - αρκούμαστε στο DNS Server του παροχέα. Αυτός αναλαμβάνει να επιλύσει τις ερωτήσεις μας για τα site του Internet που θα επισκεπτούμε (ρωτώντας αν χρειάζεται και άλλους DNS servers, αλλά αυτή η διαδικασία είναι διάφανη για εμάς και δεν μας αφορά). Από τη στιγμή που θα επιλέξουμε να εκτελούμε δικό μας DNS Server έχουμε άλλα πλεονεκτήματα:




  • Μπορούμε να τον χρησιμοποιήσουμε για τα μηχανήματα του εσωτερικού μας δικτύου

  • Μπορούμε να είμαστε ανεξάρτητοι από την υπηρεσία DNS του παροχέα

  • Μπορούμε να τον χρησιμοποιήσουμε για να φιλτράρουμε διευθύνσεις που είναι κακόβουλες ή απλά που δεν θέλουμε να επισκέπτονται οι χρήστες του δικτύου μας.



Ειδικά αυτή η τελευταία δυνατότητα είναι πολύ σημαντική για ένα σχολικό δίκτυο! Ας δούμε πως μπορεί να ρυθμίσουμε τον πλέον δημοφιλή DNS server, το BIND χρησιμοποιώντας το λειτουργικό σύστημα FreeBSD!

Ρύθμιση του BIND



Το BIND έρχεται ως μέρος του base system στο FreeBSD. Η ενεργοποίηση του είναι απλή υπόθεση. Στο /etc/rc.conf προσθέστε τις γραμμές:

named_enable="YES"

Το βασικό αρχείο ρυθμίσεων του BIND είναι το /etc/namedb/named.conf. Ας δούμε τι προσθήκες έχουμε κάνει σε σχέση με το αρχικό που έρχεται με το FreeBSD 8.2-RELEASE:

logging {
channel query-log {
file "/etc/namedb/logs/query-log" versions 3 size 1m;
};
category queries { query-log; };
};


Εδώ ενεργοποιούμε το logging. Έτσι γίνεται καταγραφή των διευθύνσεων που ζητούνται από τον BIND. Θα το χρειαστούμε αυτό για το φιλτράρισμα.

Αλλάζουμε τη γραμμή listen για να περιέχει και την IP διεύθυνση του server που εκτελεί το BIND (εκτός από το local loopback). O δικός μας έχει την διεύθυνση 10.14.28.10:

listen-on { 10.14.28.10; 127.0.0.1; };


Δηλώνουμε τα αρχεία που αφορούν τις ζώνες του τοπικού μας δικτύου:


zone "lab1.local" {
type master;
file "/etc/namedb/master/lab1.db";
also-notify { 10.14.28.251; };
};

zone "newlab" {
type slave;
file "/etc/namedb/slave/newlab.db";
masters {
10.14.28.251;
};
};


Όπως ανέφερα παραπάνω, διαθέτουμε δύο DNS servers και τυπικά καθένας εξυπηρετεί ένα εργαστήριο (ο πρώτος εξυπηρετεί και το υπόλοιπο σχολείο). Ο δεύτερος DNS είναι στη διεύθυνση 10.14.28.251. Για backup, καθένας από τους δύο διαθέτει και την ζώνη του άλλου. Πιστεύω ότι είναι αρκετά κατανοητός ο τρόπος που επιτυγχάνεται αυτό (hint: master, slave, masters, also-notify). Για ένα μόνο DNS server και ένα εσωτερικό domain θα αρκούσε αυτό:


zone "lab1.local" {
type master;
file "/etc/namedb/master/lab1.db";
};


Η υπόθεση μας είναι ότι το εσωτερικό μας domain ονομάζεται lab1.local και φυσικά θα χρειαστεί να φτιάξουμε το αρχείο /etc/namedb/master/lab1.db. Mοιάζει με το παρακάτω:


$TTL 3h
@ IN SOA aquarius64.lab1.local. sonicy.otenet.gr. (
2008081511 ; Serial - increment everytime something changes
1d ; Refresh
2h ; Retry
1000h ; Expire
2d ) ; Minimum

IN NS 10.14.28.10.
aquarius64 IN A 10.14.28.10
localhost IN A 127.0.0.1 ; just in case
PC1 IN A 10.14.28.11
PC2 IN A 10.14.28.12
PC3 IN A 10.14.28.13


Προσθέτουμε σε αυτό όλα τα μηχανήματα του εργαστηρίου μας. Στη συγκεκριμένη περίπτωση βέβαια έχουμε στατικές διευθύνσεις οπότε ξέρουμε ότι δεν θα γίνει κάποια αλλαγή (Ο DHCP server που επίσης εκτελείται δίνει άλλες περιοχές διευθύνσεων).

Ενεργοποίηση και Δοκιμή



Έχοντας κάνει όλα τα παραπάνω, ενεργοποιούμε το BIND:



# service named start
Starting named.


Για να χρησιμοποιεί ο server μας τον... εαυτό του ως DNS για τα δικά του ερωτήματα, βεβαιωνόμαστε ότι το /etc/resolv.conf περιέχει κάτι σαν αυτό:



domain lab1.local
nameserver 10.14.28.10
#Μπορεί να χρησιμοποιηθεί και το local loopback
#nameserver 127.0.0.1
#Αν έχουμε και άλλο DNS
#nameserver 10.14.28.251


To domain είναι προαιρετικό (αλλά χρήσιμο). Μπορείτε να δείτε περισσότερες λεπτομέρειες στο man resolv.conf. H δοκιμή είναι απλή:



$ nslookup
> www.freebsd.org
Server: 10.14.28.10
Address: 10.14.28.10#53

Non-authoritative answer:
www.freebsd.org canonical name = red.freebsd.org.
Name: red.freebsd.org
Address: 69.147.83.34
> PC1.lab1.local
Server: 10.14.28.10
Address: 10.14.28.10#53

Name: PC1.lab1.local
Address: 10.14.28.11
> exit


Το μόνο που μένει είναι να δηλώσετε το 10.14.28.10 ως DNS server σε όλα τα μηχανήματα του δικτύου σας (ή να το στείλετε μέσω DHCP αν έχετε δυναμικές διευθύνσεις). Φαντάζομαι ξέρετε πως να βάλετε DNS στα Windows ;) Για τα UNIXοειδή μηχανήματα ρυθμίστε απλώς το /etc/resolv.conf όπως παραπάνω ή χρησιμοποιήστε τον (brrrrr....) Network Manager.



Στο επόμενο άρθρο θα δούμε πως να χρησιμοποιήσουμε το DNS για φιλτράρισμα ανεπιθύμητων διευθύνσεων.



No comments: