Cisco CME και dial-peers Το φυσιολογικό σενάριο σε μια εταιρία, είναι η τηλεφωνία VoIP να «τρέχει» παράλληλα με την κίνηση του δικτύου δεδομένων. Επίσης, οι χρήστες της εταιρίας προφανώς δεν θα χρειαστεί να καλούν μόνο εσωτερικά τηλέφωνα εντός του δικτύου της εταιρίας, αλλά και εσωτερικά τηλέφωνα τα οποία μπορεί να βρίσκονται σε κάποιο άλλο κτήριο της εταιρίας, ίσως και σε κάποια άλλη χώρα. Διασύνδεση του CME με εσωτερικά τηλέφωνα που βρίσκονται σε άλλα subnets Στο σενάριο που θα φτιάξουμε σήμερα, έχουμε μια εταιρία που έχει τα κεντρικά και ένα απομακρυσμένο κτήριο, το οποίο μπορεί να είναι σε άλλο μέρος αλλά ακόμα και σε άλλη χώρα. Το κάθε κτήριο έχει την δική του αριθμοδότηση, στο σεναριό μας το HQ έχει τα τηλέφωνα 1001 και 1002 και το Branch έχει τα 2001 και 2002. Απαραίτητη προϋπόθεση για να παίξει το VoIP, είναι να υπάρχει σωστό routing μεταξύ των δύο CME, ώστε να μπορούν να δρομολογηθούν τα πακέτα της τηλεφωνίας.
Στο παραπάνω παράδειγμα, υπάρχουν δύο κτήρια, το HQ και το BRANCH. Στο HQ υπάρχουν τα VLAN 30 και 40 τα οποία έχουν τα αντίστοιχα Subnet. Το VLAN 30 χρησιμοποιείται για το δίκτυο δεδομένων, ενώ το VLAN 40 για το δίκτυο της φωνής. Αντίστοιχα, στο BRANCH, υπάρχουν τα VLAN 20 και 50, εκ των οποίων το VLAN 30 χρησιμοποιείται για το δίκτυο δεδομένων και το VLAN 50 για την κίνηση του VoIP. Η διασύνδεση των δύο κτηρίων γίνεται από το δίκτυο 192.168.10.0/30 όπου ο R1 (που ανήκει στο HQ) έχει την 1 η ΙΡ και ο R2 (που ανήκει στο BRANCH) έχει την 2 η. Το routing μεταξύ των δύο σημείων γίνεται μέσω EIGRP. Σε αυτό το σενάριο, δεν θα ασχοληθούμε με το πώς φτιάχνουμε το routing. Και στα δύο σημεία έχει υλοποιηθεί η τεχνική του Router-On-A-Stick, όπου η διασύνδεση μεταξύ του SW και του Router είναι ένα trunk που μεταφέρει όλα τα VLAN. Το encapsulation που έχει χρησιμοποιηθεί είναι το 802.1Q. Το κάθε κτήριο θα πρέπει να έχει τον δικό του CME ο οποίος να ελέγχει τα τηλέφωνα του δικτύου του. Πάμε λοιπόν να φτιάξουμε τον CME στο R1 που βρίσκεται στο HQ. R1 R1(config)# telephony-service R1(config-telephony)#max-ephones 5 R1(config-telephony)#max-dn 10 R1(config-telephony)#ip source-address 192.168.40.253 port 2000 R1(config)#ephone-dn 1 dual-line R1(config-ephone-dn)#LINK-3-UPDOWN: Interface ephone_dsp DN 1.1, changed state to up R1(config-ephone-dn)#number 1001 R1(config-ephone-dn)#exit R1(config)#ephone-dn 2 dual-line R1(config-ephone-dn)#LINK-3-UPDOWN: Interface ephone_dsp DN 2.1, changed state to up R1(config-ephone-dn)#number 1002 R1(config-ephone-dn)#exit R1(config)#ephone 1 R1(config-ephone)#mac-address 000B.BE04.49AE R1(config-ephone)#button1:1 R1(config-ephone)#exit R1(config)#ephone 2 R1(config-ephone)#mac-address 00d0.ff63.7049 R1(config-ephone)#button 1:2 R1(config-ephone)#exit
Με τις παραπάνω εντολές, φτιάξαμε τον CME του HQ, ορίσαμε την ΙΡ του (192.168.40.253), δημιουργήσαμε τα dn και τα ephones και κάναμε την αντιστοίχιση ephone και dn. Μένει να κάνουμε την αντίστοιχη διαδικασία και στο R2 του BRANCH. R2 R2(config)# telephony-service R2(config-telephony)#max-ephones 5 R2(config-telephony)#max-dn 10 R2(config-telephony)#ip source-address 192.168.50.253 port 2000 R2(config)#ephone-dn 1 dual-line R2(config-ephone-dn)#LINK-3-UPDOWN: Interface ephone_dsp DN 1.1, changed state to up R2(config-ephone-dn)#number 2001 R2(config-ephone-dn)#exit R2(config)#ephone-dn 2 dual-line R2(config-ephone-dn)#LINK-3-UPDOWN: Interface ephone_dsp DN 2.1, changed state to up R2(config-ephone-dn)#number 2002 R2(config-ephone-dn)#exit R2(config)#ephone 1 R2(config-ephone)#mac-address 00cd.ca93.db38 R2(config-ephone)#button1:1 R2(config-ephone)#exit R2(config)#ephone 2 R2(config-ephone)#mac-address 00e2.3b8c.11df R2(config-ephone)#button 1:2 R2(config-ephone)#exit Αφού στήσαμε και το τηλεφωνικό δίκτυο του BRANCH, παρατηρούμε ότι αν καλέσουμε από ένα τηλέφωνο που βρίσκεται στο ένα SITE, σε ένα τηλέφωνο που βρίσκεται σε ένα άλλο SITE, το VoIP τηλέφωνο μας εμφανίζει την ένδειξη Unknown Number και η κλήση δεν βγαίνει. Αυτό συμβαίνει διότι ο CME γνωρίζει μόνο τα νούμερα που έχει ορισμένα στα dn τα οποία χειρίζεται. Όπως λοιπόν και στα δίκτυα δεδομένων, έτσι και στις τηλεφωνικές κλήσεις, πρέπει να δημιουργούμε δρομολόγηση για τις κλήσεις οι οποίες πηγαίνουν σε κάποιο άλλο τηλεφωνικό δίκτυο. Σε αντίθεση με τα δίκτυα δεδομένων, στις τηλεφωνικές κλήσεις δεν υπάρχει δυναμική δρομολόγηση κλήσεων, αλλά χειροκίνητες, στατικές ρυθμίσεις δρομολόγησης. Ο κύριος τρόπος για να δρομολογηθεί μια κλήση, είναι ο ίδιος ο τηλεφωνικός αριθμός που καλείται. Έτσι, μπορούμε να ορίσουμε διαφορετικές δρομολογήσεις για διαφορετικούς αριθμούς ή patterns αριθμών. Για να
ορίσουμε στον CME το pattern του τηλεφωνικού αριθμού, πρέπει να χρησιμοποιήσουμε μια συγκεκριμένη (και ορισμένες φορές λίγο δύστροπη) γλώσσα που έχει ο CME. Για να ορίσουμε την δρομολόγηση των κλήσεων, αρκεί να φτιάξουμε τα dial-peers. Η λειτουργία του dial-peer είναι σχεδόν ίδια με αυτή του route-map, δηλαδή «ματσάρει» μια συνθήκη και επιβάλει κάποια ενέργεια. Στην περίπτωση της τηλεφωνίας, το dial-peer «ματσάρει» τον τηλεφωνικό αριθμό που καλείται με το pattern που του έχουμε ορίσει. Η ενέργεια η οποία εκτελεί, είναι να το δρομολογήσει σε κάποιον άλλο VoIP Server, σε μια διεύθυνση που θα του ορίσουμε εμείς. Για να γίνει αντιληπτή η λειτουργία του dial-peer, θα κάνουμε την εν λόγω ρύθμιση στον R1, ώστε να του πούμε ότι για τους αριθμούς 200x που δεν ξέρει, να στέλνει την κλήση στον R2. R1 R1(config)# dial-peer voice 1 voip R1(config-dial-peer)#destination-pattern 2... R1(config-dial-peer)#session target ipv4:192.168.10.2 R1(config-dial-peer)#exit Να εξηγήσουμε λίγο τις παραπάνω εντολές: Με την εντολή dial-peer voice 1 voip, εννοούμε ότι θέλουμε να φτιάξουμε ένα dial-peer που αφορά φωνή, με αύξων αριθμό 1, το οποίο αφορά κίνηση VoIP και όχι κίνηση που γίνεται με σταθερή αναλογική τηλεφωνία (POTS ή ISDN). Έπειτα, λέμε ότι αν το pattern του αριθμού που καλείται είναι 4ψηφία, εκ των οποίων το 1 ο είναι ο αριθμός 2 και τα υπόλοιπα 3 ψηφία είναι αδιάφορα, τότε κάνε match το dial-peer. Τέλος, η εντολή session target ipv4:192.168.10.2 σημαίνει πως όποια κλήση κάνει match στο dial-peer, θα την στείλει στην ipv4 διεύθυνση 192.168.10.2, η οποία στην περίπτωσή μας, είναι και η διεύθυνση του R2. Είναι πολύ σημαντικό να καταλάβουμε τον τρόπο που γράφονται οι εντολές για το destination pattern, ώστε να μπορούμε να δρομολογούμε τις κλήσεις μας. Οι πιο συνηθισμένοι τελεστές είναι η τελεία (.), το Τ και τα άγκιστρα. Οι τελείες, υποδηλώνουν ότι στη θέση της τελείας μπορεί να μπεί οποιοδήποτε νούμερο. Για παράδειγμα, στο dial-pattern 1... κάνουν match οι αριθμοί από 1000 έως 1999. Στο dial-pattern κάνουν match οι αριθμοί από 000 έως 999. Μπορεί όμως να υπάρχουν και πιο σύνθετα παραδείγματα, όπως πχ 21012..567 όπου στο συγκεκριμένο dial-pattern κάνουν match μόνο όσα τηλεφωνικά νούμερα έχουν όλα τα ψηφία ίδια με το pattern, πλην των 2 ψηφίων που υπάρχουν οι τελείες.
Το Τ υποδηλώνει οποιοδήποτε pattern. Όταν εισάγουμε τον τελεστή Τ, δεν περιορίζουμε τον χρήστη στο να καλέσει συγκεκριμένο μέγεθος αριθμού. Ο τελεστής Τ δέχεται όλα τα ψηφία που θα δώσει ο χρήστης μέχρι να πατηθεί η δίεση (#). Για παράδειγμα, στο dial-pattern 210T θα κάνουν match όσα τηλεφωνικά νούμερα αρχίζουν από 210 αλλά χωρίς περιορισμό στα ψηφία. Το Τ ενεργοποιείται μόλις πατηθεί #. Πχ στο παραπάνω παράδειγμα, θα κάνει match ο αριθμός 210111111 αλλά και ο αριθμός 2101. Το Τ είναι ο μοναδικός τελεστής ο οποίος δεν ορίζει το πόσο μεγάλος θα είναι ο τηλεφωνικός αριθμός που θα κάνει match. Τα άγκιστρα, υποδηλώνουν το range των αριθμών που επιτρέπεται να βρίσκονται στο συγκεκριμένο σημείο. Για παράδειγμα, το [0-4] επιτρέπει τα ψηφία 0 έως 4. Στο dial-pattern 210[1-3]555, θα κάνουν match οι τηλεφωνικοί αριθμοί 2101555, 2102555 και 2103555. Όπως είναι αντιληπτό, τα patterns είναι λίγο στριφνά σαν λογική, όμως δίνουν άπειρες δυνατότητες στη δρομολόγηση αριθμών. Εννοείται ότι μπορούμε να κάνουμε μίξη των διαφόρων τελεστών, δημιουργώντας ένα dial-pattern που μας εξυπηρετεί. Για παράδειγμα, το dial-pattern 2 [4-6] θα κάνει match αριθμούς με 5 ψηφία, οι οποίοι ξεκινάνε από 2 και το τελευταίο τους ψηφίο είναι από 4 έως 6. Αφού λοιπόν ξεκαθαρίσαμε και τους βασικούς τελεστές για τα dialpatterns, είναι ώρα να κάνουμε την αντίστοιχη δρομολόγηση και στον R2 ώστε να ξέρει που να δρομολογεί τις κλήσεις προς τα τηλέφωνα του R1. R2 R2(config)# dial-peer voice 1 voip R2(config-dial-peer)#destination-pattern 1... R2(config-dial-peer)#session target ipv4:192.168.10.1 R2(config-dial-peer)#exit Αντίστοιχα με τον R1 λοιπόν, δηλώνουμε στον R2 πως κάθε κλήση ξεκινάει με αριθμό 1 και ο αριθμός που καλείται είναι 4ψήφιος, θα δρομολογείται στην ipv4 διεύθυνση 192.168.10.1. Όπως πολύ καλά μπορεί κάποιος να μάντεψε, μπορεί η δρομολόγηση να γίνεται σε ipv6 διευθύνσεις, ή μέσω χρήσης dns. Ένα σημαντικό κομμάτι του dial-peer το οποίο πολλές φορές μπορεί να μας μπερδέψει είναι το πώς κάποιος CME μπορεί να δέχεται εισερχόμενη κλήση από κάποιο άλλο τηλεφωνικό δίκτυο, ενώ δεν έχει ρυθμισμένο dial-peer. Εδώ θα πρέπει να δοθεί ιδιαίτερη προσοχή, καθώς υπάρχουν δύο διαφορετικές αντιμετωπίσεις του θέματος ανάλογα με το αν χρησιμοποιούμε καθαρό VoIP ή POTS τηλεφωνία. Στο παράδειγμά μας, η υλοποίηση είναι με χρήση καθαρού VoIP (δεν παρεμβάλλεται κάποιος TSP ανάμεσα στα δύο σημεία), οπότε ο R2 μπορεί να τερματίσει τις εισερχόμενες κλήσεις από τον R1, ακόμα και αν δεν έχει ρυθμισμένο κάποιο dial-peer. Στην περίπτωση όμως που ο CME μας συνδέεται με κάποιο POTS ή ISDN δίκτυο, θα πρέπει οπωσδήποτε να υπάρχει dial-peer το
οποίο να χειρίζεται τις εισερχόμενες κλήσεις. Προς το παρόν αυτό το σενάριο δεν θα το αναλύσουμε, θα επεξηγηθεί όμως πλήρως σε επόμενο άρθρο. Έχοντας λοιπόν εκτελέσει τα dial-peers, είμαστε σε θέση να καλούμε όλα τα εσωτερικά, χρησιμοποιώντας την υπάρχουσα δικτυακή υποδομή. Για οποιαδήποτε απορία ή διευκρίνιση, είμαι διαθέσιμος!