Raspberry Pi | Φτιάχνουμε τον δικό μας οικιακό VPN server με το PiVPN


Ένα από τα πλεονεκτήματα που μας προσφέρει το Raspberry Pi, είναι ότι μπορούμε να έχουμε πολλές διαφορετικές συσκευές σε μία. Με ένα μόνο Pi μπορείς να έχεις ένα Android TV-Box, έναν Linux υπολογιστή, έναν cloud server, μία gaming κονσόλα και ένα σωρό άλλα πράγματα, αλλάζοντας απλά τη microSD κάρτα του! Σήμερα θα γεμίσουμε ακόμη μία κάρτα και θα μετατρέψουμε τη συσκευή μας σε VPN server, για να έχουμε ασφαλή πρόσβαση στο δίκτυο του σπιτιού / γραφείου, από εξωτερικούς χώρους.

Τι είναι το VPN και γιατί το χρειάζομαι;


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

Με το VPN (Virtual Private Network) μπορούμε να δημιουργήσουμε μία κρυπτογραφημένη σύνδεση από το smartphone / υπολογιστή μας, έως το router του δικτύου μας. Θα φτιάξουμε στην ουσία ένα τούνελ με μόνο μία είσοδο και μία έξοδο, από το οποίο θα περνάνε όλες οι πληροφορίες που ζητάμε από τους server μας. Ακόμη και αν έχουμε συνδεθεί σε κάποιο δημόσιο WiFi δίκτυο ή αν μπαίνουμε από τα δεδομένα κινητής τηλεφωνίας (τα οποία δεν είναι κρυπτογραφημένα), θα είναι σα να βρισκόμαστε στο Wi-Fi του σπιτιού μας και κανείς δε θα μπορεί να υποκλέψει τα δεδομένα μας!

Διαφήμιση
-

Τι προσφέρει το VPN;


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

Ασφάλεια παντού με λιγότερα έξοδα και κόπο. Το στήσιμο ενός ασφαλούς δικτύου απαιτεί χρήματα και διαδικασίες. Πρέπει για παράδειγμα να αγοράσεις ένα καλό router, να ανοίξεις πόρτες, να σηκώσεις firewall και ένα σωρό άλλες υπηρεσίες για να το προστατεύσεις. Δεν είναι κρίμα λοιπόν να χάνεις όλη αυτή την προστασία όταν φεύγεις από το χώρο σου; Με το VPN από όπου και αν βρίσκεσαι, από όποια συσκευή ή δίκτυο και αν μπαίνεις στο ίντερνετ, έχεις αυτόματα και όλη αυτή την ασφάλεια του δικτύου σου!

Μία μόνο ανοιχτή πόρτα στο router. Ας πούμε τώρα ότι έχεις πολλές υπηρεσίες να τρέχουν στο server σου και για να έχεις πρόσβαση σε αυτές, πρέπει να ανοίξεις και αντίστοιχα πολλές πόρτες στο router.  Με το VPN μπορείς να έχεις όλες τις υπηρεσίες σου σε τοπική σύνδεση, ανοίγοντας μόνο μία πόρτα στο router, αυτή που χρησιμοποιεί το VPN! Έτσι βελτιώνεις την ασφάλεια του δικτύου, έχοντας μόνο μία πόρτα και μία συσκευή (τον VPN server) για να ανησυχείς.

Παντού χωρίς διαφημίσεις αν έχεις Pi-hole. Αν έχεις ρυθμίσει το Pi-hole που είδαμε τις προάλλες ως DNS server στο δίκτυό σου, με τη χρήση VPN μπορείς να έχεις ίντερνετ χωρίς διαφημίσεις από όποια συσκευή θέλεις, σε οποιοδήποτε σημείο του κόσμου κι αν βρίσκεσαι.

Αξίζει τέλος να πούμε ότι άλλα είναι τα οφέλη του προσωπικού και άλλα του εμπορικού VPN. Ο στόχος του προσωπικού VPN είναι όπως είδαμε η ασφαλής πρόσβαση στο δικό μας δίκτυο. Το εμπορικό VPN που προσφέρεται από εταιρίες όπως το ProtonVPN και το ExpressVPN, μας δίνει πρόσβαση στους server της εκάστοτε εταιρίας ανά τον κόσμο. Με αυτό τον τρόπο μπορούμε κυρίως να μπούμε σε σελίδες με περιορισμούς στην τοποθεσία.

Διαφήμιση
-

Εγκατάσταση PiVPN στο Raspberry Pi


Για το Raspberry Pi μία από τις καλύτερες και ευκολότερες λύσεις VPN είναι το PiVPN, το οποίο είναι στην ουσία μία σειρά εντολών (script) που σετάρουν το OpenVPN στη συσκευή μας. Η εγκατάσταση είναι εξαιρετικά απλή και μοιάζει πολύ με αυτή του Pi-hole που είδαμε τις προάλλες.

Ξεκινάμε κάνοντας εγκατάσταση με αυτές τις οδηγίες το Raspbian Lite, την έκδοση του λειτουργικού συστήματος η οποία δε διαθέτει γραφικό περιβάλλον, καθώς δεν το χρειαζόμαστε. Κάνουμε login στο Raspbian με τα προεπιλεγμένα username ("pi") και password ("raspberry").
Μπαίνουμε στις βασικές ρυθμίσεις του Pi με την εντολή:

sudo raspi-config

Εκεί επιλέγουμε τις ρυθμίσεις δικτύου και του δίνουμε το όνομα (SSID) και τον κωδικό του Wi-Fi μας για να συνδεθεί στο ίντερνετ. Μπορούμε φυσικά να προσπεράσουμε αυτό το βήμα, συνδέοντας το Pi στο ίντερνετ με καλώδιο Ethernet.

Ο εγκαταστάτης του PiVPN χρειάζεται δικαιώματα διαχειριστή για να λειτουργήσει σωστά, οπότε αλλάζουμε το χρήστη σε root με την εντολή:

sudo su

Για να εγκαταστήσουμε το PiVPN δίνουμε την εντολή:

curl -L https://install.pivpn.io | bash

Η διαδικασία εγκατάστασης θα ξεκινήσει και ένα από τα πράγματα που θα μας ζητήσει είναι να επιβεβαιώσουμε τη στατική IP του Pi.


Στη συνέχεια πρέπει να επιβεβαιώσουμε στους φακέλους ποιανού χρήστη του Pi θα αποθηκευτούν τα αρχεία του OpenVPN (.ovpn). Λογικά ο μόνος είναι ο "pi", τον διαλέγουμε και προχωράμε.


Τώρα θα πρέπει να ρυθμίσουμε το Pi έτσι ώστε να κατεβάζει και να εγκαθιστά αυτόματα τις ενημερώσεις ασφαλείας. Απλά πατάμε "Yes" αλλά πρέπει να έχουμε στο νου μας να κάνουμε μία επανεκκίνηση πού και πού στο Pi για να εφαρμόζονται τα update!


Επιλέγουμε το πρωτόκολλο "UDP" για τη σύνδεση του Pi στο δίκτυο.


Επιβεβαιώνουμε την πόρτα "1194" που χρησιμοποιεί το OpenVPN (μπορούμε να την αλλάξουμε αν θέλουμε).


Διαλέγουμε το πιστοποιητικό ασφαλείας για τα κλειδιά μας. Εδώ επιλέγουμε αναγκαστικά το "2048", καθώς με το "4096" η σύνδεσή μας θα γίνει πολύ αργή.


Τώρα ήρθε η σειρά να δημιουργήσουμε το κλειδί του server ή καλύτερα την κλειδαριά στην οποία θα βάζει το κλειδί του ο κάθε χρήστης για να έχει πρόσβαση στο server. Πατάμε "OK" και περιμένουμε κανένα εικοσάλεπτο για να τελειώσει...

Επιβεβαιώνουμε τη δημόσια IP του δικτύου μας και επιλέγουμε τον DNS server που θέλουμε να χρησιμοποιήσουμε. Προτείνεται η επιλογή της Google, αλλά αν χρησιμοποιούμε έναν δικό μας DNS, όπως για παράδειγμα το Pi-hole, πατάμε "Custom" και  δίνουμε τη διεύθυνση IP του.


Πατάμε "No" στην προσθήκη "Custom Search Domain" και η εγκατάσταση έχει τελειώσει!


Δημιουργία κλειδιών για τους χρήστες


Τώρα που ο VPN server μας είναι έτοιμος, πρέπει να δημιουργήσουμε τους χρήστες που θα μπαίνουν σε αυτόν και να φτιάξουμε τα αντίστοιχα κλειδιά με τα οποία θα έχουν πρόσβαση. Για να φτιάξουμε έναν νέο χρήστη δίνουμε την εντολή:

pivpn add

Το κλειδί που θα δημιουργηθεί με αυτό τον τρόπο θα έχει και κωδικό ασφαλείας. Αν δηλαδή κάποιος το βρει και προσπαθήσει να μπει στο δίκτυό μας, θα πρέπει να ξέρει και τον κωδικό του. Σε περίπτωση που θέλουμε ένα κλειδί χωρίς κωδικό, μπορούμε να δημιουργήσουμε έναν χρήστη με την εντολή:

pivpn add nopass

Στη συνέχεια θα μας εμφανίσει το ακόλουθο πεδίο:

Enter a Name for the Client:

Εδώ θα πρέπει να ονομάσουμε τη συσκευή για την οποία προορίζεται το κλειδί. Θα φτιάξω για παράδειγμα ένα για το κινητό μου και θα το ονομάσω "ChrisPhone" και θα φτιάξω και ένα για τον Windows υπολογιστή μου που θα το ονομάσω "WindowsClient". Δεν έχει σημασία τι θα γράψουμε, αρκεί να μπορούμε να ξεχωρίζουμε τα κλειδιά μας.

Μόλις το επιβεβαιώσουμε θα δημιουργηθεί το κλειδί του χρήστη και θα μας εμφανίσει την τοποθεσία στην οποία έχει αποθηκευτεί. Συνήθως είναι στο "~/home/pi/ovpns". Πηγαίνουμε λοιπόν σε αυτό το φάκελο, παίρνουμε τα αρχεία "ChrisPhone.ovpn" και "WindowsClient.ovpn" που έχει δημιουργηθεί και το μεταφέρουμε στο smartphone μας.


Αν θελήσουμε κάποια στιγμή να δούμε πόσους χρήστες έχουμε δημιουργήσει στο PiVPN, αυτό γίνεται με την εντολή:

pivpn list

Και αν τέλος θέλουμε να διακόψουμε την πρόσβαση σε κάποιον από αυτούς (π.χ. στον "ChrisPhone"), η εντολή είναι η εξής:

pivpn revoke ChrisPhone

Ανοίγουμε την πόρτα "1194" στο router (port forwarding)


Για να έχουμε πρόσβαση στις συσκευές του δικτύου μας από οποιαδήποτε τοποθεσία, πρέπει να ανοίξουμε μία πόρτα στο router για κάθε υπηρεσία που τρέχει και αυτό είναι ένα μεγάλο ρίσκο όσον αφορά την ασφάλεια του δικτύου. Το οικιακό VPN μας γλιτώνει από αυτή τη διαδικασία και μέσα από μία μόνο πόρτα, μας δίνει τη δυνατότητα να δούμε όλες τις συσκευές και όλες μας τις εφαρμογές.

Προηγουμένως ρυθμίσαμε το PiVPN να "μιλάει" μέσα από την πόρτα 1194, οπότε τώρα πρέπει να την ανοίξουμε στο router μας. Δυστυχώς σε κάθε router η διαδικασία είναι διαφορετική, τα βήματα όμως σε γενικές γραμμές είναι τα εξής:

Όντας συνδεδεμένοι στο τοπικό μας δίκτυο, κάνουμε login στη διεύθυνση του router μας (π.χ. "192.168.1.1"). Πηγαίνουμε στο μενού με ονομασία "Port forwarding" ή "Virtual server" ή "NAT". Εκεί υπάρχει ένας άδειος πίνακας στον οποίο μπορούμε να καταχωρήσουμε τους κανόνες port forwarding. Δημιουργούμε λοιπόν μία νέα καταχώριση με τα εξής στοιχεία (αν αυτά απαιτούνται):

From: 1194 
To: 1194 
Port: 1194 
Internal IP: Η static IP που ορίσαμε στο PiVPN μας (π.χ. 192.168.1.100) 
External IP: το αφήνουμε κενό

Αποθηκεύουμε τις αλλαγές και βγαίνουμε από τη σελίδα διαχείρισης του router. Αν θέλετε συγκεκριμένες οδηγίες για το δικό σας router, ρίξτε μια ματιά στη σελίδα Port Forward.

Σύνδεση στο VPN μας μέσω smartphone


Τώρα που όλα είναι επιτέλους έτοιμα, μπορούμε να συνδεθούμε στο δίκτυό μας μέσω VPN. Θα χρειαστεί να κατεβάσουμε μία εφαρμογή διαχείρισης VPN συνδέσεων όπως για παράδειγμα αυτή του OpenVPN για το Android.

Την ανοίγουμε και πατάμε "OVPN Profile". Βρίσκουμε το αρχείο "ChrisPhone.ovpn" που μεταφέραμε προηγουμένως από το Raspberry Pi στη συσκευή μας, το επιλέγουμε και πατάμε "Import".


Επιβεβαιώνουμε την εισαγωγή του νέου προφίλ πατώντας "Add". Τέλος απλά πατάμε το διακόπτη στα αριστερά για να ξεκινήσει η σύνδεση με το VPN μας.


Εν κατακλείδι


Οδεύουμε σε μία εποχή όπου η ασφάλεια των δεδομένων μας γίνεται όλο και πιο σημαντική και πολλοί από εμάς θα επιλέξουν να τα φιλοξενούν στο δικό τους server και να τρέχουν τις δικές τους υπηρεσίες. Για αυτό το λόγο οι εύκολες και φθηνές λύσεις που μας προσφέρονται μέσω του Raspberry Pi είναι πολύτιμες.

Πριν από 10 χρόνια κανείς δε φανταζόταν ότι με οκτώ ευρώ θα μπορούσε να έχει στο σπίτι του έναν VPN server χαμηλής κατανάλωσης ενέργειας και να τρέχει ένα σωρό χρήσιμες υπηρεσίες, όπως file server, media center, email server και λοιπά. Πλέον μπορούμε και είναι καλό έστω να πειραμματιστούμε με τέτοιες λύσεις, αν δεν τις υιοθετήσουμε για μόνιμη χρήση.

Σχόλια

Δείτε επίσης...

Android | Γιατί δε θα αγόραζα ποτέ smartphone της OnePlus

Φεύγω από την Google (μέρος 15) | ''Ξηλώνουμε'' τα Google apps από το Android

Ιδιωτικό απόρρητο | Το αφελές επιχείρημα του ''Δεν έχω τίποτα να κρύψω''

Docker (μέρος 7) | Στήνουμε έναν reverse proxy για τα container μας με το Traefik

Μάθε παιδί μου Linux (μέρος 11) | Δίσκοι, κατατμήσεις και σύστημα αρχείων (filesystem)

Ubuntu Touch 2020 review | Μια πραγματική mobile GNU/Linux διανομή έτοιμη για καθημερινή χρήση

Απόρρητο | ''Μπερδεύουμε'' τον αλγόριθμο Google και Facebook με ψεύτικες πληροφορίες

Android | Περιόρισε την παρακολούθηση των εφαρμογών και κόψε τις διαφημίσεις με το TrackerControl

Docker (μέρος 1) | Τι είναι και πώς το εγκαθιστούμε στον υπολογιστή μας;

Android | Βάλε στην ''απομόνωση'' τις εφαρμογές που δεν εμπιστεύεσαι με το Shelter