[fli4l] NA?==?utf-8?Q?T timeout für udp und tcp

Erwin Lottermann broeselmeier at gmx.de
Sa Aug 20 14:13:44 CEST 2016


Zitat: Christoph Schulz schrieb am Fr, 19 August 2016 15:40
----------------------------------------------------
> Hallo!
> 
> Am Thu, 18 Aug 2016 12:08:52 +0200 schrieb Erwin Lottermann:
> 
> > Schaut man sich die Log-Einträge von Thomas/News[1] an, dann
> > sieht es so
> > aus, als wenn der SIP-Conntrack-Helper das Timeout für
> > UDP-Verbindungen
> > von 180s auf 3600s erhöht.
> 
> So ist es. Aus include/linux/netfilter/nf_conntrack_sip.h:
> 
> #define SIP_TIMEOUT     3600
> 
> Die Beschreibung des Modul-Parameters lautet "timeout for the master
> SIP 
> session". 

D.h. das muss gar keine generelle Vergrößerung des Timeouts für alle
UDP-Verbindungen sein, sondern könnte ausschließlich für
SIP-Verbindungen gelten, so dass sich die Frage nach negativen
Auswirkungen für andere UDP-Verbindungen gar nicht stellt.

> Somit kannst du den SIP-Timeout-Wert als Modul-Parameter 
> angeben. Zum Testen könntest du über ein selbstgeschriebenes
> Skript /etc/
> rc.d/rc050.sip-timeout o.ä. den folgenden Eintrag an die /etc/
> modprobe.conf anhängen:
> 
>   options nf_conntrack_sip sip_timeout=600
> 
> Das würde den Timeout auf 600 Sekunden senken. Das Skript könnte
> etwa so 
> aussehen:
> 
>   #!/bin/sh
>   echo "options nf_conntrack_sip sip_timeout=600" >>
> /etc/modprobe.conf
> 

D.h. man kann das Timeout für die SIP-Verbindung nach Bedarf
einstellen.
z.B. wenn der SIP-Provider ein Reconnect-Intervall von mehr als 1h
vorgibt, würde es wahrscheinlich Sinn machen, den Timeout-Wert noch
größer einzustellen.

> Wenn du der C-Programmiersprache mächtig bist, solltest du dir den
> 
> Quelltext der Datei net/netfilter/nf_conntrack_sip.c anschauen. Dort
> 
> findest du vermutlich alle Informationen, die du brauchst.
> Interessant 
> wären vermutlich:
> 
> /* Parse a REGISTER request and create a permanent expectation for 
> incoming
>  * signalling connections. The expectation is marked inactive and is
> 
> activated
>  * when receiving a response indicating success from the registrar.
>  */
> static int process_register_request(struct sk_buff *skb, unsigned
> int 
> protoff,
>                                     unsigned int dataoff,
>                                     const char **dptr, unsigned int
> 
> *datalen,
>                                     unsigned int cseq)
> 
> und
> 
> static int process_register_response(struct sk_buff *skb, unsigned
> int 
> protoff,
>                                      unsigned int dataoff,
>                                      const char **dptr, unsigned int
> 
> *datalen,
>                                      unsigned int cseq, unsigned int
> code)
> 

Zum Verstehen von C-Quelltext reicht es bei mir nicht.
Für das Verständnis wird man aber auch die SIP-Spezifikationen
verstanden haben müssen.
In denen habe ich ein wenig gelesen und danach machen deine Hinweise
schon Sinn.

Der SIP-Conntrack-Helper soll vermutlich nur die SIP-Verbindungen am
Leben halten (Timeout erhöhen), die bei einer erfolgreichen
SIP-Registrierung entstanden sind. Dazu wird zuerst die ausgehende
Request-Message geparst, um zu sehen, ob es sich um eine
Register-Message handelt und die Call-ID zu bestimmen, damit die
eingehende Message zugeordnet werden kann.
Dann wird die eingehende Antwortmessage des SIP-Servers geparst, um
herauszufinden, ob es eine Register-Response ist und die Registrierung
erfolgreich war.

> > Kann jemand sagen, ob es Szenarien gibt, bei denen ein so
> > großes Timeout
> > für UDP-Verbindungen störend sein kann?
> 
> Ich wüsste nicht, warum das so sein sollte. Wenn die
> Internet-Verbindung 
> neu aufgebaut wird, wird die Conntrack-Tabelle sowieso geleert.
>

Wie schon oben gesagt: Wenn es nur die SIP-Verbindungen betrifft, dann
ist die Frage wohl hinfällig. 

Vielen Dank
Erwin


Mehr Informationen über die Mailingliste Fli4L