Linux-Server sehen eine schlechte Download-Leistung hinter der Sonicwall-Firewall

7

Ich arbeite mit zwei CentOS Linux-Servern am selben Standort, die sich hinter einer erweiterten Sonicwall PRO 2040-Firewall befinden, die im transparenten Bridge-Modus ausgeführt wird.

Diese Server haben ein seltsames Problem beim Herunterladen von Dateien mit einer Größe von mehr als einigen Megabyte. Wenn ich zum Beispiel versuche, eine Kopie des Linux-Kernels von kernel.org zu testen oder per FTP zu senden, werden die ersten ~ 1-2 MB mit 600 + K / s heruntergeladen, und der Durchsatz sinkt dann von einer Klippe auf 1 K / s.

Ich habe alle Firewall-Konfigurationseinstellungen auf verdächtige Daten überprüft, aber nichts gefunden. Interessanter ist, dass ich denselben Download mit einem Windows-Server durchgeführt habe, der sich hinter derselben Firewall befindet, und der den ganzen Weg mit 600 + K / s durchgesegelt ist.

Hat das jemand gesehen? Wo soll ich anfangen, um dieses Problem zu beheben?

Joshua Penix
quelle
Was war die Ursache?
Warner
Ich habe es nicht gefunden und suche immer noch ...
Joshua Penix

Antworten:

4

Auch wir haben das gleiche Problem. Alles, was größer ist als das, was im ersten Download-Burst übertragen werden kann (~ 3,7 MB für uns), läuft unabhängig von der verfügbaren Bandbreite auf ~ 1 bis 4 KB pro Sekunde ab.

Es scheint ein spezifisches Problem mit der SonicWall PRO 2040-Firewall zu sein - https://discussions.apple.com/message/12250946?messageID=12250946

Die Ursache des Problems liegt in der Firewall. Die beste langfristige Lösung besteht darin, eine Einstellung in der Firewall zu finden, mit der die Option TCP-Fensterskalierung aktiviert werden kann, und den TCP-Fensterskalierungsfaktor des initiierenden Computers bei der Initialisierung des zu verwenden Verbindung.

Obwohl sich dieser Artikel auf Router bezieht, gilt dieselbe Logik für die Vorgänge mit der SonicWall Pro 2040-Firewall ( http://lwn.net/Articles/92727/) :

Die Details werden noch herausgefunden, aber es scheint, dass einige Router im Netz die TCP-Option für die Fensterskala für SYN-Pakete während des Durchlaufs neu schreiben. Insbesondere scheinen sie den Skalierungsfaktor auf Null zu setzen, lassen aber die Option bestehen. Die empfangende Seite sieht die Option und antwortet mit einem eigenen Fensterskalierungsfaktor. Zu diesem Zeitpunkt glaubt das initiierende System, dass sein Skalierungsfaktor akzeptiert wurde, und skaliert seine Fenster entsprechend. Das andere Ende glaubt jedoch, dass der Skalierungsfaktor Null ist. Das Ergebnis ist ein Missverständnis über die tatsächliche Größe des Empfangsfensters. Das System hinter der Firewall glaubt, dass es viel kleiner ist als es tatsächlich ist. Wenn der erwartete Skalierungsfaktor (und damit die Diskrepanz) groß ist, ist das Ergebnis bestenfalls eine sehr langsame Kommunikation. In vielen Fällen,

Ähnlich wie oben erwähnt gibt es Problemumgehungen für einzelne Computer - http://prowiki.isc.upenn.edu/wiki/TCP_tuning_for_broken_firewalls . Durch Deaktivieren der TCP-Erweiterung rfc1323 erhält die Firewall niemals die Möglichkeit, ein TCP-Fenster zu übergeben Skalierungsfaktor 0 und gibt stattdessen weiter, dass die Erweiterung rfc1323 nicht aktiviert ist, vermutlich unter Verwendung der maximal zulässigen Fenstergröße von TCP ohne die Erweiterung rfc1323, die 64 KB beträgt.

Befehle, die wir auf unseren verschiedenen Computern als vorübergehende Problemumgehung verwendet haben:

Ubuntu 10.10:
Änderung wird sofort wirksam:

sudo sysctl -w net.ipv4.tcp_window_scaling=0

Permanente Änderung nach dem nächsten Neustart:

sudo sh -c 'echo "net.ipv4.tcp_window_scaling=0" >> /etc/sysctl.conf'


Mac OSx:
Änderung wird sofort wirksam:

sudo sysctl -w net.inet.tcp.rfc1323=0 

Permanente Änderung nach dem nächsten Neustart:

sudo sh -c 'echo "net.inet.tcp.rfc1323=0" >> /etc/sysctl.conf'


Win7:
Siehe verfügbare Optionen:

netsh interface tcp show global

Befehl deaktivieren (dauerhaft):

netsh interface tcp set global autotuning=disabled


Als Antwort darauf, warum der Windows Server keine Probleme hatte, fand ich diesen Artikel - http://msdn.microsoft.com/en-us/library/ms819736.aspx

Die TCP-Fensterskalierung wird in Windows Server 2003 bei Bedarf ausgehandelt, basierend auf dem Wert, der für die Option SO_RCVBUF Windows Sockets festgelegt wurde, wenn eine Verbindung hergestellt wird. Darüber hinaus wird die Option Window Scale standardmäßig für eine Verbindung verwendet, wenn das von einem TCP-Peer initiierte empfangene SYN-Segment für diese Verbindung die Option Window Scale enthält. Windows Server 2003 TCP initiiert standardmäßig keine Verbindungen mit Fensterskalierung. Setzen Sie den Registrierungswert Tcp1323Opts auf 1, um den Windows Server 2003-TCP-Stapel anzuweisen, mithilfe der Option "Fensterskalierung" zu versuchen, ein größeres Empfangsfenster auszuhandeln.

Freddy
quelle
+1 für die detaillierte Antwort.
Spencer Rathbun
3

Diese Firewalls blockieren, wenn Intrusion Prevention und / oder Antivirus aktiviert sind. Insbesondere, wenn Sie TCP-Stream als einen der zu scannenden Typen ausgewählt haben. Es wird versucht, die gesamte Datei in seinem Speicher zu erstellen, um sie zu scannen ...
Deaktivieren Sie diese Funktionen vorübergehend und prüfen Sie, ob Ihre Leistung wieder steigt. Wenn ja, sollten Sie Ihre Server zur Ausnahmeliste hinzufügen, damit Sie nicht für das gesamte Netzwerk die Hosen fallen lassen müssen.

Scott Lundberg
quelle
Warum sollte die Leistung zwischen den Betriebssystemen unterschiedlich sein?
Warner
@ Warner: Nicht sicher, was du mit deiner Frage meinst? Die Firewall-Probleme haben nichts mit dem Betriebssystem zu tun. Es ist die Firewall selbst, die meiner Erfahrung nach nicht genügend Leistung bietet.
Scott Lundberg
doh! habe diesen Teil über Fenster verpasst. Um Ihre Frage zu beantworten: Ich weiß nicht, macht für mich keinen Sinn. Ich weiß, dass wir bei Verwendung der 2040er Jahre einige der Scan-Engines deaktivieren mussten, sonst hätten wir ähnliche Probleme.
Scott Lundberg
Danke für den Vorschlag. Um sicherzugehen, habe ich die IPS-, Anti-Virus- und Anti-Spyware-Funktionen der Sonicwall vollständig deaktiviert, und das Problem trat weiterhin auf.
Joshua Penix
1

Sehen Sie die Probleme beim Herunterladen auf den Linux-Server aus dem Netzwerk? Wenn nicht, muss es etwas mit der Kombination von Linux und der Firewall zu tun haben. Können Sie in der Firewall die CPU-Auslastung beobachten oder nach Warnungen suchen? Was ist mit dem Zurücksetzen der Firewall?

Vielleicht nimmt Linux nach dem ersten MB oder so automatisch eine Anpassung der TCP-Optionen (oder vielleicht Layer 2) vor, und die Firewall mag das nicht? Wenn Sie sich die verschiedenen Netzwerkoptionen in / proc ansehen, erhalten Sie möglicherweise eine Idee. Außerdem kann ein Paketspeicherauszug unter Linux eine Änderung der Vorgänge anzeigen, wenn die Verlangsamung auftritt.

Kyle Brandt
quelle
Ich denke, dies ist die Richtung, die ich weiter untersuchen muss. Ich sehe keine Probleme mit dem Datenverkehr zum / vom Linux-Server innerhalb des Netzwerks, nur wenn der Datenverkehr nach draußen gehen muss. Ich habe in den Protokollen oder Nutzungsdiagrammen der Firewall überhaupt nichts Seltsames gesehen, aber ich werde anfangen, die Optimierung des TCP-Stacks zu untersuchen. Irgendwelche Vorschläge, wonach ich in einem Paket-Dump suchen möchte?
Joshua Penix
1

Obwohl ich die Hauptursache dafür nicht gefunden habe, habe ich eine schnelle Problemumgehung gefunden, mit der ich Dateiübertragungen durchführen kann:

sysctl -w net.ipv4.tcp_window_scaling = 0

Die Kernel-Standardeinstellung für die TCP-Fensterskalierung ist aktiviert, aber mit diesem Befehl kann ich sie vorübergehend deaktivieren. Ich habe die Einstellung über sysctl.conf nicht dauerhaft beibehalten, da ich mir über die allgemeinen Leistungseffekte nicht sicher bin, aber sie funktioniert zur Not und kann sie dann auf 1 zurücksetzen, wenn ich fertig bin.

Joshua Penix
quelle
1

Versuchen Sie, die TCP-Fenster in der Sonicwall zu ändern.

  1. Melden Sie sich auf der SonicWALL-Administrationsseite an
  2. Ändern Sie das Ende der URL von main.html in diag.html
  3. Klicken Sie auf Interne Einstellungen und gehen Sie zu Sicherheitsdiensteinstellungen
  4. Aktivieren Sie das Kontrollkästchen "Durchsetzung eines Grenzwerts für das maximal zulässige angekündigte TCP-Fenster für jeden DPI-basierten Dienst aktivieren".
  5. Denken Sie daran, die Seite zurückzuscrollen und auf ANWENDEN zu klicken!
Matthew Haigh
quelle
0

Hier müssen noch viele Erstdiagnosen durchgeführt werden.

Fehler in /var/log/messages?

Fehler in dmesg?

Paketverlust nachgewiesen in /sbin/ifconfig?

Probleme mit der Linkverhandlung?

Gibt es physische oder nicht physische Unterschiede zwischen der Windows-Box und der Linux-Box?

Bearbeiten 1

Können Sie die Leistung mit verschiedenen Protokollen und Sites reproduzieren?

Warner
quelle
Keine Fehler in Protokollen oder dmesg, und ifconfig zeigt alle Zähler als sauber an. ethtool zeigt eine ordnungsgemäße Vollduplex-Gigabit-Verbindung. Sowohl die Linux-Computer als auch die Windows-Box sind ungefähr HP-Hardware der gleichen Generation, obwohl ich derzeit keine Einzelheiten habe.
Joshua Penix
Ich habe das Problem sowohl über FTP als auch über HTTP und von einer ganzen Reihe von Websites und großen Dateien reproduziert.
Joshua Penix