Jak poprawić niezawodność OpenVPN za pośrednictwem łącza o wysokim opóźnieniu?

11

Prowadzimy OpenVPN VPN przez łącze satelitarne BGAN, gdzie czasy ping wynoszą około 3 sekund. Używamy go w konfiguracji tun i działamy na systemie Linux (CentOS). Jest to przede wszystkim e-mail, który zostanie wysłany za pośrednictwem łącza, ale gdy tylko poczta zawiera duże załączniki, VPN wydaje się utknąć.

„Mogę pingować przez tunel, ale każda prawdziwa praca powoduje jego zablokowanie. Czy jest to problemem MTU?” pytanie w OpenVPN FAQ wydaje się dokładnie opisywać mój problem, ale wydaje się, że używanie mssfixi fragmentnadal niewiele robi, aby poprawić sytuację.

Moim głównym testem jest skopiowanie pliku 2 MB przez VPN za pomocą scp . Skopiuje około 192 kilobajtów, a następnie zgłosi stan - zablokowany - . Jeśli poczekam kilka sekund, zacznie się kopiowanie, a następnie zatrzyma się ponownie po następnej kilku kilobajtach.

To przeciąganie występuje bez względu na to, czy ustawiłem opcje fragmentlub mssfixw mojej konfiguracji OpenVPN (chociaż ustawienie fragment 1000to wydawało się zmniejszać przeciąganie, ale go nie eliminowało). OpenVPN mtu-testzgłosił 1542 jako rozmiar MTU.

Szukałem w internecie, aby uzyskać więcej porad, w jaki sposób i kiedy użyć mssfixi fragment, ale tylko znaleźć strony mówią same jak FAQ, i nie podając szczegółowe informacje, w jaki sposób i kiedy używać które parametry.

Moje pytania brzmią zatem:

  • Kiedy używam mssfixi fragment?
  • Czy używam mssfixiw fragmentpołączeniu?
  • Jeśli mssfixi fragmentto rozwiązanie, jakie są tun-mtu, link-mtui mtu-discparametry?

Ponadto używam narzędzia iperf do mierzenia przepustowości. Bez sieci VPN stale mierzy rzędu 210 Kb / s.

Gdy używasz iperf przez VPN ( $ iperf -c remoteserver -t60 -i5), zaczynałby się od 10 Kbit / s, a następnie stopniowo zwiększał się, aż zgłasza 1,2 Mb / s, a następnie wydaje się, że utknął w miejscu, gdy zgłasza 0 kbit / s dla wielu iteracji (I myślę, że 1,2 Mb / s może wynikać z buforowania OpenVPN itp.)

Czy iperf to najlepszy sposób pomiaru przepustowości?

Każda pomoc w tej sytuacji będzie bardzo mile widziana.

iWerner
źródło
Czy w tej chwili openvpn używa TCP lub UDP?
pjc50,
Obecnie używa UDP
iWerner
Dziękuję za wszystkie odpowiedzi, ale musiałem tymczasowo przerwać, ponieważ w jednostce BGAN zabrakło czasu antenowego. Mam nadzieję, że będę kontynuować dzisiaj. Powinienem wspomnieć, że wolelibyśmy pozostać przy UDP, ponieważ użycie TCP
podwoiłoby

Odpowiedzi:

5

1542 jako MTU? Nigdy o tym nie słyszałem dla łącza WAN. Zwykle MTU to maksymalny ładunek, rozmiar pakietu ip minus nagłówek dla IP (20 bajtów) i ICMP (8 bajtów). Oznacza to, że MTU = 1500 dla tradycyjnej sieci Ethernet LAN. Ponadto większość sieci VPN wprowadza narzut związany z enkapsulacją pakietów. Typowa jednostka MTU VPN to 1400.

W nowoczesnych sieciach trudno jest w dowolnym momencie ustalić, jaka będzie MTU, ponieważ ścieżki wejścia i wyjścia mogą być różne, a także mogą się zmieniać z powodu automatycznego przekierowywania ścieżki. W przypadku takiej sieci bardziej efektywne może być ustawienie niskiej MTU na hostach znajdujących się po obu stronach łącza VPN, takich jak 576.

MSS (maksymalny rozmiar segmentu) to MTU minus nagłówki IP + TCP (40 bajtów). Jest to zwykle negocjowane przez stos sieci i zwykle nie ma takich samych problemów negocjacyjnych jak MTU, chyba że MTU jest błędne. (Negocjacja MTU jest zwykle utrudniona przez zablokowane routery ICMP lub czarnej dziury).

Pierwszą rzeczą, którą bym zrobił, to przechwycenie pakietu sieciowego po stronie wysyłającej i posortowanie wyświetlacza według rozmiaru ramki (może być konieczne dodanie tej kolumny w Wireshark). Powinieneś sprawdzić, czy nie wysyłasz żadnych ramek o zbyt dużych rozmiarach, jakich byś się spodziewał. Nie jest niczym niezwykłym, że współczesne karty sieciowe wysyłają ramki ponadgabarytowe, jeśli włączone są takie opcje, jak Duże wysyłanie odciążania lub Duże ramki. Widziałem ponad 30 000 ramek bajtowych, gdy te opcje są włączone.

Greg Askew
źródło
+1 za przechwytywanie pakietów przed zmianą. nawet jeśli nie znajdziesz żadnej dużej ramki, możesz zobaczyć gdzieś „normalne” pofragmentowane.
Javier,
1
Domyślnie OpenVPN ustawia MTU urządzenia tun na 1500 (czyli tyle samo, co MTU na urządzeniach Ethernet na naszych komputerach). Nadal nie jestem pewien, czy fragmentacja pakietów VPN jest dobra czy zła. Odpowiedzi w tym wątku wydają się sugerować, że są złe, podczas gdy inne odniesienia, które znalazłem w sieci, sugerują, że są dobre.
iWerner
2
@iwerner: próbowałeś określić rozmiar Mtu za pomocą polecenia ping? Jeśli ICMP nie jest gdzieś wyłączony, możesz użyć następujących poleceń w systemie Windows: ping -f -l 1372 <docelowy adres IP>. Zmniejszaj liczbę, aż się powiedzie. W systemie Linux ping -s 1372 -M do <docelowy adres IP>. Do Twojej wiadomości, OpenVPN FAQ zaleca użycie mssfix 1200, ale to nie rozwiązuje głównej przyczyny. Korzystanie z rozwiązań VPN w celu fragmentacji zawsze może mieć negatywny wpływ na wydajność. Jeśli masz dużą konfigurację VPN, nie będziesz w stanie używać fragmentacji na centralnym końcu koncentratora, tylko na zdalnym biurze.
Greg Askew
2

Z ciekawości próbowałeś obniżyć MTU interfejsu sieciowego? Być może łącze satelitarne źle psuje fragmentację. Jako sprzeczną z intuicją notatkę, możesz spróbować openvpn przez TCP dla zmiany. Wiem, że powinno to zmniejszyć wydajność, ale jeśli nie masz kontroli nad fragmentacją wzdłuż linii, może ci to pomóc.

lorenzog
źródło
Chciałem zasugerować coś wręcz przeciwnego :) - ten przypadek dużego opóźnienia jest tym, w którym pojawiają się problemy TCP-w-TCP, a UDP tego uniknie.
pjc50,
Zakładałem, że używa domyślnego portu UDP dla openvpn, i dlatego zasugerowałem coś przeciwnego ... tak, normalnie zgodziłbym się z tobą. Ale hej, wszyscy wiemy, że sysadmin jest metodą prób i błędów i zwykle „próbuje zrobić coś przeciwnego, zobaczyć, jeśli to działa” :)
lorenzog,
Dzięki. W tej chwili używamy UDP, a próba TCP nigdy mi się nie zdarzyła. (Gdybym miał więcej przedstawicieli, głosowałbym za tobą)
iWerner,
@ iWerner: dzięki :) spróbuj też stopniowo zmniejszać MTU w iface i zobacz, kiedy się zatrzyma (jeśli tak się stanie).
lorenzog,
2

Kiedy używasz TCP, zwiększ rozmiar okna TCP; pomoże to w „liczbie pakietów w powietrzu”.

Minęło trochę czasu, odkąd musiałem grać z tymi rzeczami, ale oto jeden link znaleziony dla mnie w Google.

Po ponownym przeczytaniu twojego pytania widzę, że korzystasz z BGAN - rzuciłbym na to okiem (lub po prostu google: „spoofing BGAN”).

Jeśli chodzi o pomiar przepustowości, iperf jest całkiem przyzwoity, o ile używasz rozsądnych rozmiarów pakietów.

Wir
źródło
To interesujące - wspomina, że ​​akcelerator TCP jest dostępny dla Redhat, podczas gdy ludzie z inmarsat, z którymi rozmawialiśmy, powiedzieli, że jest on dostępny tylko dla Windows i OS X (i tak rzeczywiście mówi strona internetowa Inmarsat / BGAN)
iWerner
Teraz mogą go nie mieć; Widzę, że data dokumentu to 07. Jeśli wystarczająco mocno naciskasz i rozmawiasz z wystarczającą liczbą ludzi; możesz znaleźć kogoś ze starą jego kopią. Zasadniczo, gdy dzwonisz, otrzymujesz wsparcie pierwszego poziomu. Spróbuję kilku moich kontaktów, ale bez gwarancji.
Eddy,
Uciekłem od naszego dostawcy satelity; ciężko znaleźć kogoś, kto wie o czym mówią. Będę próbował, w międzyczasie jest coś do wypróbowania: sourceforge.net/projects/pepsal Z opisu projektu robi to, co robi oprogramowanie Inmarsat: PEPsal jest zintegrowanym, wielowarstwowym, przezroczystym TCP Serwer proxy zwiększający wydajność, który dzieli połączenie na dwie części, wykorzystując ulepszenia Linux Linux TCP podczas wysyłania danych i znacznie poprawiając wydajność w łączach o różnych charakterystykach
Eddy,
2

Myślę, że szczekasz na niewłaściwe drzewo. Za każdym razem, gdy miałem złe problemy z MTU, ruch zatrzymał się znacznie przed 192 KB. Myślę, że jest bardziej związany z niektórymi w oknie „w pakietach lotniczych”, albo w oknie TCP, a może w niektórych buforach w samym łączu nadawczym satelity.

Na pewno zrobić kilka przechwytuje długo pakietu (zarówno „wewnątrz” i „na zewnątrz” z VPN) i sprawdzić, czy dostajesz wszystkie ACK„s

Javier
źródło