Γιατί το multicast δεν περνά ένα VPN χωρίς σχέδιο
Η προσβασιμότητα είναι unicast. Ελέγξτε την ομάδα, το εύρος της, την κατάσταση προώθησης και μία διαδρομή από μία πηγή σε έναν δέκτη πριν προσθέσετε γέφυρα ή αναμεταδότη.
Δύο τοποθεσίες μπορούν να φτάνουν η μία την άλλη τέλεια με unicast και παρόλα αυτά να συμπεριφέρονται σαν να μη βλέπει η μία την ανακοίνωση ανακάλυψης του εκτυπωτή, τη ροή IPTV ή τον παλμό του συμπλέγματος. Αυτό δεν είναι χαλασμένο τούνελ· είναι η διαφορά ανάμεσα σε έναν προορισμό και σε μια ομάδα. Η παράδοση multicast χρειάζεται μοντέλο συνδρομής, κατάσταση προώθησης κατά μήκος της διαδρομής και μια διεπαφή πρόθυμη να μεταφέρει την κίνηση, και τίποτα από αυτά δεν προέρχεται από διαδρομή unicast. Η πορεία από την ομάδα της εφαρμογής σε έναν δέκτη που δουλεύει είναι η συντομότερη διαδρομή προς μια απάντηση.
Ξεκινήστε από την ομάδα και την εφαρμογή
Ρωτήστε ποια διεύθυνση ομάδας χρησιμοποιεί η εφαρμογή και για τι χρειάζεται η κίνηση. Ένα πρωτόκολλο ανακάλυψης που ανακοινώνει υπηρεσίες, μια ροή μετάδοσης και τα πακέτα χαιρετισμού ενός πρωτοκόλλου δρομολόγησης είναι τρία διαφορετικά προβλήματα με τρεις διαφορετικές αποδεκτές απαντήσεις. Η ίδια η διεύθυνση ομάδας λέει το εύρος: οι διευθύνσεις στο μπλοκ ελέγχου τοπικού δικτύου δεν προορίζονται να προωθούνται εκτός ζεύξης από συνηθισμένη δρομολόγηση, και οι εφαρμογές που τις χρησιμοποιούν συνήθως υποθέτουν ένα μόνο πεδίο εκπομπής. Μια ροή μετάδοσης σε ομάδα με καθολικό εύρος είναι διαφορετικός σχεδιασμός από ένα πρωτόκολλο ανακάλυψης που περιμένει κάθε συσκευή να ακούει κάθε ερώτημα, και μόνο το δεύτερο νοιάζεται για το μέγεθος του πεδίου εκπομπής.
Αποφασίστε αν η απαίτηση είναι η υπηρεσία ή ο μηχανισμός ανακάλυψης, γιατί αυτές οι απαντήσεις διαφέρουν σε κόστος κατά μια τάξη μεγέθους. Η μία ζητά μια διεύθυνση που δεν αλλάζει· η άλλη ζητά ένα πεδίο εκπομπής εκτεταμένο μέσω ζεύξης ευρείας περιοχής με ό,τι συνεπάγεται αυτό.
Η τοπική ανακάλυψη υποτίθεται ότι σταματά
Το Multicast DNS όπως περιγράφεται στο RFC 6762 είναι σχεδιασμένο γύρω από μία μόνο ζεύξη: τα ερωτήματα πηγαίνουν σε σταθερή ομάδα, οι απαντήσεις στέλνονται στην ίδια ομάδα, και το πρωτόκολλο βασίζεται στο ότι κάθε συμμετέχων ακούει όλους. Οι δρομολογητές δεν προωθούν αυτή την κίνηση από προεπιλογή, και αυτό είναι απόφαση σχεδιασμού και όχι παράλειψη. Το όριο υπάρχει ώστε μια συσκευή σε ένα κτίριο να μην μπορεί να ανακοινωθεί απλώς σε άλλο. Ένα τούνελ που φαίνεται να διορθώνει την ανακάλυψη μεταφέροντας την ομάδα παντού έχει αφαιρέσει αυτό το όριο για κάθε εφαρμογή, όχι μόνο για εκείνη που χρειαζόταν βοήθεια.
Αναμεταδότες και ανακλαστήρες υπάρχουν, και είναι πραγματικές υπηρεσίες με πραγματικές συνέπειες: κάθε όνομα που ανακοινώνεται σε μια τοποθεσία γίνεται ορατό στην άλλη, μαζί με ονόματα συσκευών που προσδιορίζουν πρόσωπα ή εξοπλισμό. Αν η πραγματική απαίτηση είναι μια συγκεκριμένη υπηρεσία να είναι ανιχνεύσιμη, μια εγγραφή υπηρεσίας δημοσιευμένη στο DNS είναι συνήθως η μικρότερη αλλαγή, και αποκαλύπτει ένα όνομα αντί για ένα ρεύμα ονομάτων.
Τρία πράγματα που χρειάζεται το δρομολογημένο multicast
Το δρομολογημένο multicast χρειάζεται τρία πράγματα να δουλεύουν μαζί: δέκτες που εντάσσονται στην ομάδα, δρομολογητές που διατηρούν κατάσταση προώθησης γι’ αυτήν, και ένα τούνελ που αντιμετωπίζει τις διευθύνσεις ομάδας ως κίνηση προς μεταφορά. Ένα τούνελ με πολιτική που απαριθμεί μόνο υποδίκτυα unicast θα ρίξει την κίνηση της ομάδας στο όριο κρυπτογράφησης, γι’ αυτό το πρώτο σύμπτωμα είναι συχνά σιωπή και όχι σφάλμα. Μια διεπαφή βασισμένη σε διαδρομές, όπως τούνελ GRE ή VTI, μεταφέρει ό,τι της στείλει ο πίνακας δρομολόγησης, κάτι που κάνει την ομάδα προσβάσιμη μόλις υπάρξει η κατάσταση multicast.
Η προσβασιμότητα της πηγής είναι το δεύτερο μισό. Πρωτόκολλα δρομολόγησης multicast όπως το PIM χτίζουν δέντρα διανομής ελέγχοντας ότι η διαδρομή πίσω στην πηγή είναι η αναμενόμενη, οπότε μια διαδρομή unicast που δείχνει αλλού σπάει το δέντρο ακόμη και όταν η συνδρομή στην ομάδα είναι σωστή. Η εγκατάσταση διαδρομής για τον δέκτη δεν κάνει τίποτα γι’ αυτόν τον έλεγχο, και αυτό είναι το λάθος που δίνει ping που δουλεύει και ροή που αποτυγχάνει. Επαληθεύστε πρώτα τη διαδρομή επιστροφής της πηγής, μετά προσθέστε τη συνδρομή, και μόνο τότε κοιτάξτε την εφαρμογή.
ip maddr show dev tun0
ip mroute show
ss -gnu | grep 239.255.0.10
ip route get 10.20.5.20
Οι δύο πρώτες γραμμές δείχνουν σε τι εντάχθηκε ο υπολογιστής και τι προωθεί ο πυρήνας, η τρίτη δείχνει τη συνδρομή της ίδιας της εφαρμογής, και η τελευταία τη διαδρομή unicast που θα χρησιμοποιήσει ο έλεγχος αντίστροφης διαδρομής. Η ανάγνωσή τους μαζί ξεχωρίζει μια εφαρμογή που δεν εντάχθηκε ποτέ από ένα δίκτυο που δεν προώθησε ποτέ.
Αποδείξτε το με μία πηγή και έναν δέκτη
Πριν αγγίξετε μια διαμόρφωση, επιβεβαιώστε ότι η εφαρμογή δουλεύει σε ένα μόνο τμήμα. Αν αποτυγχάνει τοπικά, η δρομολόγηση multicast δεν είναι το πρόβλημα και καμία αλλαγή τούνελ δεν θα βοηθήσει. Μετά επαναλάβετε με έναν δέκτη μέσω του τούνελ και παρατηρήστε τα πακέτα και στις δύο πλευρές του ορίου κρυπτογράφησης.
tcpdump -ni tun0 -c 10 'ip multicast'
tcpdump -ni eth0 -c 10 'ip multicast and host 239.255.0.10'
Πακέτα ορατά μέσα στο τούνελ αλλά απόντα έξω από αυτό δείχνουν ενθυλάκωση ή πολιτική· πακέτα ορατά και στις δύο πλευρές χωρίς πρόοδο της εφαρμογής δείχνουν τη συνδρομή του δέκτη ή τη σύνδεση της εφαρμογής. Κρατήστε τις καταγραφές σύντομες και φιλτραρισμένες, γιατί μια ευρεία καταγραφή multicast σε ένα πολυάσχολο τμήμα είναι κυρίως θόρυβος.
Προτιμήστε διεύθυνση υπηρεσίας όταν χρειάζεστε μόνο την υπηρεσία
Η ανακάλυψη υπάρχει για να βρίσκει κάτι που κινείται. Ένας διακομιστής με σταθερό όνομα δεν χρειάζεται ανακάλυψη, και μια τεκμηριωμένη διεύθυνση σε ιδιωτικό DNS απαντά στο πραγματικό ερώτημα του χρήστη χωρίς να επεκτείνει πεδίο εκπομπής μέσω ζεύξης ευρείας περιοχής. Η ίδια λογική ισχύει για εκτυπωτές, συσκευές και εσωτερικές υπηρεσίες ιστού. Ένα όνομα στο DNS είναι προσβάσιμο από κάθε τοποθεσία που το χρειάζεται χωρίς να ανακοινώνει τίποτα στις τοποθεσίες που δεν το χρειάζονται, και συνεχίζει να δουλεύει όταν η συσκευή αντικατασταθεί από άλλη με διαφορετική διεύθυνση.
Όταν ένα πρωτόκολλο απαιτεί πραγματικά multicast, περιορίστε το στην ομάδα και στις τοποθεσίες που το χρειάζονται, τεκμηριώστε το γιατί, και επανεξετάστε την απόφαση όταν αλλάξει η εφαρμογή. Το να επεκτείνετε την ανακάλυψη παντού είναι εύκολο μία φορά, και δύσκολο να αναιρεθεί μετά από ένα χρόνο συσκευών που εξαρτώνται σιωπηλά από αυτό.