Εδώ και μία εβδομάδα έχω στήσει στο Raspberry Pi4 ένα matrix server στο σπίτι. Πάνω του έχω βάλει τα εξής bridges που παίζουν όλα μια χαρά:
- Facebook Messenger
- Telegram
- Skype
- Discord - περίπλοκο, καθώς θέλει κ αυτό να σηκώσετε κάποιο app.
- IRC
- Slack – αρκετά περίπλοκο, πρέπει να είστε admin στο slack channel που θέλετε να κάνετε bridge ή να σας επιτρέψουν να σηκώσετε ένα app με συγκεκριμένα permissions.
Μου πήρε περίπου 2 εβδομάδες διαβάσματος και πειραματισμού, και νομίζω τελικά βρήκα τον πιο απλό τρόπο, ο οποίος είναι plug-n-play χρησιμοποιώντας ένα ansible playbook που έχει γράψει ένας developer: https://github.com/spantaleev/matrix-docker-ansible-deploy
Το καλύτερο είναι να το στήσετε πάνω σε κάποιο cloud VPS, έτσι θα έχετε αρκετά μεγάλο internet bandwidth και δεν θα εξαρτάστε από την ταχύτητα της DSL του σπιτιού σας, καθώς επίσης δεν θα σας απασχολεί το θέμα ρύθμισης του NAT στο router και όλες οι ρυθμίσεις για να βλέπει το domain την dynamic IP σας, γίνονται αρκετά απλούστερες. Στην περίπτωση που το στήσετε με αυτό τον τρόπο, επιλέξετε έναν server που βρίσκεται στην ίδια γεωγραφική θέση με εσάς, διότι μερικά messenger apps (πχ το Facebook Messenger) θα γκρινιάζει ότι κάποιος από περιέργη τοποθεσία θέλει να συνδεθεί στον λογαριασμό σας.
Αν πάλι θέλετε να το στήσετε στο σπίτι, τότε να έχετε υπόψην σαν ότι επειδή αλλάζει η IP διεύθυνση που έχετε, θα πρέπει να στήσετε κάποιο DynDNS service. Αυτό μπορεί να γίνει απευθείας στο router σας (αν διαθέτει τέτοια δυνατότητα) – όμως θα είστε περιορισμένοι στα συγκεκριμένα DynDNS services που υποστηρίζει το router σας. Εγώ θα σας πρότεινα να κάνετε το εξής:
- Αγοράστε ένα domain
- Κάνε έναν δωρεάν λογαριασμό στην CloudFlare
- Τρέξτε κάπου στο σπίτι σας το https://hub.docker.com/r/oznu/cloudflare-ddns/ το οποίο θα συχρονίζει το A Record του domain σας να βλέπει πάντα την IP σας στο σπίτι.
Το πλεονάκτημα στήνοντας το σπίτι σας είναι σίγουρο ότι έχετε τα δεδομένα σας στο σπίτι σας ;)
Να σημειώσω εδώ ότι το free cloudflare προσφέρει και proxy dns, το οποίο είναι πολύ καλό για δύο λόγους:
- Κρύβει την IP του σπιτιού σας (δηλαδή αν κάποιος κάνει
nslookup domain.com
τότε δεν θα δείξει την IP του σπιτιού σας, αλλά μία obfuscated IP του cloudflare. - Παίρνετε τζάμπα DDoS protection και άλλα καλά.
Βέβαια η διαδικασία σεταρίσματος του ansible playbook θα σας δυσκολέψει λίγο, γιατί επειδή το playbook τα κάνει όλα αυτόματα για εσάς, δεν γνωρίζει ότι εσείς χρησιμοποιείτε το cloudflare. Το πρόβλημα είναι μόνο στην περίπτωση όπου θέλετε να χρησιμοποιήσετε το proxy feature του clouflare, καθώς για αυτή τη περίπτωση θα χρειαστείτε τα δικά του SSL certificates, οπότε σε αυτή τη περίπτωση θα πρέπει να τακτοποιήσετε μόνοι σας – όχι ότι είναι κάτι δύσκολο. Διαφορετικά, μπορείτε να χρησιμοποιήσετε το cloudflare σε απλό DNS mode, και όχι proxy – σε αυτή τη περίπτωση δε χρειάζεται να αλλάξετε τίποτα στο playbook.
Στην περίπτωση που ο ISP σας μπλοκάρει public IP και πόρτες, τότε μπορείτε να κάνετε το εξής: να σηκώσετε το πιο φθηνό VPS/droplet σε κάποιο cloud και εκεί να σετάρετε ένα VPN server (είτε openVPN είτε wireguard). Το πρώτο έχει μεγάλη compatibility και το δεύτερο είναι αρκετά πιο γρήγορο – οπότε δείτε τι σας βολεύει και προτιμήστε. Με αυτή τη λύση, μπορείτε να κάνετε συνδέσετε το μηχάνημα στο σπίτι σας (αυτό που τρέχει το matrix) στον VPN server σας, όπου εκεί θα μπορείτε να κάνετε portforward ότι θέλετε, και δεν θα έχει ιδέα o ISP σας.
Σε κάθε περίπτωση καλό θα είναι να κάνετε κάποιες βασικές ρυθμήσεις ασφαλείας στον server που θα τρέχει το matrix, όπως ssh σε άλλη πόρτα (σε αυτή τη περίπτωση θα πρέπει να ρυθμίσετε το ansible να συνδέεται σε αυτήν), όχι root, login μόνο σε συγκεκριμένο χρήστη, disable τα password authentication και enable μόνο τα key-based, firewall ports, αυτόματα updates, κλπ. Μην είστε όμως υπερβολικοί, πχ σε κάποια φάση είχα ενεργοποιήσει μόνο TLS 1.3 με αποτέλεσμα να μην μπορεί να συνδεθεί κανένας σε μένα, καθώς είναι αρκετά καινούριο και δεν το χρησιμοποιούν πολλοί. Οπότε έβαλα σαν minimum TLS 1.2 – διαφορετικά δεν δούλευε το federation :P
Το ansible playbook σας ρυθμίζει τα πάντα, το federation καθώς επίσης και τα bridges. Οπότε εκμεταλλευτείτε το και μην το κάνετε manually. Επίσης λαμβάνει υπόψην του την μελλοντική αναβάθμιση αυτών. Επίσης επειδή τρέχουν όλα σε docker, είναι εύκολο να τα αφαιρέσετε χωρίς να “μολύνει” το σύστημά σας ή να το αφήσει σε “περίεργο” state. Βάζει τα πάντα στο /matrix
directory.
Αν το κάνετε σε Raspberry να ξέρετε ότι τα περισσότερα images του playbook παίζουν σε AMD64 αρχιτεκτονική. Για τα υπόλοιπα κατεβάζει το git repo και κάνει build. Αυτό δεν είναι ενερογποιημένο σε όλα τα bridges, αλλά στέλνω PRs για να το φτιάξω να παίζουν όλα.
Η εμπειρία μου δουλεύει άψογα. Με όλα αυτά τα bridges θέλει περίπου 1.5GB RAM. πχ ένα VPS από την Hetzner με 2 CPU και 4GB RAM είναι μια χαρά.
Σε κάθε περίπτωση ΜΗΝ τρέξετε τον δικό σας Jitsi Server καθώς θέλετε πολύ δυνατό PC.
ΥΣ: Αν θέλετε αναλυτικές οδηγίες, θα προσπαθήσω να βρω χρόνο να το κάνω.