TCP Keepalive und Firewall beenden Leerlaufsitzungen


10

An einem Kundenstandort fügte das Netzwerkteam eine Firewall zwischen dem Client und dem Server hinzu. Dies führt dazu, dass Leerlaufverbindungen nach etwa 40 Minuten Leerlaufzeit getrennt werden. Die Netzwerk-Leute sagen, dass die Firewall kein Zeitlimit für Leerlaufverbindungen hat, aber Tatsache ist, dass die Leerlaufverbindungen unterbrochen werden.

Um dies zu umgehen, haben wir zuerst den Server (einen Linux-Computer) mit aktivierten TCP-Keepalives konfiguriert, wobei tcp_keepalive_time = 300, tcp_keepalive_intvl = 300 und tcp_keepalive_probes = 30000 aktiviert sind. Dies funktioniert und die Verbindungen bleiben tagelang oder länger funktionsfähig. Wir möchten jedoch auch, dass der Server tote Clients erkennt und die Verbindung beendet. Daher haben wir die Einstellungen auf time = 300, intvl = 180, probes = 10 geändert und gedacht, dass der Server alle 300 Sekunden prüfen würde, wenn der Client tatsächlich am Leben wäre (5 Minuten) und der Client würde mit einem ACK antworten und dies würde die Firewall davon abhalten, dies als eine inaktive Verbindung zu betrachten und sie zu beenden. Wenn der Client nach 10 Tests tot wäre, würde der Server die Verbindung abbrechen. Zu unserer Überraschung werden die müßigen, aber lebendigen Verbindungen nach etwa 40 Minuten wie zuvor unterbrochen.

Wireshark, das auf der Clientseite ausgeführt wird, zeigt überhaupt keine Keepalives zwischen Server und Client an, selbst wenn Keepalives auf dem Server aktiviert sind.

Was könnte hier passieren?

Wenn die Keepalive-Einstellungen auf dem Server time = 300, intvl = 180, probes = 10 sind, würde ich erwarten, dass der Server alle 300 Sekunden Keepalive-Probes sendet und die Verbindung in Ruhe lässt, wenn der Client aktiv, aber inaktiv ist Wenn der Client tot ist, sendet er nach 300 Sekunden eine, dann alle 180 Sekunden 9 weitere Tests, bevor die Verbindung unterbrochen wird. Habe ich recht?

Eine Möglichkeit besteht darin, dass die Firewall die Keepalive-Tests vom Server abfängt und sie nicht an den Client weiterleitet. Die Tatsache, dass sie einen Test hat, lässt vermuten, dass die Verbindung aktiv ist. Ist dies ein häufiges Verhalten für eine Firewall? Wir wissen nicht, um welche Art von Firewall es sich handelt.

Der Server ist ein Teradata-Knoten und die Verbindung erfolgt von einem Teradata-Client-Dienstprogramm zum Datenbankserver, Port 1025 auf der Serverseite. Wir haben jedoch das gleiche Problem mit einer SSH-Verbindung festgestellt, sodass wir glauben, dass dies alle TCP-Verbindungen betrifft.


2
Es fehlt eine Beschreibung der Ports oder Protokolle, über die die Clients eine Verbindung zum Server herstellen. Ist es SSH?
ewwhite

Das Identifizieren der Firewall kann ebenfalls hilfreich sein.
Skaperen

3
Überprüfen Sie, ob Keepalive auf dem Socket aktiviert ist, indem Sie netstat --timers -tn ausführen, und suchen Sie nach dem Schlüsselwort "keepalive" (da dies von der Software auf dem Socket aktiviert werden muss). Weitere Informationen finden Sie hier: tldp.org/HOWTO/TCP-Keepalive-HOWTO/index.html Überprüfen Sie auch die Timer-Werte. Der erste Wert ist Sekunden bis zum nächsten Keepalive-Paket, und der dritte Wert ist die Anzahl der ausstehenden Keepalive-Pakete, die auf a warten Antwort (wenn ich mich richtig erinnere)
Victor Jerlin


2
Ihre Netzwerkleute sind wahrscheinlich falsch. Wenn sie eine Stateful Firewall verwenden (dies ist mit ziemlicher Sicherheit der Fall), ist für jede hergestellte Verbindung ein Eintrag erforderlich. Ohne ein Leerlaufzeitlimit geht der Speicher in der Firewall verloren und die Firewall wird schließlich leer und stürzt ab. Sie haben definitiv irgendwo eine Leerlaufzeit ...
James Shewey

Antworten:


1

Eine Statefull-Firewall überprüft die Pakete und bestätigt auch, ob die Verbindung besteht. Ich glaube, dass die Firewall auch die Einstellungen genau so anpassen sollte wie die Computer. Standardmäßig halten viele Firewall-Verbindungen nur 60 Minuten lang inaktiv. Diese Zeit kann sich jedoch je nach Hersteller ändern.

Einige Anbieter verfügen über Funktionen wie TCP Intercept, TCP State Bypass und Dead Connection Detection, mit denen spezielle Situationen wie Ihre behandelt werden können.

Eine andere Möglichkeit besteht darin, die Firewall selbst mit denselben Parametern zu konfigurieren, die Sie auf den Servern haben, um sicherzustellen, dass alles konsistent ist.

Auf einer Cisco-Firewall haben Sie den folgenden Befehl, um sie zu konfigurieren.

Hostname (Konfiguration) # Timeout-Feature-Zeit

Zeitüberschreitung conn hh: mm: ss - Die Leerlaufzeit, nach der eine Verbindung zwischen 0: 5: 0 und 1193: 0: 0 geschlossen wird. Der Standardwert ist 1 Stunde (1: 0: 0).

Sie haben mehrere Parameter entsprechend Ihren Anforderungen.

Ich würde empfehlen, mit dem Team zu sprechen, das die Firewall verwaltet, und die Timings an Ihre Bedürfnisse anzupassen oder die Funktionen zu überprüfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.