j’ai un ami qui m’attend à l’interieur

Tags: , ,
Add comments

Histoire de m’affranchir de N regles de firewalling / forwarding / nat à se faire des nœuds au cerveau à coups l’iptables, je me suis dit qu’il serait du meilleur effet d’embarquer un simple proxy SIP dans la Fonera.
Après 2/3 googlisations, j’identifie siproxyd comme le candidat idéal pour mon petit exercice.
Muni de l’environnement de développement de FON, je compile :

. libosip2 dont il dépend
. siproxyd lui même

Ça donne à peu près ça :

$ pwd
/home/imil/fonera/src/own/libosip2-2.2.2
$ export FONBUILD=/path/to/fonera/build/env
$ export FONENV=/path/to/fonera/fake/root/filesystem
$ CFLAGS=-I${FONBUILD}/staging_dir_mips/usr/include LDFLAGS="-L${FONBUILD}/staging_dir_mips/usr/lib -lcrypt" CC=mips-linux-uclibc-gcc ./configure --host=mips --disable-hashtable --prefix ${FONENV}
$ make && make install

FONBUILD est le chemin vers l’environnement de compilation décompressé
FONENV est mon point de montage CIFS mounté depuis la Fonera sur /usr/local
puis :

$ pwd
/home/imil/fonera/src/own/siproxd-0.5.13
$ CFLAGS=-I${FONBUILD}/staging_dir_mips/usr/include LDFLAGS="-L${FONBUILD}/staging_dir_mips/usr/lib -lcrypt" CC=mips-linux-uclibc-gcc ./configure --enable-fli4l-22-uclibc --enable-static --host=mips --prefix=${FONBUILD} --with-libosip-prefix=${FONBUILD}
$ make

À la fin de la compilation, j’obtiens un src/siproxyd que je scp dans l’/usr/bin de la Fonera.
Reste à créer un /etc/siproxyd.conf minimal :

if_inbound  = ath1
if_outbound = eth0
sip_listen_port = 5060
daemonize = 1
silence_log = 1
log_calls = 1
registration_file = /tmp/siproxd_registrations
autosave_registrations = 300
pid_file = /var/run/siproxd.pid
# on active le RTP proxy
rtp_proxy_enable = 1
rtp_port_low  = 7070
rtp_port_high = 7089
rtp_timeout = 300
rtp_dscp = 46
default_expires = 600
debug_level =      0x00000000
debug_port = 0
# 1.2.3.4 == l'ip de l'asterisk qui va effectivement enregistrer mes SIP phones
outbound_proxy_host = 1.2.3.4
outbound_proxy_port = 5060
outbound_proxy_port = 5060

Reste à ouvrir quelques ports sur la Fonera :

root@OpenWrt:/etc/init.d# tail -7 /etc/firewall.user
## -- VoIP
# SIP
iptables -t nat -A prerouting_rule -i $WAN -p udp --dport 5060 -j ACCEPT
iptables        -A input_rule      -i $WAN -p udp --dport 5060 -j ACCEPT
# RTP
iptables -t nat -A prerouting_rule -i $WAN -p udp --dport 7070:7089 -j ACCEPT
iptables        -A input_rule      -i $WAN -p udp -m udp --dport 7070:7089 -j ACCEPT

Et evidemment à entrer ces regles “à la main” pour qu’elles soient executées en live.
Moyennant quoi :

/usr/bin/siproxd

Et on admire la beauté d’un header SIP :

Sending to 4.3.2.1 : 5060 (NAT)
Transmitting (NAT) to 4.3.2.1:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 4.3.2.1:5060;branch=z9hG4bKde51f2040c5392cd5619453830d27d85;received=4.3.2.1
Via: SIP/2.0/UDP 192.168.10.231:5060;branch=z9hG4bK066469ba8
From: white ;tag=6af6d7ac5d3c755
To: 087XXXXXXX ;tag=as41ab49a5
Call-ID: a09785bc6c5225000878173ed3169649@192.168.10.231
CSeq: 1169873461 BYE
User-Agent: Asterisk PBX
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Contact: 
Content-Length: 0
X-Asterisk-HangupCause: Normal Clearing

Emouvant.

Leave a Reply

WP Theme & Icons based on GlossyBlue by N.Design Studio
Banner from www.trynthlas.com
Entries RSS Comments RSS Log in
Performance Optimization WordPress Plugins by W3 EDGE