SSH zawiesza się przez OpenVPN? Najpierw zmierz MTU ścieżki
Echo działa, a potem lista blokuje sesję na zawsze. Zmierz pułap z obu stron, zanim zmienisz mssfix, fragment lub MTU interfejsu.
SSH łączy się, znak zachęty się pojawia, a sesja umiera, gdy tylko polecenie zwróci coś dużego. Echo działa jeszcze chwilę, potem połączenie wygasa, podczas gdy klient nadal pokazuje tunel jako podniesiony. Sesja zdrowa do momentu nadejścia danych zwykle trafia na limit rozmiaru, a nie na defekt SSH. Poniższe kontrole są uporządkowane tak, aby najtańsze wyjaśnienie zostało wykluczone pierwsze.
Przeczytaj kształt awarii, zanim dotkniesz profilu
Małe pakiety przechodzą, pełne nie. Znak zachęty, baner lub jedno naciśnięcie klawisza mieszczą się łatwo; lista katalogu, pobieranie lub wklejony blok nie. Rozmiar, przy którym zachowanie się zmienia, jest wskazówką, a nie faktem, że SSH jest zaangażowanym programem.
Mechanizm jest taki: wykrywanie MTU ścieżki, które zależy od informacji zwrotnej. TCP wybiera rozmiar segmentu, a gdy router na drodze nie może przesłać powstałego pakietu, powinien to zgłosić komunikatem ICMP. Enkapsulacja czyni pakiet zewnętrzny większym od wewnętrznego, więc użyteczny rozmiar wewnątrz tunelu zawsze jest poniżej łącza fizycznego. Odfiltruj te komunikaty ICMP gdziekolwiek, a nadawca nigdy nie dostanie korekty, będzie wysyłał pełne segmenty, a pakiet zewnętrzny zostanie odrzucony bez powiadomienia.
Zmierz pułap z obu stron
Porównaj MTU tunelu z łączem fizycznym, zanim zmienisz którekolwiek z nich. Tunel, który skopiował wartość fizyczną, już powiedział, gdzie leży rozbieżność.
Sprawdź od wewnątrz tunelu żądaniem zakazującym fragmentacji, obniżając ładunek, aż wrócą odpowiedzi. Argument rozmiaru liczy tylko ładunek, więc działająca liczba zawsze jest poniżej MTU interfejsu. Dodaj z powrotem rozmiary nagłówków, jeśli potrzebujesz liczby interfejsu.
ip link show tun0
ping -M do -s 1380 10.9.0.1Powtórz próbę wobec publicznego adresu serwera spoza tunelu. Jeśli duże próby zawodzą także tam, granica leży na drodze do serwera i żadna opcja tunelu jej nie przesunie. To porównanie oszczędza ci strojenia klienta, który nigdy nie był problemem. Zapisz oba wyniki, zanim otworzysz plik konfiguracyjny.
mssfix i fragment robią różne rzeczy
mssfix ogranicza rozmiar segmentu, który połączenia TCP wewnątrz tunelu ogłaszają podczas uścisku dłoni. To właściwa dźwignia dla SSH, HTTPS i kopiowania plików, dlatego zawieszenie często znika, gdy tylko zostanie ustawione. Nie dotyka ładunków UDP w ogóle.
Tunel, który niesie także usługę UDP, może nadal zawodzić po naprawieniu SSH, a ten wynik myli każdego, kto zakłada, że jedna opcja obejmuje wszystko.
fragment to inny mechanizm i inne narzędzie. Dzieli zbyt duże pakiety przed enkapsulacją, dotyczy tylko transportu UDP, dodaje narzut na każdy datagram i jest udokumentowany jako ostatnia deska ratunku przy zepsutym wykrywaniu. Oba ustawienia muszą się zgadzać u partnerów kończących tunel. Gdy jeden koniec ogranicza, a drugi fragmentuje, pojawiają się ostrzeżenia w dzienniku i zachowanie, którego nikt nie przewidzi z plików.
Obniżenie MTU interfejsu to opcja tępa
Zmniejszenie MTU interfejsu po obu stronach to tępe narzędzie. Mówi każdemu wewnętrznemu nadawcy mniejszą liczbę, co działa, i przenosi ten koszt na cały ruch zamiast na strumienie TCP, które go potrzebują.
Wybierz ją, gdy tunel niesie ruch, którego nie możesz ograniczyć, albo gdy klient jest urządzeniem, którego profilu nie kontrolujesz. Stosuj ją symetrycznie i zapisz wartość obok profilu. Połowicznie zastosowana zmiana jest gorsza niż żadna, bo wygląda jak naprawa.
Przetestuj ponownie tym transferem, który się zawiesił
Połącz się ponownie, aby ustawienia się wczytały, otwórz nowe połączenie i powtórz polecenie, które zamarzło. Rozmiar segmentu jest negocjowany przy uścisku dłoni, więc sesja, która przetrwała ponowne połączenie, nadal niesie starą wartość. Ping jest tu słabym testem, bo cała awaria polega na tym, że małe pakiety przechodzą. Użyj listy, pobierania lub wklejania, które się zepsuło.
Jeśli zawieszenie utrzymuje się przy mniejszym rozmiarze, spójrz gdzie indziej: zapora stanowa, która wygasa strumień, zduplikowany adres albo trasa, która przesuwa się przy ponownym połączeniu. Zapisz rozmiar nieudanej próby i zmienione ustawienie, bo właśnie ta para czyni następny raport użytecznym.