Wie kann ich die OpenVPN-Zuverlässigkeit über eine Verbindung mit hoher Latenz verbessern?

11

Wir betreiben ein OpenVPN-VPN über eine BGAN-Satellitenverbindung, bei der die Ping-Zeiten etwa 3 Sekunden betragen. Wir verwenden es in einer Tun- Konfiguration und laufen unter Linux (CentOS). Es ist hauptsächlich eine E-Mail, die über den Link gesendet wird. Sobald die E-Mail jedoch große Anhänge enthält, scheint das VPN zu blockieren.

Das "Ich kann durch den Tunnel pingen, aber jede echte Arbeit führt dazu, dass er blockiert. Ist das ein MTU-Problem?" Die Frage in den OpenVPN-FAQ scheint mein Problem genau zu beschreiben, aber die Verwendung von mssfixund fragmentscheint immer noch nicht viel zur Verbesserung der Situation beizutragen.

Mein Haupttest besteht darin, eine 2-MB-Datei mit scp über das VPN zu kopieren . Es kopiert ungefähr 192 KB und meldet dann einen blockierten Zustand. Wenn ich ein paar Sekunden warte, beginnt der Kopiervorgang erneut und bleibt nach einigen weiteren KByte wieder stehen.

Dieses Abwürgen tritt auf, unabhängig davon, ob ich die Optionen fragmentoder mssfixin meiner OpenVPN-Konfiguration festgelegt habe oder nicht (obwohl die Einstellung fragment 1000das Abwürgen zu verringern schien, es jedoch nicht beseitigte). Das OpenVPN mtu-testmeldete 1542 als MTU-Größe.

Ich habe im Internet gesucht , um weitere Ratschläge, wie und wann zu verwenden mssfixund fragment, aber ich Seiten nur finden die gleiche wie die FAQ zu sagen, und nicht mit Angaben darüber, wie und wann welche Parameter zu verwenden.

Meine Fragen sind dann:

  • Wann benutze ich mssfixund fragment?
  • Benutze ich mssfixund fragmentin Kombination?
  • Wenn mssfixund fragmentsind die Lösung, was sind die tun-mtu, link-mtuund mtu-discParameter für?

Außerdem habe ich das Tool iperf verwendet , um die Bandbreite zu messen. Ohne das VPN misst es ständig in der Größenordnung von 210 Kbit / s.

Wenn iperf über VPN ( $ iperf -c remoteserver -t60 -i5) verwendet wird, beginnt es mit 10 Kbit / s und steigt dann stetig an, bis 1,2 Mbit / s gemeldet werden. Dann scheint es zu blockieren, wo 0 kbit / s für eine Reihe von Iterationen gemeldet werden (I. Ich denke, die 1,2 Mbit / s sind möglicherweise auf OpenVPN-Pufferung zurückzuführen.

Ist iperf der beste Weg, um die Bandbreite zu messen?

Jede Hilfe in dieser Situation wird sehr geschätzt.

iWerner
quelle
Verwendet das OpenVPN derzeit TCP oder UDP?
pjc50
Es verwendet derzeit UDP
iWerner
Vielen Dank für alle Antworten, aber ich musste vorübergehend aufhören, weil die BGAN-Einheit keine Sendezeit mehr hatte. Ich hoffe, dass ich heute noch weitermachen kann. Ich sollte erwähnen, dass wir es vorziehen würden, bei UDP zu bleiben, da die Verwendung von TCP die über das Netzwerk gesendeten Daten verdoppeln würde (und damit die Kosten, für die unser Client bereits sehr sensibel ist)
iWerner

Antworten:

5

1542 als MTU? Ich habe noch nie davon für eine WAN-Verbindung gehört. Normalerweise ist MTU die maximale Nutzlast, die IP-Paketgröße abzüglich des Headers für IP (20 Byte) und ICMP (8 Byte). Das bedeutet MTU = 1500 für ein herkömmliches Ethernet-LAN. Darüber hinaus führen die meisten VPNs einen Overhead für ihre Paketkapselung ein. Eine typische VPN-MTU ist 1400.

In modernen Netzwerken ist es schwierig zu bestimmen, wie die MTU zu einem bestimmten Zeitpunkt aussehen wird, da die Eingangs- und Ausgangspfade unterschiedlich sein können und sich auch aufgrund der automatischen Pfadumleitung ändern können. In einem solchen Netzwerk ist es möglicherweise effektiver, die MTU auf Ihren Hosts, die sich auf beiden Seiten der VPN-Verbindung befinden, wie z. B. 576, auf niedrig zu setzen.

MSS (maximale Segmentgröße) ist MTU abzüglich der IP + TCP-Header (40 Byte). Dies wird normalerweise vom Netzwerkstapel ausgehandelt und hat normalerweise nicht die gleichen Verhandlungsprobleme wie die MTU, es sei denn, die MTU ist falsch. (Die MTU-Aushandlung wird normalerweise durch blockierte ICMP- oder Black-Hole-Router beeinträchtigt.)

Das erste, was ich tun würde, ist eine Netzwerkpaketerfassung auf Ihrer sendenden Seite durchzuführen und die Anzeige nach Frame-Größe zu sortieren (möglicherweise müssen Sie diese Spalte in Wireshark hinzufügen). Sie sollten sicherstellen, dass Sie keine übergroßen Frames senden, wie Sie es erwarten würden. Es ist nicht ungewöhnlich, dass moderne Netzwerkkarten übergroße Frames senden, wenn Optionen wie Large Send Offload oder Jumbo Frames aktiviert sind. Ich habe mehr als 30.000 Byte-Frames gesehen, wenn diese Optionen aktiviert sind.

Greg Askew
quelle
+1 für die Paketerfassung, bevor etwas geändert wird. Selbst wenn Sie keinen großen Frame finden, werden möglicherweise "normale" Pakete irgendwo fragmentiert.
Javier
1
Standardmäßig setzt OpenVPN die MTU des Tun-Geräts auf 1500 (dies entspricht der MTU auf den Ethernet-Geräten unserer Computer). Ich bin mir immer noch nicht sicher, ob die Fragmentierung der VPN-Pakete eine gute oder eine schlechte Sache ist. Die Antworten in diesem Thread scheinen zu implizieren, dass es schlecht ist, während die anderen Referenzen, die ich im Web gefunden habe, implizieren, dass es gut ist.
iWerner
2
@iwerner: hast du versucht die mtu größe mit ping zu bestimmen? Wenn ICMP nicht irgendwo deaktiviert ist, können Sie unter Windows Folgendes verwenden: ping -f -l 1372 <Ziel-IP>. Reduzieren Sie die Anzahl so lange, bis dies erfolgreich ist. Unter Linux führt ping -s 1372 -M <Ziel-IP> aus. Zu Ihrer Information, in den OpenVPN-FAQ wird die Verwendung von mssfix 1200 empfohlen, dies behebt jedoch nicht die Grundursache. Die Verwendung von VPN-Lösungen zum Fragmentieren kann immer zu Leistungseinbußen führen. Wenn Sie über ein großes VPN-Setup verfügen, können Sie die Fragmentierung nicht auf der Seite des zentralen Konzentrators, sondern nur auf der Seite des Remote-Büros verwenden.
Greg Askew
2

Haben Sie aus Neugier versucht, die MTU der Netzwerkschnittstelle zu senken? Vielleicht vermasselt die Satellitenverbindung die Fragmentierung stark. Als kontraintuitive Anmerkung möchten Sie zur Abwechslung möglicherweise openvpn über TCP ausprobieren. Ich weiß, dass es die Leistung verringern sollte, aber wenn Sie keine Kontrolle über die Fragmentierung entlang der Linie haben, könnte es Ihnen helfen.

Lorenzog
quelle
Ich wollte das Gegenteil vorschlagen :) - In diesem Fall mit hoher Latenz treten die TCP-in-TCP-Probleme auf, und UDP wird dies vermeiden.
pjc50
Ich nahm an, dass er den Standard-UDP-Port für openvpn verwendet, und schlug daher das Gegenteil vor. Ja, normalerweise würde ich Ihnen zustimmen. Aber hey, wir alle wissen, dass Sysadmin Versuch und Irrtum ist und normalerweise "das Gegenteil versuchen, um zu sehen, ob es funktioniert" :)
Lorenzog
Vielen Dank. Wir verwenden derzeit UDP, und der Versuch, TCP zu verwenden, ist mir nie in den Sinn gekommen. (Wenn ich mehr Repräsentanten hätte, hätte ich dich
positiv
@iWerner: danke :) versuche auch, die MTU im iface schrittweise zu reduzieren und zu sehen, wann sie stoppt (wenn ja).
Lorenzog
2

Wenn Sie TCP verwenden, erhöhen Sie die Fenstergröße von TCP. Dies hilft bei der "Anzahl der Pakete in der Luft".

Es ist schon eine Weile her, dass ich mit diesem Zeug spielen musste, aber hier ist ein Link, den Google für mich gefunden hat.

Nachdem ich wieder lesen Ihre Frage , die ich sehen Sie laufen BGAN - ich einen guten Blick haben würde dies (oder nur Google für: „BGAN - Spoofing“).

Was die Bandbreitenmessung angeht, habe ich festgestellt, dass iperf ziemlich anständig ist, solange Sie vernünftige Paketgrößen verwenden.

Eddy
quelle
Dies ist interessant - Es wird erwähnt, dass der TCP-Beschleuniger für Redhat verfügbar ist, während die Inmarsat-Mitarbeiter, mit denen wir gesprochen haben, sagten, dass er nur für Windows und OS X verfügbar war (und dies wird in der Tat auf der Inmarsat / BGAN-Website angegeben)
iWerner,
Sie können es jetzt nicht haben; Ich sehe, dass das Dokumentdatum 07 ist. Wenn Sie hart genug drücken und mit genug Leuten sprechen; Vielleicht finden Sie jemanden mit einer alten Kopie davon. Wenn Sie anrufen, erhalten Sie im Allgemeinen Tier-1-Support. Ich werde einige meiner Kontakte ausprobieren, aber keine Garantien.
Eddy
Ich habe den Lauf von unserem Satellitenanbieter bekommen; Es ist schwer, jemanden zu finden, der weiß, wovon er spricht. Ich werde es weiter versuchen. In der Zwischenzeit gibt es hier etwas zu versuchen: sourceforge.net/projects/pepsal Aus der Projektbeschreibung geht hervor, dass es ziemlich genau das tut, was die Inmarsat-Software tut: PEPsal ist ein integriertes, mehrschichtiges, transparentes TCP Leistungsverbessernder Proxy, der die Verbindung in zwei Teile aufteilt, Linux TCP-Verbesserungen beim Senden von Daten verwendet und die Leistung bei Links mit unterschiedlichen Merkmalen
Eddy
2

Ich denke, Sie bellen vielleicht am falschen Baum. Jedes Mal, wenn ich falsche MTU-Probleme hatte, wurde der Verkehr weit vor 192 KB gestoppt. Ich denke, es hängt eher mit einigen im Fenster "In Flight Packets" zusammen, entweder mit dem TCP-Fenster oder mit einigen Puffern im Satelliten-Uplink selbst.

Auf jeden Fall haben einige lange Paketerfassung (beide ‚innen‘ und ‚außen‘ des VPN) und sehen , ob Sie bekommen alle die ACK‚s

Javier
quelle