Klon z biura działa, ten sam klon przez hotspot telefonu działa, a ten sam klon z sieci hotelowej wisi, dopóki nie włączy się VPN. Uścisk ręki SSH kończy się, a sesja milknie przy pierwszym rzeczywistym transferze. Jedna linia dodana do konfiguracji klienta leczy git i ssh razem. Gdy jedno ustawienie klienta naprawia kilka narzędzi naraz, błąd leży w tym, co klient wysyła, a nie w łączu, przez które wysyła.

Czytaj objaw jako różnicę w trasowaniu

Tunel, który leczy problem, rzadko jest naprawą. Zmienia trasę, operatora i urządzenia pośredniczące, podczas gdy laptop nadal wytwarza dokładnie te same pakiety. Jeśli jedna trasa źle traktuje nagłówek, a inna przepuszcza go nietknięty, różnica leży w polityce urządzenia pośredniczącego, nie w kliencie. Tunel jest tu świadkiem, nie rozwiązaniem.

Miejsce, w którym sesja umiera, zawęża to jeszcze bardziej. Nic, co zawodzi przy wyszukiwaniu nazw lub przy wymianie kluczy, tak nie wygląda. Sesja, która się uwierzytelnia, wypisuje baner, a potem zastyga przy pierwszym dużym zapisie, już dowiodła, że trasowanie, nazwy i poświadczenia działają.

Klient stempluje bajt QoS na każdym gnieździe SSH

Każde połączenie OpenSSH od wersji 7.8 wzwyż niesie w nagłówku IP wartość, której routery mogą użyć do priorytetyzacji ruchu. Sesje terminala dostają jedną wartość, a masowe kopie inną, zgodnie z teorią, że człowiek piszący zasługuje na lepsze traktowanie niż transfer pliku. Większość sieci całkowicie ignoruje tę podpowiedź, dlatego przez lata pozostaje niezauważona. Mniejszość sterowników Wi-Fi, operatorów komórkowych i koncentratorów VPN działa na jej podstawie, a niektóre z nich działają źle.

Gdy ta wartość zostanie przepisana lub odrzucona w środku strumienia, połączenie nie zawodzi, tylko przestaje posuwać się naprzód. Retransmisje rosną, okno się załamuje, a aplikacja nic nie zgłasza, bo nic nie zwróciło błędu. Ta cisza jest powodem, dla którego ludzie opisują objaw jako zawieszenie, a nie jako awarię.

Najpierw potwierdź wersję klienta poleceniem ssh -V. Każda wersja od 7.8 wzwyż ma to zachowanie domyślnie.

Trzy polecenia, które oddzielają to od MTU i DNS

Dwie podobne przyczyny warto wykluczyć, zanim edytujesz jakikolwiek plik konfiguracyjny. Awaria MTU przepuszcza małe wymiany i zastyga przy pierwszym dużym pakiecie, podczas gdy awaria nazw nigdy nie tworzy sesji.

ssh -o IPQoS=none -v [email protected]
ssh -G [email protected] | grep -i ipqos
sudo tcpdump -ni any -vv "tcp port 22"

Pierwsze polecenie powtarza nieudaną operację z wyłączonym oznaczeniem, a jego udane wykonanie to najsilniejszy pojedynczy dowód, jaki jest. Drugie wypisuje konfigurację, którą klient naprawdę zastosuje do tego celu, co wychwytuje nieaktualny wpis w pliku, o którym zapomniałeś. Trzecie pokazuje bajt TOS w obu kierunkach, gdy transfer stoi, a ciekawy wzorzec to wartość na zepsutej trasie i brak jej na działającej.

Nagranie zrób na laptopie, a nie na serwerze, bo nadawca ustawia wartość i każdy kierunek może ją zmienić. Porównaj trasę działającą i zawodną tym samym nagraniem, a różnica pojawi się bez zgadywania.

Umieść wyjątek w jednym pliku, jednym hoście naraz

Wyjątek należy umieścić obok hosta, którego dotyczy, z komentarzem mówiącym, dlaczego istnieje.

Host gitlab.example.internal
    IPQoS none
    # direct route rewrites the marking; the tunnel route passes it

Zakres liczy się bardziej niż sama wartość. Wpis z symbolem wieloznacznym wyłącza zachowanie wszędzie, wyrzuca podpowiedź, która pomaga w dobrze zachowujących się sieciach, i nie zostawia nikogo, kto mógłby powiedzieć, kiedy się pojawił. Wpis dla jednego hosta jest czytelny, odwracalny i po naprawie sieci trywialnie łatwy do usunięcia. Użyj pliku użytkownika do osobistego obejścia, a pliku zarządzanego, gdy cała flota potrzebuje tego samego wyjątku.

Wyraźnie powiedz, czego wyjątek nie obejmuje. Dotyczy SSH, więc zdalne repozytorium HTTPS, lustro pakietów i przeglądarka stoją poza nim, a awaria któregokolwiek z nich wymaga własnego dowodu. W łańcuchu przez bastion każde przeskoczenie korzysta z konfiguracji klienta, a przeskoczenie, które się zawiesza, to to, które warto ograniczyć.

Zamknij pętlę z właścicielem sieci

Przekaż znalezisko jako cztery fakty: wersja klienta, przetestowana trasa, używany klient VPN i który kierunek niósł oznaczenie. Te cztery wystarczą właścicielowi sieci, by odtworzyć traktowanie i zdecydować, czy jest zamierzone.

Jeśli wyjątek nie leczy zawieszenia, usuń go. Obejście, które przetrwa nieudany eksperyment, staje się folklorem, a następna osoba spędza godzinę, dowodząc, że nic nie robi. Jeśli leczy zawieszenie, ścieżka nadal jest zła dla każdego innego narzędzia, które ją przecina, a naprawa należy do tego, kto obsługuje urządzenie pośredniczące.

Zmiana u klienta to obejście z datą ważności. Zapisz tę datę w komentarzu.

Powiązane artykuły