Envoyer des paquets UDP vide pour garder le port dans le router NAT ouvert (port mapping)
Oussama Hammami, 2011-01-07
Switzernet
Lors de l’enregistrement du téléphone SIP (REGISTER), l’Astrad garde l’IP et le Port (URI) de ce dernier dans sa base de données (table MySQL sipppeer), l’information remonte jusqu’au serveur de routage et de ce cette manière tous les appels entrant vers ce client seront routés vers l’Asterisk en question. Ce dernier utilisera l’adresse IP et le port utilisés par le téléphone lors du dernier enregistrement pour router les appels entrants de ce client mais il arrive que le routeur NAT du client libère ce port et par conséquent la transformation inverse pour renvoyer les paquets SIP vers l’IP locale devient impossible.
Ci-dessous un scénario d’un appel entrant échoué à cause de la perte de porta mapping du compte 41215500327.
IP: 81.62.117.251
Port: 64920
IP: 81.62.117.251
Port: 55466
Le téléphone a changé le port après 3 minutes.
En générale, le routeur libère les ports inactifs durant les 3 dernières minutes.
Pour contourner ce problème, les téléphones SIP Siemens Gigaset (C450, C470 …) envoient des paquets UDP vides vers le serveur SIP d’enregistrement afin de garder le port dans le routeur NAT ouvert [eml]:
"To keep NAT/firewall bindings open, empty UDP packets are sent to any SIP proxy and registration gateway of all registered ITSP…."
http://wiki.siemens-enterprise.com/wiki/Network_Configuration_for_VoIP_Providers
Pour résoudre ce problème on peut:
Ce document détaille la solution d’envoi des paquets UDP vides.
Le script d’envoi est [html] [zip]
Vous devez installer le module perl Net::RawIP
# aptitude install libnet-rawip-perl
Ci-dessous un test avec le téléphone 41215500327 qui perte le port chaque 3 minutes.
IP : 81.63.65.12
Port : 58574
IP : 81.63.65.12
Port : 58955
# ngrep -pqlt -W byline "" dst host 81.63.65.12
interface: eth0 (94.23.225.0/255.255.255.0)
filter: (ip or ip6) and ( dst host 81.63.65.12 )
U 2011/06/29 17:45:16.735240 94.23.225.212:5060 -> 81.63.65.12:58955
.
U 2011/06/29 17:45:31.735359 94.23.225.212:5060 -> 81.63.65.12:58955
.
...
U 2011/06/29 17:54:46.740177 94.23.225.212:5060 -> 81.63.65.12:58955
.
U 2011/06/29 17:55:01.740335 94.23.225.212:5060 -> 81.63.65.12:58955
.
IP : 81.63.65.12
Port : 58955
Statistic of NOTIFY sending (Original Excel files with customer account, unpublished in the public version of this document)
Projects@ mail archive
[public]
Version complète de Projects@ mail archive
SIP configuration
http://www.asterisk.org/doxygen/trunk/Config_sip.html
Asterisk & NAT
http://switzernet.com/3/public/110303-asterisk-nat/
Problèmes des appels entrants causés par l’expiration du NAT port mapping
http://switzernet.com/3/public/110627-astrad-nat-port-mapping/
Test d’Astrad vs PortaSip (maintient du port SIP ouvert)
http://switzernet.com/3/public/110623-portasip-vs-astradV7-incoming/
Forcing expire time on asterisk
http://switzernet.com/3/public/112706-astrad-forcing-expire-time/
Astrad V8 : Test Notify
http://switzernet.com/3/public/110609-astradv8-notify/
Asterisk & NAT
http://switzernet.com/3/public/110303-asterisk-nat/
DBA versions
http://switzernet.com/3/public/110317-db3-versions/
Astrad Versionning
http://switzernet.com/3/public/110126-astrad-versions/
Net::RawIP
http://search.cpan.org/~saper/Net-RawIP-0.25/lib/Net/RawIP.pm