SIP est le protocole de signalisation pour effectuer des communications de type voix sur IP (VoIP). Lorsque la communication est établie, il passe la main au protocole RTP qui permet le transport de la voix sur le réseau. Dans une architecture réseau incluant des fonctions de translation d'adresse (NAT), les choses se compliquent (voir cet article en anglais). En effet, si plusieurs clients SIP se trouve derrière un routeur NAT, ce dernier ne va pas savoir établir les sessions entrantes (comment savoir vers quel client SIP faut il envoyer les flux).Vous pouvez lire ce billet qui détaille cette problématique.
On se retrouve devant plusieurs solutions techniques:
- utilisation d'un tunnel IP entre le routeur NAT et le serveur SIP
- utilisation de redirection statique (par client) au niveau du routeur NAT en utilisant des numéros de ports SIP et RTP différents
- utilisation d'un proxy SIP au niveau du routeur NAT
C'est cette troisième solution que nous allons mettre en place dans ce billet en utilisant le proxy SIP libre siproxd sur votre routeur NAT GNU/Linux.
Installation de Sipproxd
Actuellement disponible en version 0.7.2, vous pouvez soit compiler les sources, soit installer depuis les dépôts de votre distribution GNU/Linux. Par exemple sous Ubuntu:
sudo aptitude install siproxd
Il faut ensuite modifier le fichier /etc/default/siproxd et remplacer le 0 par 1.
Configuration de Sipproxd
Le fichier de configuration unique /etc/siproxd.conf est très bien commenté. Dans un cas standard ou le routeur NAT GNU/Linux a deux interfaces (eth0 pour l'interface coté LAN et eth1 pour l'interface NATé), il suffit juste de modifier la configuration en changeant les deux lignes suivantes:
if_inbound = eth0 if_outbound = eth1
Lancement de Sipproxd
Sous Unbuntu,c'est assez simple:
/etc/init.d/sipproxd start
Configuration des clients SIP
Il ne reste plus qu'a configurer vos clients SIP dans la section "Proxy SIP" et de mettre l'adresse IP de votre routeur NAT (coté LAN donc l'adresse de eth0 dans notre cas).