Sesja SSH przez OpenVPN odcina / blokuje się po kilku liniach

12

Mam dużą liczbę identycznych bez wentylatorów komputerów z systemem Debian 6 (ARM). Większość z nich jest połączona za pośrednictwem Comcast i działa dobrze. Niektóre są podłączone do modemów „WiMax” i mają problemy z komunikacją.

W szczególności: jeśli ssh do jednego z nich i wypróbuję polecenie takie jak „ps -ax”, dostanę około 3 wierszy z powrotem, a następnie sesja zostanie zablokowana. Jeśli pozwolę temu usiąść, ostatecznie zakończy się „sesją zamkniętą przez peera”.

Co próbowałem:

  • ssh -vvv → brak komunikatów o błędach
  • ssh <user@host> 'command'→ czasami zwróci to pełny wynik polecenia. Czasami w ogóle się nie łączy.

Sugestie dotyczące innych rzeczy do wypróbowania?

Przekonałem się, że mogę z powodzeniem wykonywać niektóre polecenia: np. Kilkakrotne naciśnięcie klawisza return jest w porządku. cd ~a następnie lfdziała tak jak działa df -h. Mogę uruchomić dfwiele razy z powodzeniem, ale gdy tylko spróbuję czegoś z większą mocą wyjściową (np. ls /etc), Blokuje się.

Czy to ma znaczenie, że próbuję komunikować się między tymi dwoma hostami za pomocą OpenVPN?

etrbunny
źródło
Upewnij się, że MTU ścieżki nie jest niższe niż skonfigurowany MTU interfejsu. SSH nie ulega fragmentacji, więc przy ustawionym bicie DF pakiety są odrzucane. Przeczytaj to, aby uzyskać bardziej szczegółowe wyjaśnienie.
Aaron Copley,
1
Próbowałem ustawić MTU na wszystkich interfejsach do 1400 bez widocznego efektu. Testowane, z ping -c 1 -s $((5000-28)) -M do machine-ipktórym zwróciło 1500 - tak samo jak maszyna
ethrbunny
1
tracepath -n <ip>potwierdza to: 1500 jest dozwolone przez całą drogę.
ethrbunny,
1
Wybacz mi moją ignorancję, ale jak -Tpomaga w tym przypadku?
Aaron Copley,
2
<Czyta drugi akapit> To problem MTU. <Czytaj dalej> Tak, problem z MTU. Zobacz ten wątek, aby uzyskać wyjaśnienie. Nie głosuję na zamknięcie jako duplikat, ponieważ jest jeden punkt, w którym drugi wątek nie dyskutuje: co musisz zmienić w konfiguracji VPN, aby rozwiązać problem.
Gilles 'SO - przestań być zły'

Odpowiedzi:

11

Masz objawy MTU problemu: niektóre połączenia TCP zamrażać, mniej lub bardziej powtarzalny dla danej komendy lub URL, ale bez łatwo dostrzegalnego ogólnego wzoru. Charakterystycznym objawem jest to, że interaktywne sesje ssh działają dobrze, o ile nie uruchamiasz poleceń o dużej wydajności. Aby uzyskać wyjaśnienie, zobacz Nie mogę uzyskać dostępu do wybranych witryn https w systemie Linux za pośrednictwem PPPoE .

OpenVPN ma kilka opcji związanych z MTU - wyszukaj „mtu” w instrukcji. Nie mam wystarczającego doświadczenia, aby mieć pewność, którą opcję należy zmienić. (Możliwe jest nawet, że możesz coś zmienić w konfiguracji modemu Wimax.) Najbardziej prawdopodobną opcją jest mssfix: spróbuj obniżyć wartość, aż problem zostanie rozwiązany. Domyślna wartość to 1450; coś w rodzaju około 1400 może rozwiązać twój problem. Spróbuj openvpn --fragment 1200 -mssfix; jeśli to pomaga, zwiększaj wartość, aż zacznie się łamać.

Gilles „SO- przestań być zły”
źródło
Zaczynam od ustawienia mssfix 1200na serwerze i restartowania. Na razie w porządku. Jeśli to zadziała, zwiększę go do 1300 lub 1400 i zobaczę, co się stanie. Jednak zbyt wielu klientów zmienia wszystkie zdalne konfiguracje, więc strona serwera będzie musiała to zrobić.
ethrbunny
I wiedział, że to MTU!
Aaron Copley
3

Odpowiedź Gillesa jest całkowicie poprawna, ale jest też inna potencjalna przyczyna.

W wersji 2.3.0 OpenVPN wystąpił błąd, który odłączał klientów podczas wysyłania dużych porcji danych: https://community.openvpn.net/openvpn/ticket/263

Ten problem występował tylko podczas korzystania z protokołu TCP. UDP pozostało całkowicie nienaruszone.

Patrick
źródło
3

Mieliśmy ten sam problem i rzeczywiście był to problem MTU. Jednak dla nas problem nie polegał na konfiguracji openVPN, ale na interfejsie tun0.

Jak to rozwiązaliśmy: najpierw znajdź maksymalny rozmiar pakietu, przez który przeszedł

ping <host> -s 1500 -M do

i zmniejszanie wartości 1500, aż wartość przechodziła (dla nas 1350).

Po znalezieniu właściwej wartości zmień interfejs tun0 za pomocą

sudo ip link set dev tun0 mtu 1350

jak zaproponował tutaj Sebastian . Po tym VPN działał płynnie.

Eino Gourdin
źródło