mDNS πάνω από WireGuard: τρεις πύλες πριν απαντήσει ένας peer
Το Avahi χρειάζεται μια κατάλληλη διεπαφή, μια διαδρομή προς την ομάδα και έναν peer που κατέχει τον προορισμό. Τρεις πύλες, τρεις ξεχωριστοί έλεγχοι και καμία διανομή σε πολλούς.
Η ρύθμιση της σημαίας multicast σε μια συσκευή WireGuard καθιστά τη διεπαφή κατάλληλη για λογισμικό ανακάλυψης, και αυτό είναι το μόνο που κάνει η σημαία. Δεν λέει στο πρωτόκολλο πού πρέπει να πάει ένα πακέτο ομάδας, και σε μια συσκευή με πολλούς peers δεν υπάρχει μία προφανής απάντηση. Τρεις ξεχωριστές πύλες στέκονται ανάμεσα σε έναν ενεργό δαίμονα και μια ανακαλυφθείσα υπηρεσία.
Δοκιμάστε τις με τη σειρά, γιατί το πέρασμα της μίας δεν λέει τίποτα για την επόμενη.
Πρώτη πύλη: η σημαία και η πολιτική του δαίμονα
Μια συσκευή WireGuard στο Linux δημιουργείται ως σύνδεση σημείου-προς-σημείο χωρίς ARP και δεν φέρει τη σημαία multicast από προεπιλογή. Η προσθήκη της σημαίας είναι μια τοπική αλλαγή διεπαφής, που εκτελείται από ό,τι διαχειρίζεται τη συσκευή. Το Avahi έχει τη δική του εικόνα του κόσμου πάνω από αυτό, και η προεπιλεγμένη πολιτική του παρακάμπτει εντελώς τις διεπαφές σημείου-προς-σημείο. Επομένως δύο ανεξάρτητοι έλεγχοι καταλληλότητας ισχύουν πριν κινηθεί έστω και ένα πακέτο.
Άρα ο δαίμονας χρειάζεται ρητή απόφαση, όχι απλώς μια διεργασία που εκτελείται. Οι τεκμηριωμένοι έλεγχοί του περιλαμβάνουν allow-interfaces, deny-interfaces και allow-point-to-point, και ο τελευταίος είναι η ρύθμιση που χάνουν οι άνθρωποι.
Οι παρακάτω έλεγχοι αναφέρουν τις σημαίες της σύνδεσης, τη διαδρομή multicast και αν η διαμόρφωση του δαίμονα αναλύεται καθόλου:
ip -d link show wg0
ip route get 224.0.0.251
avahi-daemon --check
Ένας δαίμονας που ξεκίνησε επιτυχώς δεν έχει απαραίτητα ανοίξει υποδοχές στη διεπαφή που σας ενδιαφέρει. Διαβάστε την ενεργή διαμόρφωσή του αντί να υποθέτετε ότι η κατάσταση της υπηρεσίας ισούται με την κάλυψη.
Δεύτερη πύλη: η διαδρομή προς την ομάδα
Η δεύτερη πύλη είναι η συνηθισμένη δρομολόγηση. Ένα πακέτο με διεύθυνση προς 224.0.0.251 ακολουθεί τον πίνακα προώθησης όπως οτιδήποτε άλλο, και αν ο πίνακας το στέλνει έξω από τη φυσική διεπαφή LAN, καμία διαμόρφωση WireGuard δεν θα το αλλάξει. Διορθώστε πρώτα τη διαδρομή και η υπόλοιπη έρευνα γίνεται συντομότερη. Δείτε τι αναφέρει ο πυρήνας για τη διεύθυνση ομάδας πριν αγγίξετε οποιαδήποτε κλειδιά peer.
| Observation | Gate it belongs to | What it does not prove |
|---|---|---|
Multicast flag present on wg0 | Interface eligibility | The daemon will use the interface |
Route to the group via wg0 | Forwarding | Any peer will receive it |
| Destination inside a peer's allowed list | Peer selection | That peer's network will answer |
Χωρίς συγκεκριμένη διαδρομή, ο πυρήνας επιστρέφει στη δική του διαχείριση multicast της σύνδεσης, γι' αυτό η προεπιλογή φαίνεται σωστή σε ένα επίπεδο LAN και λάθος μόλις η ίδια κίνηση ομάδας πρέπει να βγει από ένα τούνελ. Η αποτυχία είναι σιωπηλή από την πλευρά του αποστολέα: το ερώτημα πηγαίνει κάπου, και η απάντηση δεν φτάνει ποτέ.
Τρίτη πύλη: το WireGuard επιλέγει έναν peer ανά πακέτο
Το WireGuard επιλέγει εξερχόμενο peer αναζητώντας τον προορισμό στα σύνολα επιτρεπόμενων διευθύνσεων, και η διαδρομή αποστολής του Linux εκτελεί αυτή την αναζήτηση μία φορά ανά πακέτο. Το αποτέλεσμα είναι ένα, και το πακέτο κρυπτογραφείται για αυτόν τον peer. Το ίδιο πρόθεμα ομάδας σε επιτρεπόμενες λίστες πολλών peers δεν δημιουργεί συμμετοχή ούτε αναπαραγωγή· δημιουργεί μια αμφίσημη αναζήτηση που καταλήγει σε έναν από αυτούς.
Σε μια αποκλειστική σύνδεση δύο άκρων αυτό είναι ακριβώς αυτό που θέλετε, γιατί υπάρχει ένας προβλεπόμενος παραλήπτης για την σκόπιμα μεταφερόμενη κίνηση ομάδας. Σε μια διεπαφή με πέντε peers είναι περιορισμός, όχι χαρακτηριστικό, και η διόρθωση ανήκει στον σχεδιασμό και όχι στη διαμόρφωση οποιουδήποτε μεμονωμένου peer.
Ένας σχεδιασμός με διακλάδωση χρειάζεται ρητό αναμεταδότη, ξεχωριστές συνδέσεις ή εντελώς διαφορετικό μηχανισμό ανακάλυψης. Το να δημοσιεύεις μια συνταγή δύο άκρων ως λύση πολλών πελατών επειδή κάθε πελάτης μπορεί να δοκιμάσει την πύλη είναι το πώς αυτό αναπτύσσεται λάθος.
Η εισερχόμενη κατεύθυνση ελέγχεται διαφορετικά: η πηγή ενός ληφθέντος πακέτου πρέπει να βρίσκεται μέσα στην επιτρεπόμενη λίστα του πιστοποιημένου peer. Η προσθήκη προορισμού multicast εκεί δεν αντικαθιστά την πραγματική ιδιοκτησία της πηγής του αποστολέα.
Η ανάκλαση είναι όριο, όχι γέφυρα
Ο ανακλαστήρας του Avahi αναπαράγει μηνύματα mDNS μεταξύ των διεπαφών που επιλέγει, στο επίπεδο εφαρμογής. Είναι ένα όριο ανακάλυψης μεταξύ δικτύων, όχι γέφυρα Ethernet και όχι γενικός δρομολογητής multicast. Δύο ανακλαστήρες συνδεδεμένοι στα ίδια δίκτυα θα δημιουργήσουν πρόθυμα έναν βρόχο επαναλαμβανόμενων ανακοινώσεων.
Η ανάκλαση παραδίδει επίσης ονόματα υπηρεσιών και τα μεταδεδομένα τους σε άλλο δίκτυο, κάτι που είναι απόφαση ιδιωτικότητας όσο και δρομολόγησης. Περιορίστε τις επιλεγμένες διεπαφές και χρησιμοποιήστε φίλτρα υπηρεσιών όπου η εγκατεστημένη έκδοση τα υποστηρίζει, ώστε να περνούν το όριο μόνο οι ανακοινώσεις που χρειάζεται ένας εξουσιοδοτημένος χρήστης.
Η ανακάλυψη και η χρήση παραμένουν ξεχωριστά αποτελέσματα. Ένας πελάτης μπορεί να δει ανακοίνωση για μια υπηρεσία της οποίας η διαφημιζόμενη διεύθυνση είναι απρόσιτη από εκεί που βρίσκεται ο πελάτης, ή της οποίας τη θύρα απορρίπτει η πολιτική πρόσβασής του. Επιβεβαιώστε τη σύνδεση της υπηρεσίας αφού εμφανιστεί η ανακοίνωση, και αν η εφαρμογή υποστηρίζει σταθερό όνομα DNS ή ρητή διεύθυνση διακομιστή, προτιμήστε το από την επέκταση της τοπικής ανακάλυψης. Η περιγραφή της δρομολόγησης με κρυπτοκλειδί καλύπτει την επιλογή peer βάσει προορισμού από την οποία εξαρτάται όλο αυτό.