Ασχολούμαι εδώ και αρκετό χρονικό διάστημα με το στήσιμο ενός PBX (PBX = (P)rivate (B)ranch e(X)change (στην ουσία ένα ιδιωτικό τηλεφωνικό δίκτυο) το οποίο υλοποιήθηκε με την ελεύθερη εφαρμογή Asterisk η οποία αναπτύσεται και συντηρείται απο την Digium.
Χωρίς να έχω εμπειρία πάνω σε αυτό το αντικείμενο και διαβάζοντας πάρα πολύ κατάφερα να το υλοποιήσω στην πιό απλή του μορφή αλλά να δουλεύει αξιόπιστα .
Να τονίσω ότι οι παράμετροι που μπορούν να χρησιμοποιηθούν στα configuration files είναι περίπου 1200 αλλά δεν χρειάζονται όλα αυτά σε μία απλή εγκατάσταση.
Η εγκατάσταση έγινε σε ένα παλαιό laptop eeePC 701 (4gb ssd hd 512 mb RAM) στο σπίτι μου που σημαίνει ότι είναι πίσω απο router (NAT - έχει μεγάλη σημασία αυτό-) και δουλεύει καλά.
Στο laptop εγκαταστάθηκε ενα Debian 6 minimal με netinstall (χωρίς γραφικό περιβάλλοv).
Το σενάριο έχει ως εξής (ενδεικτικά) :
Η εγκατάσταση του Asterisk γίνεται απλά και αφού συνδεθούμαι στο PC με SSH δίνοντας την εντολή:1) 4 φίλοι οι οποίοι έχουν εγκατεστημμένο κάποιο SIP client κάποιο smartphone (πχ για android το Csipsimple) ή PC (πχ xlite) καί έχουν ιδωτικά νούμερα (extensions) 6000 7000 8000 9000 αντίστοιχα.
2) Ενας λογαριασμός σε κλώνο της betamax που μας δίνει τσάμπα κλήσεις σε σταθερά στην Ελλάδα (πχ VoipDiscount με 10 euro για 4 μήνες και μετά χρεώνει καποια πολύ μικρα ποσά της τάξεως του 1,5 λεπτού/min.
3) Ενας λογαριασμός σε έναν κλώνο της betamax που μας δίνει χαμηλές τιμές για κινητά στην Ελλάδα (πχ VoipStunt 3 λεπτά/min.
4) Eμείς θέλουμε:
α) ο φίλος που έχει το ιδιωτικό νούμερο 6000 (extension) να μπορεί νά καλέσει τους υπόλοιπους φίλους μεσω του ιδιωτικού κυκλώματος καθώς επίσης σε όλα τα σταθερά και κινητά στην Ελλάδα.
β) ο φίλος που έχει το ιδιωτικό νούμερο 7000 (extension) να μπορεί νά καλέσει τους υπόλοιπους φίλους μεσω του ιδιωτικού κυκλώματος καθώς επίσης σε όλα τα σταθερά αλλά οχι κινητά στην Ελλάδα.
γ) ο φίλος που έχει το ιδιωτικό νούμερο 8000 (extension) να μπορεί νά καλέσει τους υπόλοιπους φίλους μεσω του ιδιωτικού κυκλώματος καθώς επίσης σε όλα τα κινητά αλλά οχι σταθερά στην Ελλάδα.
δ) ο φίλος που έχει το ιδιωτικό νούμερο 9000 (extension) να μπορεί νά καλέσει τους υπόλοιπους φίλους μεσω του ιδιωτικού κυκλώματος αλλά τπτ άλλο
ε) Απαγορεύεται σε όλους να καλέσουν οπουδήποτε αλλού (εξωτερικό).
Αυτό δεν θα κατεβάσει την τελευταία έκδοση αλλά και αυτή θα κάνει την δουλειά της.Code:apt-get install asterisk
Μετά την εγκατάσταση θα δημιουργηθεί ο φάκελος /etc/asterisk ο οποίος περιέχει τα αρχεία ρυθμίσεων (.conf).Θα μπορούσα να δώσω οδηγίες ώστε να γίνει build η τελευταία έκδοση αλλά αυτό ξεφεύγει απο τον σκοπό του θέματος .
Μας ενδιαφέρουν τα αρχεία sip.conf και extensions.conf.
Για το προαναφερόμενο σενάριο οι ρυθμίσεις στο sip.conf είναι:Στα αρχεία ρυθμίσεων το "#" δεν αποτελέι σχόλιο αλλά definition (δήλωση) μακροεντολής (macro) το Ελληνικό ";" (ερωτηματικό) είναι σχόλιο για την συμβολαιοσειρά που ακολουθεί.
sip.conf
extensions.confCode:[general] context = default allowoverlap = no udpbindaddr = 0.0.0.0 srvlookup = yes subscribecontext = default allowexternaldomains = yes allowguest = yes allowsubscribe = yes allowtransfer = yes alwaysauthreject = no autodomain = no callevents = no checkmwi = 10 compactheaders = no defaultexpiry = 120 dumphistory = no externrefresh = 10 g726nonstandard = no jbenable = no jbforce = no jblog = no maxcallbitrate = 384 maxexpiry = 3600 minexpiry = 60 mohinterpret = default notifyringing = yes pedantic = no progressinband = never promiscredir = no realm = asterisk recordhistory = no registerattempts = 0 registertimeout = 20 relaxdtmf = no sendrpid = no sipdebug = no t1min = 100 t38pt_udptl = no ;tos_audio = none ;tos_sip = none ;tos_video = none trustrpid = no useragent = Asterisk PBX usereqphone = no videosupport = no canreinvite = nonat externhost = <put your hostname here e.g example.dyndns.com> localnet = <your localnet e.g 192.168.1.0/255.255.255.0> disallow = all allow = ulaw,alaw,gsm,g729,speex,ilbc,g723 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Peers [VoipDiscount] type=peer host=sip.voipdiscount.com username=<your username on voipdiscount> fromuser=<your username on voipdiscount> secret=<your password on voipdiscount> canreinvite=no qualify=yes [VoipStunt] type=peer host=sip.voipstunt.com username=<your username on voipstunt> fromuser=<your username on voipstunt> secret=<your password on voipstunt> canreinvite=no qualify=yes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Extensions [6000] type=friend username=6000 secret=password host=dynamic mailbox=6000 context=default canreinvite=no callerid="Friend1" <6000> nat=yes qualify=yes [7000] type=friend username=7000 secret=password host=dynamic mailbox=7000 context=default canreinvite=no callerid="Friend2" <7000> nat=yes qualify=yes [8000] type=friend username=8000 secret=password host=dynamic mailbox=8000 context=default canreinvite=no callerid="Friend3" <8000> nat=yes qualify=yes [9000] type=friend username=9000 secret=password host=dynamic mailbox=9000 context=default canreinvite=no callerid="Friend4" <9000> nat=yes qualify=yes
εδώ είναι ίσως το πιό δύσκολο κομμάτι γιατί έχει να κάνει με dial patterns αλλά πιστεύω ότι το έχω απλοποιημένο και κατανοητό .Ακολουθώντας το σενάριο οι Friends 1,2,3,4 κάνουν κλήσεις μεταξύ τους με τα νούμερα που τους αποδώθηκαν (prive) δηλ. 6000 7000 8000 9000 αντίστοιχα και χωρίς καμμία χρέωση αρκεί να είναι συνδεδεμένοι στο internet και απο κεί και πέρα ακολουθείται το σενάριο ως προς τα κινητά και σταθερά σύμφωνα με τους κανόνες που βάλαμε στο extensions.conf.Code:[general] static=yes writeprotect=yes [macro-call] exten => s,1,Dial(${ARG1},80,Tt) exten => s,n,wait(1) ;exten => s,n,Playback(queue-callswaiting|noanswer) exten => s,n,Playtones(busy) exten => s,n,Hangup [from-trunks] ;6000 exten => _2XXXXXXXXX/_6000,1,macro(call,SIP/${EXTEN}@VoipDiscount) exten => _69XXXXXXXX_6000,1,macro(call,SIP/${EXTEN}@VoipStunt) ;7000 exten => _2XXXXXXXXX/_7000,1,macro(call,SIP/${EXTEN}@VoipDiscount) ;8000 exten => _69XXXXXXXX/_8000,1,macro(call,SIP/${EXTEN}@VoipStunt) [prive] exten => 6000,1,macro(call,sip/6000) exten => 7000,1,macro(call,sip/7000) exten => 8000,1,macro(call,sip/8000) exten => 9000,1,macro(call,sip/9000) [default] include => from-trunks include => prive
Υπάρχουν διανομές (CentoS κυρίως που δίνουν ένα αρκετά εύκολο WebGui (Tribox,Elastix,FreePBS,AsteriskNow κλπ)) αλλά αυτή η απλή υλοποίηση πιστεύωω ότι θα βοηθήσει στην κατανόηση της φιλοσοφίας του Asterisk με αυτόν τον πολύ απλό πιστεύω τρόπο.




Reply With Quote