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.
Recent Comments