Matrix homeserver

Εδώ και μία εβδομάδα έχω στήσει στο Raspberry Pi4 ένα matrix server στο σπίτι. Πάνω του έχω βάλει τα εξής bridges που παίζουν όλα μια χαρά:

  • Facebook Messenger
  • Telegram
  • WhatsApp
  • 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, το οποίο είναι πολύ καλό για δύο λόγους:

  1. Κρύβει την IP του σπιτιού σας (δηλαδή αν κάποιος κάνει nslookup domain.com τότε δεν θα δείξει την IP του σπιτιού σας, αλλά μία obfuscated IP του cloudflare.
  2. Παίρνετε τζάμπα 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.

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

7 Likes

μπορεί εγώ να έχω πολλές άγνωστες λέξεις αλλά ευχαριστώ για την ιδέα. όμως γιατί να θέλω μία τέτοια αυτονόμηση, ποια τα οφέλη? (δεν γνωρίζω) :)

Πρόχειρα, κάποιες σκέψεις που μου έρχονται στο μυαλό:

Το πρώτο είναι από άποψη ιδιωτικότητας των δεδομένων σου. Ο server τρέχει σπίτι σου και το όλο δίκτυο χρησιμοποιεί κρυπτογράφηση (E2E). Βέβαια θα μπορούσες να χρησιμοποιήσεις μία οποιαδήποτε άλλη instance αντί να φτιάξεις την δική σου στο σπίτι (πχ @matrix.org – η συγκεκριμένη θα σταματήσει να δέχεται registrations γιατί γέμισε), αλλά εξακολουθούν να βλέπουν την IP σου, το email σου, σε ποια chatrooms μιλάς, πόση ώρα μιλάς κλπ (σε καμιά περίπτωση δεν βλέπουν όμως τις συνομιλίες).

Το δεύτερο είναι για να τρέχεις όλα τα chat σου στην ίδια εφαρμογή (ένα κοινό μέρος) και να μην έχεις 5-6 διαφορετικά applications. πχ ανοίγω το element στο κινητό και μέσα σε αυτό παίρνω μυνήματα από το facebook, το telegram, whatsapp και άλλα, χωρίς να έχω τις επημέρους αυτές εφαρμογές εγκατεστημένες στο κινητό μου.

Το τρίτο είναι για να βοηθήσεις το δίκτυο του matrix.org. Οι περισσότεροι κάνουν register στο matrix.org server το οποίο έχει γονατίσει και θα σταματήσουν να δέχονται registrations φέτος το 2021 κάποια στιγμή. Οπότε το να έχεις ο καθένας δικό του server είναι σηματικό για αυτούς. Επειδή είναι όμως τεχνικά δύσκολο για τον μέσο χρήστη, προσπαθούν να βρουν μία λύση peer-to-peer όπου θα τρέχει ο server στον browser. Για την ώρα όμως δεν είναι “σταθερή” μία τέτοια υλοποίηση. Ωστόσο με το ansible playbook και ένα VPS η όλη διαδικασία είναι περίπου 5 clicks γι αυτό και την προτείνω.

Το τέταρτο είναι για καθαρά για τις γνώσεις που θα πάρεις κάνοντας ένα στήνοντας ένα τέτοιο πράγμα.

ΥΣ: Οπου χρησιμοποιήσα το ρήμα “μιλάς” εννούσα “γράφεις”/πληκτρολογείς. Οχι audio δηλαδή.

4 Likes

Καταρχήν ευχαριστούμε πολύ για την …περιήγηση!
Είναι κάτι που από καιρό σκέφτομαι να κάνω, αλλά με σταματάει ένα μόνο πράμα: το viber… Πρέπει να μαστε από τις λίγες χώρες στον κόσμο που σε τόσο μεγάλο ποσοστό χρησιμοποιεί viber…

2 Likes