~bohwaz/blog/

Avec de vrais morceaux de 2.0 !

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".

Écrire un commentaire
(facultatif)
(facultatif)
(obligatoire)
                                                  
  __ _  ___  _   ___   _____ _ __ _ __   ___ _ __ 
 / _` |/ _ \| | | \ \ / / _ \ '__| '_ \ / _ \ '__|
| (_| | (_) | |_| |\ V /  __/ |  | | | |  __/ |   
 \__, |\___/ \__,_| \_/ \___|_|  |_| |_|\___|_|   
 |___/                                            
(obligatoire)

Les adresses internet seront converties automatiquement.
Tags autorisés : <blockquote> <cite> <pre> <code> <var> <strong> <em> <del> <ins> <kbd> <samp> <abbr>

Arrangeurs

Bjr :) merci pour ce bilet fort interessant :) il y a cdpendant quelques points obscurs : "les numeros ici sont plutot variables en longueur" ...qu'entends tu par la ? bonne contuinuation :)

BohwaZ

Ici en belgique un numéro peut faire 8 ou 10 chiffres, je connaît pas les règles précises mais le nombre de chiffres semble assez variable.

armel

Bonjour,

Desole, je ne comprends pas tout de cette configuration. Je suis au Canada et je voudrais faire des appels internationaux a partir de la freebox de mes parents en France. Je ne veux pas passer par voipbuster. Voici mes questions:

1. Le server Asterisk est branche avec un cable ethernet sur un router qui est lie avec la freebox?

2. dans sip.conf:
; Client SIP N°1 : mon téléphone SIEMENS C450IP
[phone]
type=friend
username=phone
secret=abcd

Pourquoi il faut un username and secret, et a quoi ca correspond? Est-ce que c'est pour un telephone a l'etranger ou bien branche sur la freebox?

3. Je veux que les appels entrants continuent a sonner chez mes parents sans passer par le SIP
Comment je configure cela?

4. Mon but c'est de ne pas payer pour les appels internationaux donc avec Freebox:
; 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})

comment je configure cela? vous passez par voipbuster.