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.
Antworten:
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.
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.
quelle