Envoyer des paquets UDP vide pour garder le port dans le router NAT ouvert (port mapping)

Oussama Hammami, 2011-01-07

Switzernet

 

Problématique

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.

Exemple

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.

Conclusion

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.

Installation

Le script d’envoi est [html] [zip]

 

Vous devez installer le module perl Net::RawIP

# aptitude install libnet-rawip-perl

Validation

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

Référence

Statistic of NOTIFY sending (Original Excel files with customer account, unpublished in the public version of this document)

[protected]

 

Projects@ mail archive

[public]

 

Version complète de Projects@ mail archive

[protected]

 

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