jeudi 31 janvier 2008

Freephonie : sauvons-nous avec Asterisk

Free suicide Freephonie : sauvons-nous avec Asterisk

Free a décidé de bloquer les appels à l'étranger depuis leur service de SIP, tout ça parce que leur interface d'édition de compte est moisie, pas secure et qu'ils sont incapables de détecter et bloquer les abus...
Facile quoi. Heureusement nous allons pouvoir passer outre, en rusant.
Pour cela il nous faut Asterisk, autrement dit un PABX en logiciel libre. Bon un PABX on s'en fout de savoir ce que ça veux dire, mais ce qui est important c'est que ça fait de la téléphonie, et donc le café.

Ce que j'ai fait est plutôt simple, ça consiste simplement à avoir asterisk qui s'occupe de faire le pont entre vos clients SIP et vos comptes SIP. Ici on a un compte freephonie sur lequel on va recevoir les appels et aussi émettre les appels vers un numéro en france (numéro à 10 chiffres). On a aussi un compte VoIPBuster (payant évidemment,
mais pas très cher heureusement), qui va permettre d'appeller l'international et aussi la france quand freephonie déconne (en réalité tout le temps).

Alors le truc simple : apt-get install asterisk. Voilà, facile, no problemo. Maintenant il faut modifier le fichier sip.conf :

[general]
defaultexpirey=1800
dtmfmode=auto
qualify=yes

; Vos comptes SIP où s'enregistrer
register => 09XXXX:secret@freephonie.net
register => blabla:secret@sip.voipbuster.com

; Compte VoIPBuster
[voipbuster]
type=peer
host=voipbuster.com
username=blabla
fromuser=blabla
secret=secret
nat=yes
allow=all

; Appels sortants sur Freephonie
[freephonie-out]
type=peer
host=freephonie.net
username=09XXX
fromuser=09XXX
secret=secret
nat=yes
fromdomain=freephonie.net
allow=all

; Et pour les appels entrants freephonie
[freephonie-in]
type=peer
context=fromfree
host=freephonie.net
allow=all

; Client SIP N°1 : mon téléphone SIEMENS C450IP
[phone]
type=friend
username=phone
secret=abcd
host=dynamic
context=maison
nat=yes
; Ces trois lignes suivantes sont spécifiques à mon téléphone pour qu'il fonctionne bien, vous pouvez les enlever pour un client SIP classique
dtmfmode=inband
allow=ulaw,alaw
canreinvite=no

Notez que vous pouvez rajouter autant de sections de type=friend que vous voulez pour avoir autant de clients SIP que vous désirez.

Maintenant configurons extensions.conf qui indique le plan de numérotation :

; Mon contexte c'est "maison", on peux avoir plusieurs contextes selon les clients si ça nous amuse
[maison]

; On compose un numéro à 10 chiffres commençant par zéro puis un chiffre qui n'est pas zéro (exemple 0154545689)
; Alors on essaye de le composer avec Freephonie, mais si ça marche pas on utilisera VoIPBuster
exten => _0ZXXXXXXXX,1,Dial(SIP/freephonie-out/${EXTEN})
exten => _0ZXXXXXXXX,2,Dial(SIP/voipbuster/0033${EXTEN:1})

; Règle spécifique à la belgique qui permet de composer un numéro belge sans le préfixe 0032 :
; si on tape un numéro comportant au moins 5 chiffres (les numéros ici sont plutôt variables en longueur),
; qui commence par zéro puis un chiffre qui n'est pas zéro (Z), alors on rajoute automatiquement le préfixe 0032
exten => _0ZXX.,1,Dial(SIP/voipbuster/0032${EXTEN:1})

; Autres numéros internationaux commençant par 00 (par ex. 0033 pour la france) : on passe par voipbuster directement
exten => _00ZXXX.,1,Dial(SIP/voipbuster/${EXTEN})

; Si le numéro n'est ni un numéro français ni un numéro belge ni un numéro international on raccroche
; (ou si freephonie et voipbuster sont down)
exten => _0Z.,3,Congestion

; Indique que faire avec les appels entrants sur freephonie
[fromfree]

; ici on fait sonner juste le téléphone (on pourrait faire sonner plusieurs clients SIP en mm temps ou à la suite, ou rediriger vers une boite vocale, je vous laisse mater les trucs sur le net à ce sujet)
exten => s,1,Dial(SIP/phone)

Voilà, un petit coup de /etc/init.d/asterisk restart et hop. Si vous avez des problèmes, tentez le débug, stoppez asterisk, puis en root lancez "asterisk -cvvvvvvvv".

Aucun commentaire: