Απομακρυσμένη σύνδεση¶
Η απομακρυσμένη σύνδεση μιας μηχανής Α στην μηχανή Β απαιτεί η μηχανή Β:
- Να έχει στατική IP, ή να χρησιμοποιεί μία υπηρεσία όπως no-ip
- Να έχει ανοίξει την θύρα (port forwarding) που θέλει να χρησιμοποιήσει η μηχανή Α.
Επειδή το σενάριο αυτό είναι επισφαλές ( καθώς εκθέτει την μηχανή Β μέσω της ανοικτής θύρας στο διαδίκτυο), η καλύτερη λύση είναι η δημιουργία ενός δικτύου mesh.
Δίκτυο mesh¶
Για τον σκοπό αυτό χρησιμοποιούμε την υπηρεσία Tailscale (δωρεάν λογαριασμός). Η Tailscape δημιουργεί ένα δίκτυο μεταξύ των μηχανών (κόμβων), οι οποίοι συνδέονται απευθείας μεταξύ τους χωρίς ενδιάμεσο διακομιστή (mesh network).
Εγκατάσταση¶
- Κάθε μηχανή εγκαθιστά το Tailscale από τον επίσημη ιστοσελίδα. Ο δωρεάν λογαριασμός επιτρέπει την σύνδεση μέχρι 3 χρηστών.
- Από την κεντρική σελίδα "Machines", η μηχανή Β διαμοιράζει (share) την πρόσβαση της μηχανής της στέλνοντας ένα σύνδεσμο στην μηχανή Α.
- Η μηχανή Α αποδέχεται τον σύνδεσμο και η μηχανή Β εμφανίζεται στην λίστα μηχανών της Α με την ένδειξη "Shared in".
Ρυθμίσεις¶
- Απενεργοποίηση του key expiry (στο μενού με τις 3 τελείες δίπλα σε κάθε μηχανή).
- DNS -> Nameservers -> Glocal Nameservers -> Επιλογή του Cloudflare DNS.
- DNS -> Nameservers -> Override DNS servers -> Ενεργοποίηση. Με αυτό τον τρόπο παρακάμπτει τους DNS servers που έχουν οριστεί στο τοπικό δίκτυο ή στις μηχανές.
Χαρακτηριστικά¶
Κάθε μηχανή στο δίκτυο mesh έχει το δικό της όνομα (που μπορεί να το αλλάξει ο χρήστης) και μία μοναδική διεύθυνση IP η οποία δεν αλλάζει (παρά μόνον αν αφαιρεθεί η συσκευή από το δίκτυο).
Σύνδεση μέσω SSH¶
Προϋποθέτει ότι το SSH έχει εγκατασταθεί και στις δύο μηχανές (δες εδώ). Η σύνδεση γίνεται ως εξής:
Από την μηχανή Α εκτελώ τον σύνδεσμο ssh <username>@<ip>,
όπου
<username>είναι το όνομα του χρήστη στην μηχανή Β<ip>είναι διεύθυνση IP της μηχανής Β στο δίκτυο mesh.
Αντί της διεύθυνσης IP μπορεί να χρησιμοποιηθεί το μοναδικό αναγνωριστικό της μηχανής Β στο δίκτυο mesh που αποτελείται από το όνομα της μηχανής και το domain name του δικτύου mesh. Για παράδειγμα, mymachine.tail7dfh9.ts.net.
Ασφάλεια σύνδεσης¶
Πρέπει να κλείσουμε την θύρα 22 για πρόσβαση από την δημόσια IP της μηχανής Β, και να αφήσουμε ανοικτή την θύρα 22 μόνον για πρόσβαση από το δίκτυο mesh. Πρώτα τρέχουμε
για να βεβαιώσουμε ότι η διεπαφή του meshnet είναι ηtailscale0. Στην συνέχεια επιτρέπουμε την πρόσβαση μόνον μέσω VPN:
και τρέχουμε sudo ufw status numbered για να δούμε τους κανόνες όπως έχουν δημιουργηθεί και αριθμηθεί:
sudo ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 8096/tcp ALLOW IN Anywhere
[ 2] 22/tcp LIMIT IN Anywhere
[ 3] 41641/udp ALLOW IN Anywhere
[ 4] 32400/tcp ALLOW IN Anywhere
[ 5] 22 on tailscale0 ALLOW IN Anywhere
[ 6] 8096/tcp (v6) ALLOW IN Anywhere (v6)
[ 7] 22/tcp (v6) LIMIT IN Anywhere (v6)
[ 8] 41641/udp (v6) ALLOW IN Anywhere (v6)
[ 9] 32400/tcp (v6) ALLOW IN Anywhere (v6)
[10] 22 (v6) on tailscale0 ALLOW IN Anywhere (v6)
Οι κανόνες 2 και 7 που περιέχουν την θύρα 22πρέπει να διαγραφούν. Για τον λόγο αυτόν τρέχουμε sudo ufw delete 2 και sudo ufw delete 7. Αντιθέτως, οι θύρες 22 που σχετίζονται με το tailscale0 παραμένουν και η πρόσβαση στον VPS γίνεται μόνον μέσω του tailscale.
Ισχύει ότι: - θύρα 8096 είναι για το jellyfin - θύρα 41641 είναι για το tailscale - θύρα 32400 είναι για το plex.
Σύνδεση μέσω VNC¶
Απαιτείται η εγκατάσταση του VNC στην μηχανή Β (δες εδώ). Έπειτα με την βοήθεια ενός remote desktop client (π.χ. Remmina) στην μηχανή Α κάνουμε τα εξής:
- Δημιουργούμε ένα νέο Connection Profile.
- Επιλέγουμε VNC ως Protocol.
- Στο πεδίο "Server" εισάγουμε το μοναδικό αναγνωριστικό της μηχανής Β στο δίκτυο mesh που αποτελείται από το όνομα της μηχανής και το domain name του δικτύου mesh. Για παράδειγμα,
mymachine.tail7dfh9.ts.net. - Αφήνουμε το πεδίο "User Name" κενό.
- Στο πεδίο "Password" εισάγουμε τον κωδικό πρόσβασης που έχουμε ορίσει για την υπηρεσία VNC της μηχανής Β.
- Αποθηκεύουμε το Connection Profile και συνδεόμαστε.