Configurer le PBX Asterisk pour la Freephonie

Introduction

Asterisk est un PBX OpenSource capable, entre autres, d’interconnecter des liens VoIP H323, IAX ou encore SIP. Nous allons voir dans ce petit document comment connecter un serveur Asterisk avec le service Freephonie en deux coups de cuiller à pot.

Configuration du firewall

Le NAT

Un problème fréquent lors du déploiement d’une infrastructure utilisant le protocole de diffusion media RTP, le protocole en charge des flux voix après la signalisation prise en charge par SIP, est de pouvoir correctement lui faire traverser votre passerelle. Un symptôme classique: vous pouvez composer, le téléphone IP sonne “de l’autre côté”, mais personne n’entend rien. Il est très probable que la fonctionnalité NAT de votre passerelle ne soit pas adaptée. Voici les règles nécessaires, pour un système BSD UNIX utilisant pf(4) et un système GNU/Linux utilisant iptables(8) :

Activation du NAT “RTP-compatible” dans le pf.conf

ext_if="fxp1"
lan_net="192.168.1.0/24" # LAN privé

nat on $ext_if from $lan_net to any -> $ext_if static-port # ici, la feature magique est "static-port"

Activation du NAT “RTP-compatible” pour iptables (on considère que eth1 est l’interface publique)

# traffic SIP
/sbin/iptables -t nat -A PREROUTING -m udp -p udp --dport 5060 -i eth1 -j DNAT --to-destination ip.lan
/sbin/iptables -A FORWARD -i eth1 -o ip.publique -m udp -p udp --dport 5060 -d ip.lan -j ACCEPT
# traffic RTP
/sbin/iptables -t nat -A PREROUTING -m udp -p udp --dport 10000:20000 -i eth1 -j DNAT --to-destination ip.lan
/sbin/iptables -A FORWARD -i eth1 -o ip.publique -m udp -p udp --dport 10000:20000 -d ip.lan -j ACCEPT

Le firewalling

Afin de s’assurer que votre système de firewalling ne va pas simplement bloquer le traffic SIP et RTP, vous allons ajouter quelques règles d’acceptation :

Ouverture des ports relatifs à la VoIP Free dans un pf.conf

# SIP (TCP)
voip_tcp = "5060"
# SIP, RTP
voip_udp = "{5060, 9999 >< 20001}"

pass in on $ext_if inet proto tcp from any to any port $voip_tcp flags S/SA keep state
pass in on $ext_if inet proto udp from any to any port $voip_udp keep state

pass out quick all keep state

Ouverture des ports relatifs à la VoIP Free avec iptables

/sbin/iptables -A INPUT -p udp --dport 5060 -j ACCEPT
/sbin/iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT

Installation

Asterisk est présent dans la plupart des systèmes de packaging des Unix et distributions Linux, voici quelques exemples d’installation sur quelques systèmes Unix libres connus :

  • sous FreeBSD :
    # cd /usr/ports/net/asterisk && make install clean  
  • sous OpenBSD :
    # cd /usr/ports/telephony/asterisk && make install clean  
  • sous NetBSD :
    # cd /usr/pkgsrc/comms/asterisk && make install clean  
  • sous Ubuntu / Debian GNU/Linux :
    # apt-get install asterisk asterisk-config  
  • sous Fedora / CentOS / RedHat (en utilisant http://dag.wieers.com)
    # yum install asterisk
  • sous Mandriva (avec le media contrib) :
    # urpmi asterisk

Configuration

Attention, l’emplacement des fichiers de configuration diffère selon le système de packaging utilisé, par exemple sous FreeBSD, ils se trouvent dans /usr/local/etc/asterisk, sous NetBSD, dans /usr/pkg/etc/asterisk, et pour les systèmes Linux, généralement dans /etc/asterisk.

Rendez-vous dans le repertoire ou se trouvent les fichiers de configuration d’Asterisk et sauvegardez les fichiers sip.conf et extensions.conf :

  # mv sip.conf sip.conf.bkp
  # mv extensions.conf extensions.conf.bkp

sip.conf

Nous allons maintenant créer le fichier sip.conf qui servira à enregistrer notre PBX sur freephonie.net :

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

register => 0870.....:**********@freephonie.net
disallow=all
allow=ulaw
allow=alaw
allow=speex

[freephonie-out] ; on déclare le point d'accès SIP pour les appels sortants
type=peer
host=freephonie.net
username=0870......
fromuser=0870......
secret=***********
nat=yes

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

[moi] ; on déclare le client SIP (par exemple pour connecter un softphone sur le PBX)
type=friend
username=moi
secret=_____________
host=dynamic
context=maison
nat=yes ; je peux me connecter sur mon PBX depuis d'autres réseaux "nattés"

[toi] ; un autre client SIP
type=friend
username=toi
secret=~~~~~~~~~~~
host=dynamic
context=maison

Remplacez par votre mot de passe freephonie, 0870...... par votre numéro de téléphone, _ et ~~~~~~~ par des mots de passe choisis par vous même.

extensions.conf

Nous allons maintenant configurer le coeur du système: le dialplan. C’est dans ce fichier qu’on va définir quelle “ligne” nous allons utiliser lorsqu’on numéro est composé.

[maison] ; on déclare le contexte local qu'on a spécifié dans le sip.conf
; numéros "locaux"
exten => 10,1,Dial(SIP/moi) ; quand on compose le 10, le softphone branché sur le lien "moi" sonnera
exten => 11,1,Dial(SIP/toi) ; quand on compose le 11, le softphone branché sur le lien "toi" sonnera

; numéros externes
; quand on compose un numero qui commence par 9,on utilise le lien "freephonie" 
;et on passe le numero au peer en ôtant le premier digit.

exten => _9.,1,Dial(SIP/freephonie-out/${EXTEN:1}) 
[fromfree] ; on déclare le contexte de reception d'appels depuis freephonie
exten => s,1,Dial(SIP/moi&SIP/toi) 

; et on fait sonner les deux softphones, si on avait voulu faire sonner un seul client sip,
; on aurait écrit exten => s,1,Dial(SIP/moi)

Démarrage

Nous y sommes presque ! reste maintenant à démarrer Asterisk. Pour vos premiers tests, lancez-le en mode debug + console de la façon suivante :

# asterisk -cvvv

Une fois dans la console, activez le debugging :

CLI> set debug 25
CLI> set verbose 25
CLI> sip debug

Enregistrez un client SIP, par exemple Xten avec les informations du client [moi], en spécifiant comme SIP proxy et realm le nom d’hote de votre serveur asterisk. Vous devriez voir les messages de debug suivants :

  Registered SIP 'moi' at 192.168.0.8 port 45036 expires 1800

Ce qui signifie que votre client SIP est bien enregistré sur votre serveur Asterisk. Verifiez maintenant que votre PBX est bien enregistré sur freephonie.net en tapant :

  CLI> sip show peers 

Si tout se passe bien vous devriez voir une ligne du type :

  freephonie/0870......      212.27.52.5      D   N      5060     OK (57 ms)

C’est prêt !

Informations complémentaires

Ce petit tuto ne présente qu’une infime partie de ce dont est capable le PBX Asterisk, je vous invite à consulter les liens suivants afin d’imaginer le nombre de trucs hallucinants que vous êtes désormais en mesure de faire avec votre simple ligne téléphonique :

 
tutoriel/asterisk.txt · Dernière modification: 2009/02/22 10:08 par freemao
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki


© Freephonie.org 2006
Déclaration CNIL n°1107070
Powered by PhpBB - Traduction par : phpBB-fr.com
Portail : GF-Portail
x}iSɶg1!|m, 1pwtt(RU))MUe-mcsɬU%!G̓'O=~v]~x>yrvvHhu2^(#<ǧAmoe_yN+"ΦQ7ŗXʋ5/o}QgۯG&j#]fMyhcs{{s٭/t:iMb>x\#u,$;`NgYov6yHٯ:b_oP=W@Ţ0 ^j_zHF`7;P,wő qUv8D a &N-QkWbߑa'} F.=b)n|D a|FWzs6XͦR.ivz^wn3_1P#̓V%&i BW–Y^( 8r7_TEX?^ ~@|3SѸ]ga`~PhCuHwꃽ1I ò-΃TVFϰ[?U-L `vު v\7kPOEʵ2_{)j+ܑPP UlP @]j{zPbHfںp lQq^ g샲H4k5%Vz,uءƲީ{Vp^z1;#@u%3 6JjPgP>6#`GgQ/\tА8tj[sN |h\!x&(:%qh0^npsciev=&"|>j1dP"i6k(Ss" #(f@oa~,C潐.6&ؗ0(P! ^cxЁ~B;zMXPZqJpHhʳ|{T a=hDB0,¦@P&B{ <@|Pj*akn4-r2eYx/}<vkU7o< *=9 b-xdăwNw-`9xyG-^\@( J+_^h kx`-OynU c1baZin7G} Z)h:/_B{"ر:?lW3TE.rC:&PT^(H}Bd!;Ҏ5#EW'ѢA+T} #Ssf2`y }Fܺ~8/_TMⳍ[ɋWc>^3>nf m؄w.s>m跾Q3>vɘҹD`sE$" `*moZ[=D$K9Wx?CᠱH BpYfݾ XѺ@l~S(`CTegMwGI(8͑$DFhڈϾQ}TE  &g.P+vOWi Kio`ݬ&&֜Pg*5% T胨;NlccMK5EVCm*s1"o$(tHt-"5Ļ)kw7] 2owv'3A|^g=$:F'N,Ң`Ȩg,ZoȡNp !}r$Jȹ Ŗ =}ހj(G\id@4d 16zŌNH/rp-h[g``ņ.^ǘ~c5@@lbF 39΍҆FEJ料s9}[j"öީkO9 M8> }aAaQ?Z:B6*$!RzD_h3y0;dy&(ta iVxce۪\SAcWDg$"q|$D0,쯹24Asl\QQP=f40xw;%[b[Js[bD. bGF;SØ_zk@Ea,gcQT#H庖:ޑ^DZ-b#2aIK1-8Eso2Q94hnT16_R>jHxe/A =xe/uP@s%ɆĨᔇ(~b^i􉗳4K<)#t?"Q( kwU`^dXB\c5;$gvK1qX+)lxci\%hI0҂*63'%GHa?)ipK6DdȋB!Gk|c^/҉/^ ("b.U9S[3ל&|;穗" :caqY+WmrU}Àh WT'\\$0@t,@d`hdY1N &> WPP8@g]uz"/c\)SDPƂ~QPQwvr D!V<ӌc!#'1`OjA(, H;osUJB|u%vR:sʼ0wVS(=N+>a?ao39ѹ4`/ϐ^cVŒƌLā"k+ХCwIPꬖН7FLM‰ka$"T4ƴ,04z~y$Ds>pC *@>xOmO?йа+Vҝ&+SzЋq6|epinOlqsmtOblT)t~I9Y|z36g8H~ALuVڻ4Aî)ﱊ0wlxue-%A$抝g@V Ue ]OLӌ cz1"G9g_2__L )3RooLs|37Vuۂ&j4o\Z R9ן*uH\&$(I8VĒLQ'Ctp~_VzUa= !6±Êl{.K6ee4[1J4^1-q|F{1yfa 7]q!|M5u3q:@y022adblF 1i4J8`0Պf 0Q6R"#k]PTp.Y8>Ul q~iKM8I30 rbS ȠmWf/ka逢LBڳQ`ȹX33EFo$#Ug3N5;$Y~qmLe|WH9vgF׈;.5}:iH.HC᎜<\ Lj6t^G4%(95C}SO4~RX xAϏ/NǣY(_ϯ]fhpt[ܺvOi Llirn@TzVРkvAms >:hnllmnt#B/_@¥@hB_vIíus=K c ո$wޯRXg Z}o^?M$uu.\ rF'&{׆Z$%hgqMh':\5[us$^x%M9jC9{Cyf^łKb x-$! ucjA8_fB9pz9(*@"]/s1 D aRO5[g{!? RѷM|%Cޘ8&J,2D uVђ%g~34o# #soq/0]0e3}B>X킻lMRJ0ÛD@M[*YzEG"SZ3s?D|ܣ%WngE841ط1ъ* #qL?dɰoq,4?+c/b}~ي4haKfb+}4w`T Q5U Ġ\CYD„AU\Ej2u{I3.tw0 R]I奇&)̏R$u@yW3G0J gr'5G7ÄCn9t0/Ӫ脝SQ7cPᾎ?#Aeǖ |{3tBC2ט^Ub,) ll^E͟O%4S˃ PGwVuR3A^AR*3@Pa=CQt“  S>hЪEG^Q;Gol '\j懴?pmN}%lⱑqL{N. p|#ȹ;n?K$uD}wnify pxqѰ@4 bzagb!E';0 07CT9=l|<$6Nlruى%QqO60LE1,B"Ht@>BȬ i%3e "玍 !4!*T3Eq.ų8^8ԩK^,0q 9_0g93.%i[>Iw0j Zۣކԛ# |O?鰓\A]/_~"ɦ0j"3$YnBdҞqU܂fs\/;poȼZݭVi63?8E֜}@ q+_5@+岿(d{|"Djd34nX N rn0W DM ~mD4RN p#q{Px|<Gk5#j.ONdMŶϚӤy`갦4?#X&(Hzo9`o?|p~APX6i]:4}Bo+r-MRv(w=:KIT`W**v:'mJ7g5)MUYABЁ^LNjy%1==Ȧs{(DG k ' T3:٫3Y>7Jhg,']*|l~*(*dv .)9:6I硞38)JcPh_+H{"K, wFuW 'S[82zrzZ"w_-w/Bu{RwF~6ؾ*qtbsVHDpuF _}Ã9!5|\|th"5wȯEZQѼ> 9=>g̲Y;6qP_`̯&<ҘA|Ua!RǭT$~n5ḫ&a`1 5h}^6;# 2S~8H&M=VA>^Ź߁#-.g l>_@H+O˗P$mId=i^&qhW )|W.@/6?+ӂ)юq1ܕ֔~@BbgrCe0rO?5_}kP lcA[5td,s&aI<-"+F^r h9.ӵFmOAhpi83tIU Rt:d\@YN8C2E,PshX;<*( غ3YV;he\鞊.uӻArCϥL}^ZņYW[ҹ2DO/C'#CG[B_o5saXo۝N͎1DÅյ/xvVZ6SŸҟ+Q{k*vu-y^7گY&8]>o HM<-Ӳ0Bg&\}_l2e/ R^Ԧ*KBڴ#:<,V Ì&I_!>-C{&o%"JkJVr -Z-_8y-}%r+SvFh*01oR1gvElgC5ǜoʡbROH`niя2g|]H&8c.HU:[62hJ{ :XɷYαD)5.T<V4#4Q0*bB]+39V҃ZJ sS&ȋzalQa)(`KG I;;t6ߥo Xϰ('6.b U?4.^-όicz;7-OjOuCL^h'xW-;C:Sa2x8 ޿7zL@QR(P|*pڅ>P>߱RQ>_ RV6޳1צMIdHf=wmcbҔwz|_kwz^W(hAJ\-ۄv]}תtuܨuQw}[u_#)jp9?!˻s -f_ p}LLl;pW Ėϥzi+<_anjВ9m@U8`kO=hE/NB+ۤoJsvn߯w7hq[ߵy+b<}('tHbMjku$̾k%]@Kx`- @[m-ahfxdr7#lq0(lF'.=e!r$)VX é}%VMb%2J/頌nquhwfqD>ՠpA.~nq9~nSgPrS(Ӥ`NU$-<п=;hD`I| "48u1xWm26!k:yҮ輆)$8߭$n-noՁ8nNkQgi0(4Xܑ}x7 &eg EToGc=6f+:?F*oXk;SҪٺPO9(}0qW{;NjĂoe ᱼ 2ʩ2ک%,hW5x:?}k$Nw^xhD)J AH+ v{Fg' s+a-`_[܂ }.O`$ qnM>xT1٭-1P(ҫ۔_z=-}[KlN9z.GbRĪİI_pPO#io[}z5ѕzrR;LHgV