Mamy dziesiątki urządzeń wbudowanych zainstalowanych u klientów, wszyscy dzwonią do domu do naszej usługi OpenVPN. To ogólnie działa dobrze, ale kilku naszych klientów ma poważne problemy z MTU ścieżki. Nasz wpływ na klientów w zakresie naprawy ich sieci jest ograniczony, dlatego potrzebujemy OpenVPN, aby sobie z tym poradzić. Krótko mówiąc, moje pytanie brzmi:
Jak mogę ograniczyć MTU niskich ścieżek niektórych klientów dla poszczególnych klientów, to znaczy bez używania ustawień globalnych uwzględniających najgorszy przypadek dla wszystkich klientów
Zauważ, że nasz najgorszy przypadek jest całkiem zły: ścieżka MTU 576, usuwa wszystkie fragmenty, nie fragmentuje się sama, nie honoruje bitów DF. Widzisz, dlaczego wolałbym nie rozwiązywać tego problemu na całym świecie.
Strona OpenVPN oferuje szereg opcji związanych z MTU, w szczególności --link-mtu, --tun-mtu, --fragment and --mssfix
. Ale to też mówi
--link-mtu [...] Najlepiej nie ustawiać tego parametru, chyba że wiesz, co robisz.
--tun-mtu [...] Najlepiej jest użyć opcji --fragment i / lub --mssfix, aby poradzić sobie z problemami z rozmiarami MTU.
Więc zacząłem eksperymentować z --fragment
i --mssfix
ale wkrótce musiał zdać sobie sprawę, że przynajmniej dawny należy ustawić nie tylko po stronie klienta, ale także po stronie serwera . Potem przejrzałem konfigurację po stronie serwera dla klienta za pośrednictwem, --client-config-dir
ale mówi
W kontekście specyficznym dla klienta dozwolone są następujące opcje: --push, --push-reset, --iroute, --ifconfig-push i --config.
Brak wzmianki o opcjach MTU!
Oto moje bardziej szczegółowe pytania:
- Dlaczego dokładnie
link-mtu
itun-mtu
odradzamy? Jakie są potencjalne problemy z tymi opcjami? Zauważ, że czuję się całkiem dobrze z niskim poziomem mungowania nagłówka IP. - Które z opcji
link-mtu tun-mtu fragment mssfix
muszą być dublowane po stronie serwera, aby działały? - W której z opcji
link-mtu tun-mtu fragment mssfix
można użyćclient-config-dir
? - W przypadku, gdy wszystkie cztery opcje muszą być dublowane po stronie serwera i nie można ich użyć wewnątrz
client-config-dir
: Czy istnieją jakieś alternatywy dla walki z niską ścieżką MTU na klienta?
Uwagi:
- Części moich pytań już został poproszony 5 lat temu tutaj , Ale naprawdę nie odpowiedziano wtedy, dlatego ośmielam się je powielać.
- Serwer OpenVPN ma obecnie wersję 2.2.1 na Ubuntu 12.04. Przygotowujemy aktualizację do wersji 2.3.2 na Ubuntu 14.04
- Klienci OpenVPN to 2.2.1 na Debianie 7.6
- Z przyjemnością określam ręcznie MTU ścieżki klienta
- Obecnie nie możemy przetestować dużo po stronie serwera. Ale budujemy kompletne oddzielne łóżko testowe, które powinno być wkrótce gotowe.
Jestem wdzięczny za wszelkie pomocne porady.
źródło
iptables
reguły, aby zmniejszyć MSS na wszystkich pakietach SYN do lub z tego adresu IP klienta.Odpowiedzi:
Rozwiązałem problem po stronie klienta, dodając opcję
mssfix 1300
do pliku konfiguracyjnego.Ze strony man openvpn:
Oryginalny pomysł na moje rozwiązanie przyszedł od personalvpn.org
źródło
mssfix
można ustawić tylko po stronie klienta? Cóż, to przynajmniej coś. Nie pomaga to jednak w pakietach UDP (dlatego interesowały mnie inne opcje, ale przynajmniej zalecanefragment
muszą być ustawione również po stronie serwera)Biorąc pod uwagę brak odpowiedzi, publikuję teraz rozwiązanie, które nie jest zbyt eleganckie, ale proste: Uruchom inną instancję OpenVPN na TCP dla „złych klientów”
i obniż TCP MSS na kliencie, np
Zaletą tego rozwiązania jest to, że każdy klient może ustawić swój indywidualny MSS.
Jest to wprawdzie TCP-over-TCP, ale powinno to działać wystarczająco dobrze w wielu scenariuszach .
Pamiętaj, że nadal jestem bardzo zainteresowanym rozwiązaniami, które nie wymagają
proto tcp
, i zaznaczę je jako prawidłową odpowiedź, jeśli mniej więcej spełniają moje określone wymagania.źródło