Γιατί μια κλήση SIP καταχωρείται μέσω VPN αλλά δεν στέλνει ήχο
Η καταχώριση και ο ήχος ακολουθούν διαφορετικές διαδρομές. Ακολουθήστε μία κλήση μέσα από το τούνελ για να δείτε ποιες διευθύνσεις μπορεί να χρησιμοποιήσει το PBX και πού σταματά πραγματικά το RTP.
Μια επιτυχημένη καταχώριση δεν σας λέει σχεδόν τίποτα για τον ήχο. Ένα softphone μπορεί να κρατά έγκυρη δέσμευση με το PBX του γραφείου για ώρες και παρόλα αυτά να παραδίδει σιωπή. Το τούνελ μεταφέρει μόνο τα πακέτα που κάποιος στέλνει σκόπιμα μέσα του, και μια κλήση χρησιμοποιεί τρεις ξεχωριστές διαδρομές: τη δέσμευση, τη ρύθμιση του διαλόγου και τη ροή RTP. Μόλις τις διαχωρίσετε, η βλάβη πέφτει σε μία διαδρομή αντί στη λέξη VPN.
Φανταστείτε ένα φορητό υπολογιστή σε οικιακό Wi-Fi να καλεί μια επέκταση γραφείου μέσα από εγκεκριμένο τούνελ. Το PBX επαληθεύει τον χρήστη, δέχεται το REGISTER και η επέκταση εμφανίζεται διαθέσιμη, όμως η κλήση συνδέεται με απόλυτη σιωπή προς μία κατεύθυνση.
Η καταχώριση δεσμεύει μια επαφή, όχι διαδρομή πολυμέσων
Ένα αίτημα REGISTER ζητά από τον καταχωρητή να αποθηκεύσει μια αντιστοίχιση μεταξύ μιας διεύθυνσης-εγγραφής και ενός ή περισσότερων URIs επαφής. Αυτή η αντιστοίχιση απαντά σε ένα στενό ερώτημα: πού πρέπει να σταλεί τώρα ένας νέος διάλογος. Δεν λέει τίποτα για το πού ανήκουν τα πολυμέσα, και μια αποδεκτή καταχώριση δεν αποδεικνύει ότι ένα μεταγενέστερο INVITE μεταφέρει προσβάσιμη διεύθυνση πολυμέσων. Οι καταχωρίσεις λήγουν επίσης με χρονόμετρο, οπότε ένα τηλέφωνο που σταματά να ανανεώνει χάνει εισερχόμενες κλήσεις ενώ το τούνελ του φαίνεται ακόμη υγιές. Παρακολουθείτε τη λήξη της επαφής και όχι την κατάσταση του τούνελ.
Όταν το softphone βρίσκεται πίσω από το τούνελ, η κεφαλίδα επαφής μπορεί να μεταφέρει ιδιωτική διεύθυνση. Ένα PBX που τη προωθεί σε άλλο endpoint δημιουργεί διάλογο με στόχο δίκτυο που ο καλούμενος δεν μπορεί να φτάσει. Η ρύθμιση rewrite_contact=yes στο endpoint PJSIP κάνει το PBX να υποκαταστήσει τη διεύθυνση πηγής που παρατήρησε, και αυτή είναι συχνά η διαφορά ανάμεσα σε κουδούνισμα και λήξη χρόνου.
Τι προσφέρει το INVITE και ποιος μπορεί να το χρησιμοποιήσει
Ένα INVITE με σώμα SDP προτείνει πού θέλει ο καλών να λαμβάνει πολυμέσα: μια διεύθυνση, μια θύρα και μια λίστα codec. Ο καλούμενος απαντά με τη δική του διεύθυνση και θύρα, και μετά κάθε πλευρά στέλνει RTP σε ό,τι πρότεινε η άλλη. Αν ο καλών πρότεινε διεύθυνση 192.168.x.x που υπάρχει μόνο στο οικιακό του δίκτυο, ο καλούμενος δεν έχει πού να στείλει ήχο, όσο καθαρή κι αν ήταν η σηματοδότηση. Το masquerading ξαναγράφει τις κεφαλίδες IP καθώς τα πακέτα φεύγουν από έναν δρομολογητή, αλλά ποτέ δεν ξαναγράφει το κείμενο μέσα σε σώμα SDP.
Αυτό το κενό εξηγεί την κλασική μονόδρομη κλήση: η σηματοδότηση δουλεύει επειδή και τα δύο endpoints φτάνουν στο PBX, και ο ήχος αποτυγχάνει επειδή σε ένα endpoint είπαν να στέλνει σε διεύθυνση που υπάρχει μόνο πίσω από άλλο NAT.
| Path | Who picks the address | Typical failure |
|---|---|---|
| REGISTER | Softphone, rewritten by the registrar if configured | Binding expires or points at a private address |
| INVITE and SDP | Each endpoint in its own offer or answer | Offer names a media address nobody can route to |
| RTP | PBX relay policy or the two endpoints | Port range blocked, or no return path |
Ποιος μεταφέρει τον ήχο είναι επιλογή ρύθμισης
Η σηματοδότηση και τα πολυμέσα είναι ξεχωριστοί ρόλοι. Ένα proxy μπορεί να μείνει στη διαδρομή σηματοδότησης για ολόκληρη την κλήση και να μην αγγίξει ποτέ ούτε ένα πακέτο RTP. Το αν το PBX γίνεται αναμεταδότης πολυμέσων εξαρτάται από τη ρύθμιση, όχι από την ύπαρξη τούνελ.
Με άμεσα πολυμέσα τα endpoints ανταλλάσσουν τα ίδια το RTP, κάτι που δουλεύει καλά σε ένα LAN και άσχημα όταν η μία πλευρά βρίσκεται πίσω από στενό εύρος θυρών.
Η ρύθμιση direct_media=no σπρώχνει το PBX στη διαδρομή πολυμέσων ώστε και τα δύο σκέλη να τερματίζουν σε διεύθυνση που ελέγχει, ανταλλάσσοντας εύρος ζώνης και CPU για προβλέψιμη διευθυνσιοδότηση. Όταν αναμεταδίδει, το PBX πρέπει ακόμη να διαφημίζει προσβάσιμη διεύθυνση. Σε host με πολλαπλές διεπαφές, τα external_media_address και external_signaling_address στο pjsip.conf καθορίζουν τι εμφανίζεται στο SDP και στις κεφαλίδες Via. Αν τα αφήσετε ασύμπλητα, το PBX μπορεί να προσφέρει τη διεύθυνση LAN του σε καλούντα του οποίου η μόνη διαδρομή είναι η μακρινή πλευρά του τούνελ.
Ιχνηλατήστε κάθε κατεύθυνση πριν αγγίξετε ρυθμίσεις
Ξεκινήστε με τον πίνακα υποδοχών στο PBX όσο μια κλήση είναι ενεργή: το ss -uanp | grep -E '5060|10000' δείχνει αν οι θύρες RTP είναι δεσμευμένες και ποια τοπική διεύθυνση χρησιμοποιούν. Αν τίποτα δεν είναι δεσμευμένο στο εύρος πολυμέσων, ο αναμεταδότης δεν συμμετέχει και τα endpoints μιλούν απευθείας. Στη συνέχεια καταγράψτε στην πλευρά του softphone με το tcpdump -ni any -s0 udp portrange 10000-20000 -w rtp.pcap. Εξερχόμενα πακέτα χωρίς εισερχόμενα περιορίζουν το πρόβλημα στη διαδρομή επιστροφής ή στη διεύθυνση που είπαν στο μακρινό άκρο να χρησιμοποιήσει, και μια κενή καταγραφή σημαίνει ότι τα πολυμέσα δεν έφτασαν ποτέ στη διεπαφή του τούνελ. Μια καταγραφή σηματοδότησης με το sngrep απαντά στο άλλο μισό δείχνοντας τη γραμμή σύνδεσης SDP όπως στάλθηκε.
Συγκρίνετε τη διεύθυνση σε αυτή τη γραμμή σύνδεσης με τη διεύθυνση προς την οποία το μακρινό άκρο μπορεί πραγματικά να δρομολογήσει. Αυτή η μία σύγκριση λύνει τις περισσότερες αναφορές μονόδρομου ήχου γρηγορότερα από οποιαδήποτε αναθεώρηση ρυθμίσεων.
Η κρυπτογράφηση σταματά στην άκρη του τούνελ
Το SIP over TLS προστατεύει το άλμα σηματοδότησης για το οποίο ρυθμίστηκε, το SRTP προστατεύει τα πολυμέσα όταν το διαπραγματεύονται και οι δύο πλευρές, και το τούνελ προστατεύει την κίνηση μεταξύ των δικών του endpoints. Κανένα από αυτά δεν παρέχει τα υπόλοιπα. Μια κλήση κρυπτογραφημένη μέσα στο τούνελ μπορεί να βγει από την πύλη σε καθαρό κείμενο προς το PBX, και αυτό είναι απόφαση σχεδιασμού, όχι ελάττωμα.
Πριν κλείσετε το δελτίο, επιβεβαιώστε τρία πράγματα με σειρά: η καταχώριση είναι πρόσφατη, το SDP μεταφέρει διεύθυνση που το μακρινό άκρο μπορεί να φτάσει, και τα πακέτα ρέουν και προς τις δύο κατευθύνσεις στις θύρες πολυμέσων. Αν κάτι από αυτά είναι ψευδές, το τούνελ δεν είναι εκεί που κατοικεί το πρόβλημα. Διορθώστε τη διαδρομή που απέτυχε και μετά επαναλάβετε την ίδια καταγραφή για να επιβεβαιώσετε την αλλαγή. Το να κρατάτε τις καταγραφές πριν και μετά κάνει την επόμενη αναφορά μονόδρομου ήχου έλεγχο πέντε λεπτών αντί για ένα ολόκληρο απόγευμα.