Πως να στήσουμε έναν τοπικό DNS στο Mac Mini με το DNSMASQ
Εισαγωγή
Όταν έχουμε ένα σπιτικό δίκτυο με περισσότερο από ένα μηχανήματα, όπως συμβαίνει συχνά, είναι χρήσιμο να έχει το κάθε μηχάνημα το όνομα του, το στατικό ip του, κλπ. Είναι σαν να βάζετε σε τάξη το συρτάρι με τα εσώρουχα!
Ένας υπολογιστής με Macintosh που είναι ανοιχτός 24/7 μας κάνει άνετα αυτήν την δουλειά. Στην περίπτωση μου είναι ο μικρός mac mini που έχω για media centre στο σαλόνι. Ανάμεσα στα άλλα κάνει κι αυτό τρέχοντας το πρόγραμμα dnsmasq. Το DNSmasq έχει πάρα πολλές και ενδιαφέρουσες χρήσεις. Είναι υπερβολικά απλό για το τοπικό μας δίκτυο και μπορεί να χρησιμοποιηθεί για τον λόγο που περιέγραψα πιο πάνω.
Για να καταλάβουμε τι ακριβώς κάνει, πρέπει να έχουμε μια μικρή, ελάχιστη, γνώση του πως λειτουργεί το πρωτόκολλο DNS. Εν συντομία, θα μπορούσαμε να πούμε ότι το Domain Name Service (DNS) είναι αυτό που δίνει ονομασία στους υπολογιστές ενός δικτύου. Όταν ανοίγουμε έναν πλοηγητή (Sarafi, Firefox, Opera, IE, etc) και πληκτρολογούμε μια διεύθυνση URL ο υπολογιστής μας στέλνει αυτόματα ένα request σε έναν DNS server, ο οποίος του δίνει την διεύθυνση που αντιστοιχεί στον συγκεκριμένο server. Για να δούμε το πραγματικό ip αρκεί να κάνουμε ping. Για παράδειγμα:
angel:~ atma$ ping -c 1 www.maclife.com PING www.maclife.com (72.3.244.42): 56 data bytes 64 bytes from 72.3.244.42: icmp_seq=0 ttl=115 time=171.743 ms --- www.maclife.com ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max/stddev = 171.743/171.743/171.743/0.000 ms angel:~ atma$
Όπως βλέπεται πιο πάνω είδαμε το IP του server. Το IP του είναι η διεύθυνση του υπολογιστή στον οποίο βρίσκεται η συγκεκριμένη ιστοσελίδα, στο διαδίκτυο. Κάθε provider έχει τους δικούς του Name Servers (NS) τους οποίους οι ADSL γραμμές τους παίρνουν αυτόματα. Όταν γίνεται το handshake ανάμεσα στον router μας και στον provider μέσω τηλεφωνικής γραμμής, ο provider δίνει τα απαραίτητα στοιχεία στον router. Έπειτα ο router δηλώνει τον εαυτό του ως DNS server στο τοπικό δίκτυο κι αναλαμβάνει να “μοιράσει” τα ip’s στο subnet του σπιτιού μας. Το πρωτόκολλο που διαχειρίζεται την διαδικασία ανάθεσης διευθύνσεων IP και καθορισμού DNS server για να μπαίνουμε στο διαδίκτυο χωρίς προβλήματα λέγετε DHCP. Αυτό καθορίζει πια διεύθυνση θα έχει ο υπολογιστής όταν τον ανοίξουμε. Για την ακρίβεια, ο υπολογιστής στέλνει DHCPD request σε όλο το δίκτυο ο server παίρνει το request και στέλνει reply με τα ανάλογα στοιχεία στον client (mac/pc). Γι αυτό πολλοί έχουμε ip’s όπως 192.168.0.1 άλλοι 192.168.1.1 κι άλλοι 192.168.2.1, κλπ. Πολλές φορές οι routers διαχωρίζουν το ασύρματο από το ενσύρματο δίκτυο, δίνοντας π.χ. ξεχωριστό subnet στα ασύρματα δίκτυα. Κάτι παρόμοιο κάνει και η airport base extreme δίνοντας άλλο IP subnet στους “guests” μην επιτρέποντας τους να επικοινωνήσουν με το σπιτικό δίκτυο, για λόγους ασφαλείας.
Πολλοί, θέλουν να έχουν πρόσβαση από το διαδίκτυο στο τοπικό τους δίκτυο. Όμως οι περισσότεροι στο σπίτι έχουν dymanic IP address. Κάθε φορά που συνδεόμαστε στο διαδίκτυο, ο provider αντί δώσει την ίδια διεύθυνση κάθε φορά, μας δίνει διαφορετική. Αυτό διευκολύνει τον provider, για λόγους που δεν θα εξηγήσω εδώ, αλλά δημιουργεί ένα πρόβλημα σε εμάς. Δεν μπορούμε να θέσουμε ένα domain name π.χ. www.spitimou.gr σε ένα συγκεκριμένο IP γιατί την επόμενη φορά που θα πέσει το ρεύμα, η διεύθυνση IP θα αλλάξει, γιατί είναι δυναμική διεύθυνση κι όχι στατική. Για να πάρουμε στατική διεύθυνση από τον provider μας πρέπει να πληρώσουμε, αλλά κάτι τέτοιο πλέον δεν είναι απαραίτητο. Υπάρχουν υπηρεσίες όπως η DynDNS οι οποίες φροντίζουν να εξαλείψουν αυτό το πρόβλημα, περισσότερες λεπτομέρειες για την υπηρεσία αυτή θα βρείτε στην ιστοσελίδα της. Κάποιοι ADSL routers όπως ο Linksys WAG160N έχουν build-in client για να ανανεώνει αυτόματα την IP του σπιτικού δικτύου μέσω DynDNS.
Βάζοντας dnsmasq μπορούμε να ελέγξουμε απόλυτα το σπιτικό μας δίκτυο, να ξέρουμε ποιος και πότε συνδέθηκε, να καθορίσουμε πιο subnet θα χρησιμοποιήσουμε κι άλλες λεπτομέρειες. Επίσης για όσους έχουν DyDNS και δεν μπορούν να δουν τον server τους μέσα από το δίκτυο τους, με το dnsmasq αυτό μπορεί να γίνει, πλέον, πολύ εύκολα.
MacPorts & Dnsmasq configuration
Τα MacPorts ένα εξαιρετικό πρόγραμμα διαχείρισης πακέτων για MacOSX. Είναι βασισμένο στα FreeBSD ports. Η εγκατάσταση τους είναι αρκετά απλή, μπορείτε να ακολουθήσετε κατά γράμμα τις οδηγίες στην ιστοσελίδα τους. Για λεπτομέρειες, αν αντιμετωπίσετε κάποιο πρόβλημα, μην διστάσετε να ρωτήσετε αφήνοντας κάποιο σχόλιο εδώ ή στην mailing list.
Δυστυχώς για όσους δεν είναι συνηθισμένοι με την γραμμή εντολών, θα είναι λίγο δύσκολο να συνηθίσουν, αλλά αξίζει τον κόπο! Η γραμμή εντολών έχει εκπληκτικές δυνατότητες σε συστήματα Unix based. Προτείνω επίσης, για όσους θα χρησιμοποιήσουν την γραμμή εντολών να κατεβάσουν το iTerm. Είναι σαφώς ανώτερο από το Terminal.app.
Για να εγκαταστήσουμε τα MacPorts θα χρειαστούμε το xCode. Όσοι δεν το έχετε εγκαταστήσει, ήρθε η ώρα. Κάντε εγγραφή στο website της Apple και κατεβάστε το xCode. Μετά την εγκατάσταση θα έχετε πλέον GCC στον Mac σας. Ο GCC είναι ο Gnu C Compiler. Ένας μεταγλωττιστής γλωσσών προγραμματισμού ανοιχτού κώδικα, τον οποίο χρησιμοποιεί η Apple καθώς και πληθώρα εταιριών / λειτουργικών συστημάτων. Το τελευταίο xCode που παίζει κανονικά σε Tiger είναι το 2.5!!!
Έπειτα κατεβάζουμε τα MacPorts. Υπάρχει DMG image το οποίο το κατεβάζουμε και το κάνουμε install κανονικά, όπως κάθε άλλο πακέτο σε MacOSX. Κατεβάστε στο αντίστοιχο image για την διανομή σας.
Μόλις εγκαταστήσουμε τα macports καλό είναι να διαβάσουμε το guide από την ιστοσελίδα. Αφού εγκαταστήσουμε τα macports με τις απαραίτητες ρυθμίσεις στο αρχείο $HOME/.bash_profile αρχίζουμε την εγκατάσταση του dnsmasq με μια απλή εντολή:
$ echo 'PATH=/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin' > .bash_profile $ source .bash_profile $ sudo port install dnsmasq
Τώρα θα γίνει η εγκατάσταση του dnsmasq στον κατάλογο /opt/local/ . Από εδώ κι έπειτα όλα τα προγράμματα που θα εγκαθιστούμε θα είναι στον κατάλογο /opt/local έτσι ώστε να μην έχουμε προβλήματα ασυμβατότητας με το σύστημα στο / (root). Υπάρχουν τρίτα προγράμματα της Apple που χρειάζονται της εκδόσεις το προγραμμάτων (python, php, κλπ) που υπάρχουν στο / γι αυτό είναι κάκιστη ιδέα να τα σβήνουμε ή να γίνονται overwrite.
Αρχικά δημιουργούμε το αρχείο: /opt/local/etc/mhosts.conf
Σε αυτό το αρχείο θα βάλουμε όλα τα στοιχεία και τα ονόματα που θέλουμε να χρησιμοποιούνται στο τοπικό μας δίκτυο. Θα μπορούσαμε να το κάνουμε απευθείας μέσα από το dnsmasq αλλά διάφορους λόγους, ίσως και συνήθειας, μου είναι πολύ πιο εύκολο να έχω τα πάντα στο mhosts.conf. Η σύνταξη του είναι σχετικά απλή:
# /opt/local/etc/mhosts.conf file 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 192.168.0.1 router 192.168.0.2 karida.ath.cx mac1 192.168.0.3 angel.karida.ath.cx mac2
Τις πρώτες 3 γραμμές αφήστε τες ανέγγιχτες. Οι επόμενες γραμμές κάτω, δηλώνουν IP και όνομα. Μπορούμε να βάλουμε όσες ονομασίες θέλουμε, για παράδειγμα έναν υπολογιστή μπορεί να τον λένε: iMac devil pingo pam pim boum macosx. Αρκεί να έχω αυτήν την γραμμούλα:
192.168.0.2 iMac devil pingo pam pim boum macosx
στο συγκεκριμένο αρχείο. Ότι ονομασία και IP βάλετε εδώ αυτό θα βλέπουν κι όλα τα άλλα μηχανήματα στο δίκτυο σας. Για παράδειγμα όταν θέλετε να συνδεθείτε σε ένα PC με Windows και smb θα γράφεται smb:// αντί για smb://ip στο τοπικό δίκτυο. Γενικότερα, θα πάρει όνομα ο υπολογιστής.
Αφού στήσουμε αυτό το αρχείο. Πάμε στο επόμενο το /opt/local/etc/mresolv.conf:
# otenet name servers nameserver 195.170.0.2 nameserver 195.170.2.1 nameserver 195.170.0.1 nameserver 66.33.206.206 nameserver 195.170.2.2
Αυτό το αρχείο θα έχει τους nameservers που χρησιμοποιούμε. Στην περίπτωση μου έχω, αυτούς της OTENET. Μπορείτε να βάλετε όσους nameservers θέλετε. Υπάρχουν πολλές θεωρίες σχετικά με το ποιους να χρησιμοποιείτε. Επειδή ο server θα τους ψάξει με την σειρά, από πάνω προς τα κάτω, καλύτερα επάνω να είναι αυτοί του δικού σας provider. Αν είναι η otenet τότε αντιγράψτε το αρχείο αν έχετε κάποιον άλλο, τότε ψάξτε στο διαδίκτυο, στην ιστοσελίδα του provider σας θα βρείτε τους Name Server του. Μπορείτε να τους βρείτε κι από γραμμή εντολών, google it!
Αφού τελειώσει η εγκατάσταση του dnsmasq ανοίγουμε το αρχείο /opt/local/etc/dnsmasq.conf . Το configuration που θα προτείνω είναι ένα απλό configuration σχετικά με τις δυνατότητες του dnsmasq αλλά πιστεύω ότι είναι καλό για τους περισσότερους χρήστες. Θα γράφω ένα ένα τα options και την περιγραφή από κάτω:
addn-hosts=/opt/local/etc/mhosts.conf
Ορίζουμε το αρχείο από το οποίο θα διαβάζει τις ονομασίες των υπολογιστών στο τοπικό δίκτυο κι όχι μόνο. Λεπτομέρειες γι αυτό το αρχείο υπάρχουν λίγο πιο πάνω.
address=/karida.ath.cx/192.168.0.2
Μπορούμε να έχουμε όσες γραμμές “address” θέλουμε. Εδώ δρομολογούμε το όποιο DNS request για το domain karida.ath.cx στο IP 192.168.0.2 . Αρχικά να πω ότι κάνω χρήση του DyDNS για συνδέομαι στο τοπικό δίκτυο από οπουδήποτε. Το hostname μου είναι το karida.ath.cx. Τρέχω διάφορες υπηρεσίες στο karida.ath.cx . Όταν είμαι σε εξωτερικό δίκτυο συνδέομαι στο σπίτι χρησιμοποιώντας το “karida.ath.cx” ως hostname. Όταν είμαι στο εσωτερικό του δικτύου όμως, η OTENET δεν με αφήνει να συνδεθώ στο εξωτερικό IP μου. Με αποτέλεσμα να μην μπορώ να συνδεθώ με το όνομα “karida.ath.cx” που είναι το Domain Name για τον υπολογιστή που έχω ορίσει σαν server, με port foward στον router, κι έτσι πρέπει να δώσω το εσωτερικό IP. Αυτό σε υπηρεσίες όπως το OpenVPN μπορεί να δημιουργεί προβλήματα, πέραν του ότι γενικότερα, είναι εξαιρετικά άβολο. Σε αυτό το πρόβλημα έρχεται να δώσει λύση αυτή η μαγική γραμμή στο dnsmasq.conf. Όποιος κάνει request το karida.ath.cx από το εσωτερικό του δικτύου πάει αυτόματα στο 192.168.0.2 χωρίς να ψάχνει στο διαδίκτυο. Στην ουσία χωρίς να κάνει forward το request στου NS της Otenet. Έτσι είτε είμαι εντός, είτε εκτός δικτύου σαν karida.ath.cx βλέπω πάντα τον ίδιο υπολογιστή.
bind-interfaces
Αυτό αφήστε το έτσι όπως είναι. Είναι τα interfaces που θα τρέχει το πρόγραμμα. Εμείς θέλουμε να τρέχει στο en0.
bogus-nxdomain=64.94.110.11 bogus-priv cache-size=150 dhcp-authoritative
αυτά αφήστε τα όπως έχουν. Αν θέλετε μάθεται λεπτομέρειες ρίξτε μια ματιά στο manual του dnsmasq.
dhcp-host=00:1D:4F:C2:68:8D,iTouch
Αυτή η γραμμή μου δίνει την δυνατότητα να δώσω συγκεκριμένο hostname στην συσκευή που έχει το συγκεκριμένο MAC address. Όποτε συνδέσω το iPod Touch στο διαδίκτυο από εδώ και πέρα θα το βλέπω σαν iTouch. Το ίδιο ισχύει για όποιον άλλο υπολογιστή ή μηχάνημα θέλουμε. Όλα τα μηχανήματα που έχουν κάρτα δικτύου, ενσύρματη ή ασύρματη έχουν MAC Addresses.
dhcp-leasefile=/opt/local/var/dnsmasq.leases
Αυτό είναι το αρχείο στο οποίο κρατάει τα δεδομένα το dnsmasq. Το αφήνουμε ως έχει.
dhcp-option=23,50
Αυτά είναι λίγα από “πολλά” αριθμητικά που έχει το dnsmasq. Διαβάστε το τις επεξηγήσεις στα σχόλια του dnsmasq.conf .
dhcp-option=option:router,192.168.0.1
Αυτή η γραμμή είναι επίσης πολύ σημαντική καθώς δηλώνει σε όλους τους υπολογιστές που περιμένουν να πάρουν IP / hostname από το dnsmasq ποιος είναι ο router. Στην περίπτωση μου είναι το 192.168.0.1.
dhcp-option=vendor:MSFT,2,1i
Αυτά είναι επιπλέον options, διαβάστε τα σχόλια στο dnsmasq.conf
dhcp-range=192.168.0.4,192.168.0.20,12h
Εδώ ορίζουμε το “range” από που έως που θα μοιράζει IP’s το DNSMASQ. Όρισα τα συγκεκριμένα range για να έχω τον έλεγχο. Καλό είναι να αφήσετε τουλάχιστον 20 θέσεις ανάμεσα. Όπως θα προσέξατε πιο πάνω, κάποια μηχανήματα έχουν στατικές ip (τις ορίσαμε στο mhosts.conf). Εδώ είναι τα μηχανήματα που θα συνδεθούν αργότερα.
domain-needed
Αφήστε το ως έχει στο dnsmasq θα το χρειαστείτε οι περισσότεροι, λεπτομέρειες στο dnsmasq.conf .
domain=karida.ath.cx
Ορίζω το domain του δικτύου μου.
expand-hosts
Όπως έγραψα και πριν το dyndns μου δίνει ένα domain, το karida.ath.cx. Αυτό το option μου δίνει την δυνατότητα να έχουν τα μηχανήματα ονομασίες του στυλ “iTouch.karida.ath.cx”. Μου αρέσει αυτό γι αυτό το χρησιμοποιώ.
filterwin2k
Windows specific option. Καλύτερα κρατήστε το. Τα Windows δεν είναι χάλια μόνο σαν λειτουργικό, είναι και σαν λειτουργικό για networking…
interface=en0
Ορίζουμε το interface. Εκτός κι αν για κάποιο λόγο έχετε 2 κάρτες δικτύου, αυτό είναι το standard σε OSX.
log-queries no-hosts no-negcache
Διάφορα options αφήστε τα έτσι. Διαβάστε το manual για επεξηγήσεις.
resolv-file=/opt/local/etc/mresolv.conf strict-order
Το πρώτο αρχείο το αναλύσαμε πιο πάνω. Είναι το αρχείο που έχει μέσα τους Name Servers στου οποίους θα κάνει forward τα requests τα οποία δεν μπορεί να διαχειριστεί το dnsmasq τοπικά. Στο mresolv.conf θα πρέπει να βάλετε τους name server του provider σας. Το strict-order λέει dnsmasq να χρησιμοποιεί σε κάθε περίπτωση την ιεραρχία του mresolv.conf από πάνω προς τα κάτω. Υπάρχει περίπτωση, σπάνια αλλά υπάρχει, ένα domain name να έχει αλλάξει ip στο διαδίκτυο, π.χ. ένα website να αλλάξει hosting. Αν ο server της otenet δεν ανανεωθεί εγκαίρως και είναι πιο ψηλά στην λίστα δεν θα μπορέσετε να δείτε την ιστοσελίδα.
Λεπτομέρειες και περισσότερες ρυθμίσεις σχετικά με το dnsmasq μπορείτε να διαβάσετε στο manual page. Να σημειώσω ότι υποστηρίζει και tftp boot για εγκατάσταση λειτουργικό συστήματος μέσω δικτύου (PXE protocol)
Σύνδεση με SSH και SSH-Keys
Για να αρχίσουμε την εγκατάσταση στο Mac Mini server καλό είναι να συνδεθούμε με secure shell, χωρίς κωδικούς πρόσβασης κάθε φορά που κάνουμε login. Για να το επιτύχουμε αυτό πρέπει να δημιουργήσουμε έναν χρήστη με το ίδιο ακριβώς username με αυτό στο desktop (imac, laptop, κλπ).
Αφού συνδεθούμε με remote desktop στο mac mini και σιγουρευτούμε ότι έχουμε το “remote login” ανοιχτό σαν υπηρεσία. Ανοίγουμε το Terminal.app ή το iTerm.app και δίνουμε την εξής εντολή:
ssh-keygen -t rsa
Έπειτα περιμένουμε μέχρι να δημιουργηθούν τα “κλειδιά” μας. Κάποια στιγμή θα μας ζητήσει password, αν θέλετε βάζετε ένα password αλλιώς πατάτε enter. Τα κλειδιά Secure Shell είναι αυτά που θα μας επιτρέπουν να τα φορτώσουμε μια φορά στο ξεκίνημα της σύνδεσης τοπικά κι έπειτα να χρησιμοποιούμε για κάθε σύνδεση σε οποιοδήποτε secure shell connection. Απαρτίζονται από ένα ιδιωτικό (private) κι ένα δημόσιο (public) κλειδί. Το ιδιωτικό το έχουμε μόνο εμείς. Το δημόσιο το τοποθετούμε σε όλους τους servers που θέλουμε να έχουμε σύνδεση χωρίς κωδικό. Είναι εξαιρετικά εύχρηστη η χρήση κλειδιών ssh για απομακρυσμένη διαχείριση υπολογιστή. Το φόρτομα στο οποίο αναφέρομαι γίνεται στην αρχή. Το MacOSX Leopard έχει build-in keychain και φορτώνει αυτόματα τα κλειδιά με το password σε κάθε εκκίνηση αρκεί να πάρει μια φορά το password. Παρόλα αυτά, καλό είναι το password να μπορείτε να το βρείτε σε περίπτωση που δεν φορτωθεί από το OSX.
Όταν τελειώσουμε με το key generation λοιπόν πρέπει να βλέπουμε τα ακόλουθα στο $HOME/.ssh/:
angel:~ atma$ ls $HOME/.ssh/ id_rsa id_rsa.pub
Το αρχείο id_rsa είναι το ιδιωτικό κλειδί, για τα μάτια μας και μόνο, ενώ το id_rsa.pub είναι το δημόσιο κλειδί. Στέλνουμε το δημόσιο κλειδί στον server μας με την εντολή ‘scp’.
desktop:~ user$ ssh devo Password: Last login: Wed Jul 22 19:27:44 2009 from 192.168.0.3 Welcome to Darwin! server:~ user$ mkdir ssh mkdir: ssh: File exists server:~ user$ mkdir .ssh server:~ user$ exit logout scp Connection to server closed. desktop:~ user$ scp .ssh/id_rsa.pub user@192.168.0.2:/Users/user/.ssh/authorized_keys Password: id_rsa.pub 100% 398 0.4KB/s 00:00 desktop:~ user$
Τώρα το μόνο που μένει είναι να ενεργοποιήσουμε το PubKeyAuth στον sshd server. Το αρχείο σε MacOSX είναι το /etc/sshd_config. Κάνουμε uncomment τις δύο γραμμούλες:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Και restart τον sshd server. Αυτό μπορείτε να το κάνετε από το System Preferences -> Sharing -> Remote Login. Σταματήστε και ξεκινήστε πάλι το service μετά την αλλαγή.
Επίλογος
Μην ξεχάσετε αφού ενεργοποιήσετε το dnsmasq να απενεργοποιήσετε το DNS από τον router σας αλλιώς μπορεί να προκληθεί ένας μικρός χαμός στο τοπικό σας δίκτυο. Η χρήση dnsmasq θα σας διευκολύνει εξαιρετικά σε περίπτωση που έχετε πολλά μηχανήματα στο LAN σας. Επίσης θα σας δώσει την δυνατότητα να στήσετε υπηρεσίες όπως HTTPD, SSHD, OpenVPN κλπ. με ευκολία καθώς θα μπορείτε να κάνετε transparent browsing τόσο μέσα όσο κι έξω από το δίκτυο σας, κάτι πολύ χρήσιμο.
Ο συγκεκριμένος οδηγός δεν είναι για αρχάριους. Πρέπει να έχετε κάνει μια πρώτη γνωριμία με την γραμμή εντολών και να γνωρίζεται τα βασικά των δικτύων και πως λειτουργούν, αλλιώς πιθανών να δημιουργηθεί πρόβλημα. Βέβαια κι εγώ έτσι έμαθα, από το troubleshooting αλλά δεν θέλω να πάρω κανένα στον λαιμό μου, οπότε όλη η ευθύνη δική σας!
Για ερωτήσεις αφήστε comments και χρησιμοποιείστε πολύ το Google γιατί πιο απλά από όσο τα έγραψα, πραγματικά δεν γίνεται!
No related posts.
Related posts brought to you by Yet Another Related Posts Plugin.
Tweet