Ας φτιάξουμε έναν Home Server: Πρόσβαση εκτός σπιτιού (Μέρος 3)

Στο σημερινό μάθημα θα δούμε πως μπορεί ο home server μας να επικοινωνεί τις υπηρεσίες του με το υπόλοιπο διαδίκτυο. Με άλλα λόγια, θα ρυθμίσουμε τον home server μας να έχει ένα Όνομα Τομέα (Domain Name) ώστε να είναι προσβάσιμος από παντού με μια απλή πληκτρολόγηση του ονόματός του στην διεύθυνση του browser μας.

Μέχρι στιγμής:

οπότε τώρα ήρθε η στιγμή να μπορούμε να συνδεόμαστε στον home server μας και εκτός σπιτιού.

Εισαγωγή

Μια φορά και έναν καιρό, όταν το δίκτυο υπολογιστών άρχισε να γίνεται όλο και πιο μεγάλο και προσβάσιμο από τους πολίτες, οι διευθύνσεις των υπολογιστών έπρεπε να γίνουν πιο απλές για να μπορούμε να τους θυμόμαστε. Με άλλα λόγια αντί να γράφουμε στην μπάρα διευθύνσεων του browser μας τον έναν αριθμό του τύπου 216.58.214.196, μπορούσαμε να ανοίξουμε ένα αρχείο στην διαδρομή /etc/hosts και να βάλουμε εκεί μια εγγραφή που αντιστοιχεί αυτόν τον αριθμό σε μια διεύθυνση όπως π.χ.:

216.58.214.196    www.google.com

Επομένως αυτό που κάνουμε είναι να αντιστοιχίσουμε μια IP (αριθμός) σε ένα domain name (λέξεις).

Πέρα από την ευκολία που μας παρέχει αυτή η μέθοδος, μα δίνει και την δυνατότητα να αλλάζουμε και την IP κάποιων υπολογιστών χωρίς να χρειάζεται να αλλάξουμε το όνομα. Με την προϋπόθεση φυσικά να γίνει και η απαραίτητη αλλαγή στο αρχείο /etc/hosts.

Φυσικά το αρχείο /etc/hosts πλέον δεν είναι απαραίτητο μιας και την δουλειά την έχουν αναλάβει Servers που ονομάζονται Domain Name Servers (DNS). Με αυτό τον τρόπο, οι διάφοροι DNS γνωρίζουν που να ανακατευθύνουν το όνομα που γράφουμε στην μπάρα διευθύνσεων του browser μας για να προβάλει την σελίδα η την υπηρεσία που θέλουμε.

Advertisements

Τοπικό Όνομα Τομέα

Το ερώτημα που μπορεί να γεννιέται είναι αν το αρχείο /etc/hosts είναι άχρηστο με όλους αυτούς τους DNS εκεί έξω. Φυσικά και όχι αφού μπορούμε να αντιστοιχίσουμε μια IP σε ένα όνομα όπως αυτού, του Home Server μας.

Αυτό είναι ιδιαίτερα χρήσιμο στην περίπτωση του Home Server μας ή και στην περίπτωση που θέλουμε να έχουμε 2-3 boards με διαφορετικά IP ώστε το καθένα να έχει και διαφορετικό όνομα. Τέλος, οι πιο προχωρημένοι μπορούν, τις υπηρεσίες του Home Server τους να τις τρέχουν από τον ίδιο Home Server που έχει μια IP αλλά, να αντιστοιχίσουν διαφορετικά ονόματα για κάθε διαφορετική υπηρεσία.

Για παράδειγμα, όπως είδαμε στο προηγούμενο μάθημα, αν η στατική IP διεύθυνση που δώσαμε στον Home Server μας είναι 192.168.1.100, τότε μπορούμε να του δώσουμε ένα όνομα και να συνδεόμαστε σε αυτό πληκτρολογώντας το όνομα (domain name) αντί της IP.

Στο παράδειγμα κάτω, ανοίγουμε το αρχείο /etc/hosts του υπολογιστή μας και προσθέτουμε αυτή την αντιστοιχία IP και Domain Name:

sudo nano /etc/hosts

στο αρχείο αυτό προσθέτουμε την δική μας εγγραφή με την IP του home server μας και του ονόματος που θέλουμε να δώσουμε όποτε το αποτέλεσμα θα μοιάζει με κάτι σαν το παρακάτω:

#
# /etc/hosts: static lookup table for host names
#

#		
127.0.0.1	localhost.localdomain	localhost
::1		localhost.localdomain	localhost
192.168.1.100   homeserver.local	homeserver

αποθηκεύουμε (CTRL+X) και κλείνουμε το αρχείο. Αν τώρα θέλουμε να συνδεθούμε με ssh στον home server μας, μπορούμε να το κάνουμε ως εξής:

ssh onoma-xristi@homeserver.local

Όπως καταλαβαίνετε, για αυτόν ακριβώς τον λόγο ήταν σημαντικό να δώσουμε μια στατική IP στον Home Server μας διότι σε διαφορετική περίπτωση αν για κάποιο λόγο αλλάξει η IP του αυτόματα, τότε το όνομα που θα είχαμε αντιστοιχίσει δεν θα έβρισκε τον server μας.

Η παραπάνω μέθοδος, όπως βλέπουμε είναι ιδιαίτερα χρήσιμη όταν θέλουμε να δώσουμε ένα όνομα στον Server μας και να έχουμε πρόσβαση σε αυτόν με αυτό το όνομα όταν ήμαστε στο σπίτι μας (δηλαδή στο ίδιο δίκτυο). Διαφορετικά, αν θέλουμε να έχουμε πρόσβαση σε αυτόν και εκτός σπιτιού θα πρέπει είτε να αγοράσουμε ένα «μοναδικό» όνομα είτε να χρησιμοποιήσουμε ένα Sub-Domain από τους διάφορους δωρεάν Dynamic Domain Name System.

Χρήση DDNS για τον Home Server

Η χρήση, DDNS είναι η πιο απλή και δωρεάν μέθοδο για να διευθυνσιοδότηση των Server μας.

Σημείωση :
Όσοι δεν επιθυμούν να έχουν πρόσβαση στον home server τους και εκτός σπιτιού δεν χρειάζεται να κάνουν τίποτα από τα παρακάτω.

Υπάρχουν διάφορες υπηρεσίες DDNS που μπορείτε να χρησιμοποιήσετε οι οποίες είτε είναι δωρεάν (με κάποιους περιορισμούς) είτε επί πληρωμή (με πρόσθετες υπηρεσίες). Προσωπικά, χρησιμοποιώ το DuckDNS χάριν ευκολίας. Εσείς μπορείτε με μια αναζήτηση να βρείτε όποια σας βολεύει και μάλιστα, να βρείτε και κάποια που παρέχεται και διασύνδεση από το router σας. Με άλλα λόγια πολύ πιθανόν να παρέχει το router σας διασύνδεση με κάποιο πάροχο DDNS οπότε και απλά να βάλετε το όνομα χρήστη και το συνθηματικό σας.

Advertisements

Μπερδευτήκατε ε;

Ας προσπαθήσουμε να τα κάνουμε όσο πιο απλά γίνεται. Θυμηθείτε από τα προηγούμενα μαθήματα, ότι κάθε συσκευή που συνδέεται με το internet διαθέτει και μια μοναδική IP. Έτσι και το router σας, που σας παρέχει internet, διαθέτει μια εξωτερική IP.

Επομένως, αν π.χ. είμαστε διακοπές και θέλουμε να δούμε ή να στείλουμε φωτογραφίες στον Home Server μας, θα πρέπει να γνωρίζουμε κάθε φορά την εξωτερική IP του router μας (η οποία και αλλάζει συχνά). Αντίθετα, με μια υπηρεσία DDNS να αναλαμβάνει να «παρακολουθεί» και να ενημερώνει αυτόματα την IP που αντιστοιχεί στο όνομα που επιλέξαμε, απλά θα πληκτρολογούμε το όνομα και θα έχουμε πρόσβαση στις υπηρεσίες του Home Server μας.

Πάμε λοιπόν να πάρουμε ένα όνομα για τον Home Server μας.

  1. Δημιουργούμε έναν λογαριασμό στο DuckDNS
  2. Γράφουμε ένα όνομα που θα θέλαμε να έχει ως διεύθυνση ο server μας στο domains και πατάμε add domain. Το τελικό αποτέλεσμα θα είναι της μορφής «onoma-leksi.duckdns.org»
  3. Πάμε στις οδηγίες Install του DuckDNS
  4. Ανοίγουμε ένα τερματικό στον υπολογιστή μας και συνδεόμαστε με SSH στον Home Server μας
  5. Ακολουθούμε τις παρακάτω οδηγίες όσο είμαστε συνδεδεμένοι στον DuckDNS λογαριασμό στην σελίδα του.

Ενώ είμαστε στον αρχικό κατάλογο χρήστη του Server μας δίνουμε:

mkdir duckdns
cd duckdns
nano duck.sh

Στο αρχείο duck.sh που θα ανοίξει κάνουμε αντιγραφή επικόλληση το πεδίο «echo» από την σελίδα Install το οποίο περιλαμβάνει και το μοναδικό «token» που αντιστοιχεί στον λογαριασμό μας και το όνομα που επιλέξαμε.

echo url="https://www.duckdns.org/update?domains=ONOMADOMAIN&token=ALFARITHMITIKO&ip=" | curl -k -o ~/duckdns/duck.log -K -

Αποθηκεύουμε και κλείνουμε το αρχείο duck.sh

Στην συνέχεια μετατρέπουμε σε εκτελέσιμο το αρχείο duck.sh

chmod +x duck.sh

Έπειτα, θα ρυθμίσουμε τον Home Server μας, να εκτελεί αυτόματα αυτό το αρχείο κάθε 5 λεπτά, ώστε να ελέγχει αν έχει αλλάξει η εξωτερική IP του router μας και να ενημερώνει με αυτό, το domain name που επιλέξαμε. Για την δουλεία αυτή θα χρησιμοποιήσουμε το crontab (πίνακας προγραμματισμένων εργασιών). Δίνουμε λοιπόν στο τερματικό του server:

crontab -e

όπου και βάζουμε την παρακάτω γραμμή

*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1

Αποθηκεύουμε και κλείνουμε το αρχείο crontab. Ας εκτελέσουμε τώρα το αρχείο :

./duck.sh

Η παραπάνω εκτέλεση αυτού του αρχείου δεν θα επιστρέψει τίποτα. Παρόλα αυτά ελέγχουμε το log αρχείο στο οποίο αν όλα πήγαν καλά θα δούμε ένα ωραιότατο «ΟΚ». Σε αντίθετη περίπτωση θα δούμε «KO»

cat duck.log

Port Forwarding: Ρύθμιση ανακατεύθυνσης

Μέχρι στιγμής έχουμε

  • ένα όνομα για τον Server μας
  • ρυθμίσαμε το όνομα να ενημερώνεται για τυχών αλλαγές στην εξωτερική IP του router μας

Μένει λοιπόν να ανακατευθύνουμε το όνομα σε κάποια υπηρεσία του Home Server μας. Όμως ποια υπηρεσία θα μου πείτε, αφού μέχρι στιγμής έχουμε απλά μια υπηρεσία SSH και τίποτα άλλο.

Δεν πειράζει, σημασία έχει αυτή την στιγμή, να δούμε ότι το όλο εγχείρημα δουλεύει. Στο παράδειγμά μας θα χρησιμοποιήσουμε έναν μικρό web server ως προσωρινή υπηρεσία που θα τρέχει στον Home Server, για να επιβεβαιώσουμε ότι το όνομα που διαλέξαμε προβάλει τα δεδομένα μιας σελίδας που θα φτιάξουμε.

Πριν από όλα όμως θα χρειαστεί να κάνουμε portforwarding. Εδώ τα πράγματα περιπλέκονται μιας και εφαρμόζεται στο router μας και ο καθένας από εμάς έχει διαφορετικό router.

Στην σελίδα https://portforward.com/router.htm υπάρχουν οδηγίες για κάθε router και ελπίζω να βρείτε και το δικό σας εκεί. Σε γενικές γραμμές, θα πρέπει να ρυθμίσετε στο router σας, ώστε το port 80 να ανακατευθύνει στην στατική IP του Home Server σας.

pos-ftiaxnoume-server-port-forward

Με άλλα λόγια όταν γράφουμε το domain που επιλέξαμε (onoma.duckdns.org) θα πρέπει να προωθεί την επικοινωνία στο port 80 του Home Server μας για να προβάλει την σελίδα που θα φτιάξουμε παρακάτω.

Advertisements

Αφού ρυθμίσετε σωστά το port forward θα δημιουργήσουμε ένα αρχείο html με ένα κείμενο μέσα και θα εκτελέσουμε, όπως είπαμε πριν, μια υπηρεσία web server. Στο τερματικό που είμαστε συνδεδεμένοι στον Home Server μας δημιουργούμε έναν φάκελο και μέσα σε αυτό φτιάχνουμε το αρχείο html με ένα κείμενο:

mkdir http
cd http
echo "Δουλεύει !!" > index.html

Ωραία, έτοιμη η σελίδα μας και τώρα ήρθε η ώρα να την σερβίρουμε για να είναι προσβάσιμη εξωτερικά. Με αυτόν τον τρόπο, όπως είπαμε, θα επιβεβαιώσουμε ότι το portforward δούλεψε. Να θυμηθείτε, αν δεν το έχετε κάνει, να ανοίξετε στο firewall του home server σας το port 80 !.

Τρέχουμε λοιπόν έναν μικρό server μέσα από τον φάκελο http για να σερβίρουμε το αρχείο index.html:

python -m SimpleHTTPServer 80

Τώρα ανοίξτε στον υπολογιστή σας μια νέα καρτέλα στον browser σας και γράψτε την διεύθυνση (δηλαδή το domain name) που είχατε επιλέξει (onoma.duckdns.org)

Αν όλα τα έχετε κάνει σωστά θα πρέπει να δείτε μια σελίδα που γράφει:

Δουλεύει !!

Επίλογος

Με τα προηγούμενα μαθήματα αλλά και με το παρόν μάθημα ολοκληρώσαμε την προπαρασκευή που χρειάζεται να κάνουμε για να φτιάξουμε έναν Home Server. Όλες οι ενέργειες που έγιναν είναι απαραίτητες για οποιονδήποτε λόγο και αν φτιάχνουμε τον server.
Από εδώ και πέρα το τι θα «σερβίρει» ο Home Server μας είναι στην κρίση μας. Παρόλα αυτά θα δούμε εν καιρό και στο cerebrux κάποια παραδείγματα όπως web server, file server, download server κλπ.

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


Τα μαθήματα της σειράς Home Server:

Advertisement

15 σκέψεις σχετικά με το “Ας φτιάξουμε έναν Home Server: Πρόσβαση εκτός σπιτιού (Μέρος 3)

Add yours

    1. Ωραία αυτο δείχνει ότι το όνομα έχει συνδεθεί με την IP σου. Μένει τώρα να μπεις στο ρούτερ σου και στις ρυθμίσεις για port forwarding να βάλεις το port 80 να ανακαυευθυνει στην ip του server σου (εσωτερική) στο ίδιο port 89

    2. Περίεργο. Αν το domain name που επέλεξες βλέπει την σελίδα ρυθμίσεων του router σου τότε το port 80 του ρούτερ σου είναι κανονικά ανοιχτό και όλα είναι ΟΚ. Απο το σημείο αυτο και μετα είναι δουλεία στο ρούτερ να ανακατευθυνει αυτό το αίτημά στο port 80 του server για να δεις την δοκιμαστική σελίδα που αναφέρω στο άρθρο.

      https://portforward.com/router.htm

  1. οταν παω να τρέξω το python -m SimpleHTTPServer 80 μου βγάζει αυτό
    python -m SimpleHTTPServer 80.
    Traceback (most recent call last):
    File «/usr/lib/python2.7/runpy.py», line 162, in _run_module_as_main
    «__main__», fname, loader, pkg_name)
    File «/usr/lib/python2.7/runpy.py», line 72, in _run_code
    exec code in run_globals
    File «/usr/lib/python2.7/SimpleHTTPServer.py», line 230, in
    test()
    File «/usr/lib/python2.7/SimpleHTTPServer.py», line 226, in test
    BaseHTTPServer.test(HandlerClass, ServerClass)
    File «/usr/lib/python2.7/BaseHTTPServer.py», line 589, in test
    port = int(sys.argv[1])
    ValueError: invalid literal for int() with base 10: ’80.’
    Επίσης πω βάζω exception στο firewall απο τερματικο για την port 80?

    1. Επίσης και με sudo που το τρεχω μου βγάζει αυτό Serving HTTP on 0.0.0.0 port 80 …
      και οταν παω και πληκτρολογο την σελιδα μου με duckdns.org με πεταει στην σελίδα του ρούτερ και εμενα

    2. Θα πρέπει να το δοκιμάσεις πρώτα μέσα από το εσωτερικό δίκτυο. Πχ με 127.0.0.1 ή από ένα άλλο υπολογιστή. Αν δουλεύει σωστά και θες να το δεις από έξω, θα δώσεις στο μηχάνημα μια σταθερή εσωτερική IP και θα προοθήσεις την πόρτα 80 σε αυτήν την IP. Αυτά θα τα κάνεις μέσα από τις ρυθμίσεις του ρούτερ σου.

    3. exw dwsei statikh ip sto mixanima mou tin 192.168.1.65 kai mporw mesa ston idio xwro na sundeomai me ssh sto pc auto meta ti prepei n kanw gia na doulepsei to filezila pou thelw kai na mporw na sundeomai ?

  2. Ρε παιδιά εγώ τρέχω τον Web Server σε Ubuntu Core 18.04 και μου λέει ο Mozilla ότι δεν συνδέεται.

    1. Άκυρο αυτό το έφτιαξα. Αλλά δεν μου μπαίνει εκτός δικτύου. Δεν το βρίσκει.

    2. Δεν νομίζω το duckdns όπως περιγράφεται στο άρθρο να δουλέψει σε Ubuntu Core.
      Εναλλακτικά χρειάζεται να ανοίξεις πόρτα στο ρουτερ και να το κατευθύνεις στο Pi ώστε όταν βάλεις την εξωτερική IP του ρουτερ σου να μπεις στο Pi

    3. Μήπως ξέρεις κανένα DDNS που θα δουλέψει χωρίς την εναλλακτική;

    4. Όχι δυστυχώς δεν έχω κάτι υπόψιν. Γενικά το Ubuntu Core (όπως θα διάβασες και στο σχετικό άρθρο που είχαμε γράψει) είναι ειδικού σκοπού λειτουργικό. Δες το σχόλιο από κάτω που έκανε ο @Chris Key

Σου άρεσε το άρθρο; Πες την άποψή σου... έστω και Ανώνυμα:

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση /  Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση /  Αλλαγή )

Σύνδεση με %s

Ο ιστότοπος χρησιμοποιεί το Akismet για την εξάλειψη των ανεπιθύμητων σχολίων. Μάθετε πως επεξεργάζονται τα δεδομένα των σχολίων σας.

Create a website or blog at WordPress.com

ΠΑΝΩ ↑

Αρέσει σε %d bloggers: