Ασχολούμαι εδώ και αρκετό χρονικό διάστημα με το στήσιμο ενός 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).
Το σενάριο έχει ως εξής (ενδεικτικά) :
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) να μπορεί νά καλέσει τους υπόλοιπους φίλους μεσω του ιδιωτικού κυκλώματος αλλά τπτ άλλο
ε) Απαγορεύεται σε όλους να καλέσουν οπουδήποτε αλλού (εξωτερικό).
Η εγκατάσταση του Asterisk γίνεται απλά και αφού συνδεθούμαι στο PC με SSH δίνοντας την εντολή:
Code:
apt-get install asterisk
Αυτό δεν θα κατεβάσει την τελευταία έκδοση αλλά και αυτή θα κάνει την δουλειά της.
Θα μπορούσα να δώσω οδηγίες ώστε να γίνει build η τελευταία έκδοση αλλά αυτό ξεφεύγει απο τον σκοπό του θέματος .
Μετά την εγκατάσταση θα δημιουργηθεί ο φάκελος /etc/asterisk ο οποίος περιέχει τα αρχεία ρυθμίσεων (.conf).
Μας ενδιαφέρουν τα αρχεία sip.conf και extensions.conf.
Στα αρχεία ρυθμίσεων το "#" δεν αποτελέι σχόλιο αλλά definition (δήλωση) μακροεντολής (macro) το Ελληνικό ";" (ερωτηματικό) είναι σχόλιο για την συμβολαιοσειρά που ακολουθεί.
Για το προαναφερόμενο σενάριο οι ρυθμίσεις στο sip.conf είναι:
sip.conf
Code:
[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
extensions.conf
εδώ είναι ίσως το πιό δύσκολο κομμάτι γιατί έχει να κάνει με dial patterns αλλά πιστεύω ότι το έχω απλοποιημένο και κατανοητό .
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
Ακολουθώντας το σενάριο οι Friends 1,2,3,4 κάνουν κλήσεις μεταξύ τους με τα νούμερα που τους αποδώθηκαν (prive) δηλ. 6000 7000 8000 9000 αντίστοιχα και χωρίς καμμία χρέωση αρκεί να είναι συνδεδεμένοι στο internet και απο κεί και πέρα ακολουθείται το σενάριο ως προς τα κινητά και σταθερά σύμφωνα με τους κανόνες που βάλαμε στο extensions.conf.
Υπάρχουν διανομές (CentoS κυρίως που δίνουν ένα αρκετά εύκολο WebGui (Tribox,Elastix,FreePBS,AsteriskNow κλπ)) αλλά αυτή η απλή υλοποίηση πιστεύωω ότι θα βοηθήσει στην κατανόηση της φιλοσοφίας του Asterisk με αυτόν τον πολύ απλό πιστεύω τρόπο.