Το προφίλ μας στο Google Plus
5

Μεταμορφώστε το RasPi σε VPN server, χωρίς πολλά πολλά

Δεν υπάρχει πλέον καμία δικαιολογία για να παραμένουμε απροστάτευτοι, κάθε φορά που συνδεόμαστε στο Internet από επισφαλή σημεία πρόσβασης. Το ταπεινό αλλά ικανό Raspberry Pi στο σπίτι γίνεται πανεύκολα ικανότατος OpenVPN server, γρήγορα και πολύ εύκολα.

Οι OpenVPN servers είναι μία από τις αδυναμίες μας — και δεν το κρύβουμε. Αναφερόμαστε τόσο σε εκείνους που στήνουμε και ρυθμίζουμε μόνοι μας, όσο και στους έτοιμους που επί πληρωμή παρέχουν εταιρείες όπως η TorGuard και η NordVPN. Στο παρόν άρθρο δείχνουμε πώς χάρη στο πρότζεκτ PiVPN μετατρέπουμε ένα Raspberry Pi με Raspbian σε ασφαλή OpenVPN server.

Συνδεόμαστε μέσω SSH στο RasPi και φροντίζουμε ώστε το λειτουργικό σύστημα να είναι πλήρως ενημερωμένο: απλά πληκτρολογούμε sudo apt update κι αμέσως μετά sudo apt upgrade. Μετά κατεβάζουμε το BASH script από το https://install.pivpn.io. Αποστολή του script είναι να προσθέτει πλήρως λειτουργικούς OpenVPN servers σε εγκαταστάσεις του Raspbian, αναλαμβάνοντας όλες τις σχετικές εργασίες και ρυθμίσεις. Στο χρήστη απευθύνει μερικές μόνον απλές ερωτήσεις, ώστε από τις απαντήσεις να είναι σε θέση να ρυθμίζει σωστά τον υπό εγκατάσταση OpenVPN server. Το εν λόγω script θα το αποθηκεύσουμε στον κατάλογο bin, μέσα στον προσωπικό κατάλογο του χρήστη μας (για εμάς, το username του είναι pi):

mkdir -p ~/bin && cd ~/bin
wget https://install.pivpn.io -O pivpn.sh
chmod +x pivpn.sh

Ρίξτε μια ματιά μέσα στο script pivpn.sh. Μεταξύ άλλων θα παρατηρήσετε ότι οι εργασίες που χρειάζονται δικαιώματα διαχειριστή συστήματος γίνονται με τη βοήθεια του sudo. Ο δικός μας χρήστης, ο pi, έχει τη δυνατότητα να χρησιμοποιεί το sudo χωρίς να πληκτρολογεί το password του root. Ο pi, μ’ άλλα λόγια, έχει δικαιώματα για passwordless sudo. Αν θέλετε κι ο δικός σας χρήστης να έχει τα ίδια δικαιώματα, τροποποιήστε το περιεχόμενο του αρχείου /etc/sudoers με το εργαλείο visudo. Προσθέστε επίσης και το κατάλληλο αρχείο μέσα στον κατάλογο /etc/sudoers.d, ξανά με το visudo και με την παράμετρο -f. Δείτε πώς τελειώνουν τα περιεχόμενα του δικού μας /etc/sudoers

[...]
# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d

…καθώς και τη μοναδική γραμμή που περιλαμβάνει το αρχείο ονόματι 010_pi-nopasswd, το οποίο δημιουργήσαμε μέσα στον κατάλογο /etc/sudoers.d πληκτρολογώντας sudo visudo -f /etc/sudoers.d/010_pi-nopasswd:

pi ALL=(ALL) NOPASSWD: ALL

Αλλά ας επιστρέψουμε στο προκείμενο. Βεβαιωνόμαστε ότι βρισκόμαστε μέσα στον κατάλογο όπου αποθηκεύσαμε το script (γράφουμε, π.χ., cd ~/bin) και το εκτελούμε δίνοντας ./pivpn.sh. Δείτε στη συνέχεια μερικά χαρακτηριστικά screenshots, διαβάστε και τις αντίστοιχες περιγραφές.

Το Raspberry Pi πρόκειται να παίξει ρόλο OpenVPN server, επομένως χρειάζεται διεύθυνση IP που δεν θα αλλάζει.

Ο router μπροστά από το Raspberry Pi μας είναι έτσι ρυθμισμένος, ώστε πάντα να του δίνει την ίδια διεύθυνση IP. Αν δεν ίσχυε κάτι τέτοιο, θα έπρεπε να ρυθμίσουμε από μόνοι μας το RasPi για static IP. Σε κάθε περίπτωση, το pivpn ζητά επιβεβαίωση για το IP καθώς και για τη διεύθυνση του gateway, δηλαδή του τοπικού router.

Τα αρχεία σύνδεσης κάθε OpenVPN client θα βρίσκονται αποθηκευμένα και τοπικά, στο RasPi -- και συγκεκριμένα στο λογαριασμό ενός απλού χρήστη του συστήματος.

Τα αρχεία σύνδεσης κάθε OpenVPN client θα βρίσκονται αποθηκευμένα και τοπικά, στο RasPi — και συγκεκριμένα στο λογαριασμό ενός απλού χρήστη του συστήματος.

Έναν μόνον χρήστη έχει το σύστημά μας, εκείνον με username το pi, οπότε τώρα δεν έχουμε και πολλές επιλογές.

Έναν μόνον χρήστη έχει το σύστημά μας, εκείνον με username το pi, οπότε τώρα δεν έχουμε και πολλές επιλογές.

Από τη στιγμή που το Raspberry Pi θα αναλάβει ρόλο server, οι αναβαθμίσεις ασφαλείας καλό είναι να γίνονται χωρίς την εποπτεία μας και φυσικά αυτόματα.

Από τη στιγμή που το Raspberry Pi θα αναλάβει ρόλο server, οι αναβαθμίσεις ασφαλείας καλό είναι να γίνονται χωρίς την εποπτεία μας και φυσικά αυτόματα.

Το πρωτόκολλο μεταφοράς που εξ ορισμού χρησιμοποιεί το OpenVPN είναι το UDP -- χωρίς αυτό να σημαίνει ότι είναι αποδεκτή η απώλεια πακέτων μεταξύ client και server.

Το πρωτόκολλο μεταφοράς που εξ ορισμού χρησιμοποιεί το OpenVPN είναι το UDP — χωρίς αυτό να σημαίνει ότι είναι αποδεκτή η απώλεια πακέτων μεταξύ client και server. Προτείνεται να αφήσουμε την προεπιλογή. Αν αργότερα διαπιστώσουμε ότι οι συνδέσεις μας προς τον server είναι προβληματικές, μπορούμε να τρέξουμε και πάλι το pivpn.sh κι αυτή τη φορά αντί για UDP να επιλέξουμε το TCP.

Το προκαθορισμένο port που χρησιμοποιεί το OpenVPN είναι το 1194. Δεν είναι κακή ιδέα να χρησιμοποιήσετε κάποιο άλλο port, απλά έχετε υπόψη ότι ενδεχόμενη αλλαγή δεν σημαίνει και δραματική αναβάθμιση της ασφάλειας του server.

Το προκαθορισμένο port που χρησιμοποιεί το OpenVPN είναι το 1194. Δεν είναι κακή ιδέα να χρησιμοποιήσετε κάποιο άλλο port, απλά έχετε υπόψη ότι ενδεχόμενη αλλαγή δεν σημαίνει και δραματική αναβάθμιση της ασφάλειας του server.

Ώρα για τη δημιουργία του κλειδιού κρυπτογράφησης. Το μήκος του προτείνεται να είναι 2048 bits.

Ώρα για τη δημιουργία του κλειδιού κρυπτογράφησης. Το μήκος του προτείνεται να είναι 2048 bits. Είναι μεγάλος ο πειρασμός να ζητήσουμε την παραγωγή κλειδιού μήκους 4096 bits, αλλά κατά 99,999999999981276563% δεν πρόκειται να ωφεληθούμε στην πράξη από ένα τέτοιο κλειδί.

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

Και μετά την παραγωγή του κλειδιού κρυπτογράφησης, έρχεται η στιγμή για τη δημιουργία μερικών ακόμη κλειδιών και πιστοποιητικών. Παρεμπιπτόντως, αν δεν γνωρίζετε πολλά για τη χρησιμότητα που έχουν τα κλειδιά και τα πιστοποιητικά σε ένα OpenVPN server setup, δεν χρειάζεται ν’ ανησυχήσετε. Αποστολή του PiVPN είναι να κρύψει από το χρήστη όλη την πολυπλοκότητα και τις τεχνικές λεπτομέρειες που αφορούν στη λειτουργία του OpenVPN και να του δώσει έναν πλήρως λειτουργικό server.

Η παραγωγή των παραμέτρων Diffie-Hellman στο ταπεινό RasPi χρειάζεται αρκετό χρόνο.

Έχετε κατά νου ότι η παραγωγή των παραμέτρων Diffie-Hellman στο ταπεινό RasPi χρειάζεται αρκετό χρόνο. Δεν πρόκειται για σχήμα λόγου: Στη δική μας περίπτωση πέρασε ένα τέταρτο της ώρας και μετά απλά σηκωθήκαμε και καταπιαστήκαμε με συγυρίσματα στο σπίτι (που για μέρες καταφέρναμε κι αναβάλαμε).

Οι clients του OpenVPN χρειάζεται να γνωρίζουν είτε τη δημόσια διεύθυνση IP του router μπροστά από το RasPi, είτε το αντίστοιχο DNS entry (αν υπάρχει).

Οι clients του OpenVPN χρειάζεται να γνωρίζουν τη δημόσια διεύθυνση IP του router μπροστά από το RasPi, μ’ άλλα λόγια τη διεύθυνση IP που έχει αποδοθεί στη συσκευή από τον ISP. Βέβαια ακόμη κι αν η εν λόγω διεύθυνση είναι δυναμική (το πιθανότερο) κι όχι στατική, καθόλου δεν αποκλείεται να χρησιμοποιείτε κάποια υπηρεσία dynamic DNS. Επιλέξτε, λοιπόν, αναλόγως της περίπτωσής σας.

Ο router μπροστά από το Raspberry Pi μας είναι προσβάσιμος με το όνομα nue.colder.xyz. Αφού φροντίσουμε για τον κατάλληλο κανόνα port forwarding στον router, με το ίδιο όνομα θα είναι προσβάσιμος κι ο OpenVPN server στο RasPi.

Τυχαίνει και διαχειριζόμαστε τον δικό μας nameserver για το domain ονόματι colder.xyz, ο οποίος παρέχει και API για εφαρμογές που χρησιμοποιούν τις υπηρεσίες του. Έτσι, είναι πολύ εύκολο να διατηρούμε μια αντιστοίχιση μεταξύ δημόσιου IP του router μας και του (sub)domain με όνομα nue.colder.xyz. Αφού φροντίσουμε για τον κατάλληλο κανόνα port forwarding στον router, με το όνομα nue.colder.xyz θα είναι προσβάσιμος κι ο OpenVPN server στο RasPi.

Οι OpenVPN clients θα πρέπει να έχουν τουλάχιστον έναν nameserver. Να υποδείξουμε κάποιον από τους δημοφιλείς και δημόσιους ή μήπως να καθορίσουμε έναν άλλον;

Οι OpenVPN clients θα πρέπει να έχουν τον δικό τους nameserver. Ουσιαστικά, εδώ έχουμε δύο επιλογές:

  • να καταφύγουμε στους δημόσιους nameservers που παρέχουν εταιρείες όπως Google, OpenDNS κ.ά.
  • να υποδείξουμε εμείς κάποιον nameserver, π.χ., αυτόν του router μπροστά από το RasPi.

Για το δικό μας setup, ο nameserver του router μπροστά από το Raspberry Pi είναι ακριβώς ό,τι χρειαζόμαστε.

Ως nameserver στη δική μας περίπτωση επιλέξαμε εκείνον που έχει ο router μπροστά από το RasPi: γι’ αυτό και πληκτρολογήσαμε το IP του λεγόμενου gateway. Κάναμε τη συγκεκριμένη επιλογή διότι μέσω OpenVPN θέλουμε να συνδεόμαστε στο οικιακό τοπικό δίκτυο και πολύ εύκολα να φτάνουμε σε άλλα μηχανήματα του τοπικού δικτύου, δίνοντας μόνο το hostname τους. Βέβαια κατ’ αυτόν τον τρόπο ο ISP βλέπει τα DNS queries των OpenVPN clients, αλλά αυτό καθόλου δεν μας ενοχλεί.

Δείχνει πολύ καλό για να είναι αληθινό, αλλά η διαδικασία εγκατάστασης και ρύθμισης OpenVPN server στο RasPi πράγματι ολοκληρώθηκε επιτυχώς.

Δείχνει πολύ καλό για να είναι αληθινό, αλλά η διαδικασία εγκατάστασης και ρύθμισης OpenVPN server στο RasPi πράγματι ολοκληρώθηκε επιτυχώς! Για κάθε χρήστη του server πρέπει να δημιουργούμε κι ένα διαφορετικό προφίλ σύνδεσης — κι αυτό επιτυγχάνεται πληκτρολογώντας pivpn add.

Στο σημείο αυτό και πριν κάνουμε οτιδήποτε άλλο με τον OpenVPN server μας, προτείνεται να επανεκκινήσουμε το σύστημα.

Πριν πάντως κάνουμε οτιδήποτε άλλο με τον OpenVPN server μας, το pivpn.sh μάς προτείνει να επανεκκινήσουμε το σύστημα. Είναι φρόνιμο να μην αγνοήσουμε την προτροπή του.

Ιδού όλες οι παράμετροι που δέχεται το script, καθώς και η χρησιμότητα καθεμίας.

Πληκτρολογώντας pivpn -h βλέπουμε όλες τις παραμέτρους που δέχεται το script, καθώς και τη χρησιμότητα καθεμίας. Θα συμφωνήσετε ότι, εδώ που είμαστε, ιδιαίτερο ενδιαφέρον έχει η -a, για τη δημιουργία προφίλ σύνδεσης πελατών.

Δημιουργία νέου προφίλ σύνδεσης, για πελάτη που θέλει να συνδέεται στον OpenVPN server χωρίς να πληκτρολογεί password.

Στο παράδειγμα δημιουργούμε ένα νέο προφίλ σύνδεσης, με το όνομα nordostbahnhof (1). Ο χρήστης που θα έχει στη διάθεσή του το συγκεκριμένο προφίλ (αρχείο nordostbahnhof.ovpn) θα μπορεί να συνδέεται στον OpenVPN server χωρίς να πληκτρολογεί password (βλ. επιλογή nopass). Το νέο προφίλ σύνδεσης θα αποθηκευτεί κάτω από τον κατάλογο /home/pi/ovpns (2).

Εφαρμογές σύνδεσης στον OpenVPN server μας διατίθενται για όλα τα λειτουργικά συστήματα και πλατφόρμες. Εδώ βλέπουμε μια ενεργή σύνδεση η οποία επετεύχθη μέσω του OpenVPN Connect για Android -- και με βάση το προφίλ που μόλις φτιάξαμε.

Εφαρμογές σύνδεσης στον OpenVPN server μας διατίθενται για όλα τα λειτουργικά συστήματα και πλατφόρμες. Εδώ βλέπουμε μια ενεργή σύνδεση η οποία επετεύχθη μέσω του OpenVPN Connect για Android — και με βάση το προφίλ που μόλις φτιάξαμε. Για συνδέσεις από Linux, εξάλλου, αρκεί να κατεβάσουμε το προφίλ σύνδεσης (το nordostbahnhof.ovpn, στο πλαίσιο του παραδείγματός μας) και να πληκτρολογήσουμε κάτι σαν sudo openvpn --config ~/nordostbahnhof.ovpn. Να σημειώσουμε τέλος ότι ο αγαπημένος μας client για MacOS X και Windows είναι το Viscosity. Προτείνουμε να το κατεβάσετε και να το δοκιμάσετε, αφού διατίθεται δωρεάν για 30 ημέρες. Αν σας κάνει, η αγορά του κοστίζει μόλις 9 δολάρια (ή 14 δολάρια, αν το θέλετε για MacOS X και ταυτόχρονα για Windows). Ανεξάρτητα του OpenVPN client, ας υπογραμμίσουμε ότι οι συνδέσεις προς τον OpenVPN server είναι δυνατές μόνον όταν βρισκόμαστε εκτός του τοπικού του δικτύου. Επίσης, στον router μπροστά από το Raspberry Pi πρέπει να έχει οριστεί ο κατάλληλος κανόνας port forwarding. Έτσι, οι πελάτες που επιχειρούν σύνδεση, π.χ., στο port 1194/TCP του WAN interface του router, θα φτάνουν στο ίδιο port του RasPi.

Ενεργή σύνδεση πελάτη στον OpenVPN server που τρέχει στο Raspberry Pi μας, όπως φαίνεται με τη βοήθεια του εργαλείου pivpn.

Σας άρεσε το άρθρο; Αν ναι, τι θα λέγατε για ένα tip στο PayPal;

5 Responses to “Μεταμορφώστε το RasPi σε VPN server, χωρίς πολλά πολλά”

  1. nikolis | 26/07/2017 at 00:18

    Πολύ ωραίο.

  2. polmourgos | 05/10/2017 at 20:48

    Μετα τα πολυ αναλυτικά και κατατοπιστικα αρθρα σας σχετικα με το pivpn και pihole εφτασα σχεδον στο τερμα.Εβαλα στο raspberry τα δυο παραπανω και δουλευουν τελεια.Το εντυπωσιακο ειναι που συνδέομαι απο τον χωρο εργασιας στο vpn μου στο σπίτι και το pihole κοβει τις διαφημίσεις.
    Εχω ομως ενα ερωτημα σχετικα με το τελικο αποτελεσμα του σεταρισματος του vpn.Οταν χτυπαω whatismyip μου βγαζει την κανονικη του isp μου.Αυτο ειναι κανονικο η εχω καπου αστοχια στην εγκατασταση μου.Ευχαριστω.
    Pol

    • subZraw | 05/10/2017 at 23:53

      Καλησπέρα,
      Καταλαβαίνω ότι όλα είναι καλά. Σκέψου ότι οι διαφημίσεις μπλοκάρονται, γεγονός που σημαίνει ότι φτάνεις μέχρι το RasPi. Επιπλέον, μπροστά από το modem που έχεις στο σπίτι είναι ο ISP σου. Συνδέεσαι μέσω OpenVPN στο RasPi, βγαίνεις στο Internet μέσω του modem (που είναι μπροστά από το RasPi), άρα ουσιαστικά βγαίνεις στο Internet μέσω του ISP. Έτσι, ο έλεγχος που κάνεις επιστρέφει το δημόσιο IP που το modem έχει λάβει από εκείνον. Με λίγα λόγια, όλα καλά κι αναμενόμενα :)

  3. polmourgos | 06/10/2017 at 10:38

    Ευχαριστω για την απαντηση.
    Αλλα σε μια δοκιμη σε σερβερ επι πληρωμη οταν χτυπαγα whatismyip μου εβγαζε Γαλλια.Γιατι απο εκει ηταν ο resolver.Εδινε αρκετους που μπορουσες να επιλεξεις αν πληρωνες φυσικα.
    Εγω στο δικο raspberry with pivpn θα μπορουσα να ενσωματωσω αυτη την δυνατοτητα?
    Το λεω αυτο διοτι σε ορισμενες ιστοσελιδες υπαρχει γεωγραφικος περιορισμος.
    Ευχαριστω για τον χρονο σας.

    • dimitri0us | 14/12/2017 at 02:13

      Σου έβγαζε Γαλλία γιατί εκεί ήταν ο server τους. Εσύ τον έχεις settarei στο rasoberey σπίτι σου οπότε θα πάρεις την ip του σπιτιού σου!

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων