Mam niepewne połączenie sieciowe między dwoma komputerami: czasami aktywne połączenia TCP są przerywane z przyczyn niezależnych ode mnie. Chcę ustanowić niezawodne połączenie TCP między dwoma komputerami.
Gdyby sieć była niezawodna, po prostu uruchomiłbym ssh -L 1234:localhost:1234 remotehost
serwer z nasłuchiwaniem na porcie 1234 remotehost
i wskazał klientowi localhost:1234
. Ale jeśli połączenie ssh umrze, tak samo będzie z połączeniem przekazywanym. Jak mogę ustawić automatyczne przywracanie połączenia między klientem a serwerem?
Brak rozwiązań:
- Nie dotyczy to aplikacji interaktywnych, więc ekran nie ma zastosowania.
- Tu nie chodzi tylko o automatyczne ponowne podłączanie tunelu SSH la autossh . Chcę nadal używać tego samego tunelowanego połączenia TCP, a nie uruchamiać nowego.
- Zasadniczo VPN załatwi sprawę. Ale wydaje się przesada, gdy chcę tylko jedno połączenie TCP i chciałbym rozwiązania, które działa, nawet jeśli nie mam uprawnień roota po obu stronach.
Mam słabą pamięć programu, rocks
który to właśnie zrobił, ale wydaje się, że spadł z powierzchni sieci. Najbardziej interesuje mnie Linux po obu stronach (choć spodziewałbym się, że program na tym poziomie będzie przenośny dla innych unikatów), ale jeśli znasz program, który działa między QNX i VMS, tym lepiej.
scp
. Odpowiadałem w / ssh keepalives na podstawie twojego przykładu przekierowania portów. Re: flaky downstream hop, niewiele możesz zrobić, oprócz stworzenia sesji ssh z keepalives, które są bardziej tolerancyjne (tj. Pozwalają na więcej upuszczonych keepalives zServerAliveInterval > 0
iServerAliveCountMax > 3
). NAT wymaga niższych odstępów czasu podtrzymania. Kluczową kwestią jest określenie, na czym polega problem i odpowiednie dostosowanie. Ustaw opcje,.ssh/config
aby były zawsze dostępnerocks
implementację ... chociaż jest to oczywiście prawdziwa kludgeOdpowiedzi:
Czy stary to nieobsługiwane Niezawodne Gniazda ( Skały ), czego szukasz?
źródło
Jedyny standardowy protokół, jaki znam z tą funkcją, to MPTCP . Jest przezroczysty dla warstwy aplikacji, więc SSH na MPTCP powinien po prostu działać. Może uruchamiać podstawowe połączenia TCP na różnych ścieżkach z różnymi adresami IP, więc w zasadzie można go użyć do migracji połączenia SSH do i z połączenia VPN, w zależności od tego, czy połączenie VPN jest aktywne.
Nie wiem wiele o dojrzałości implementacji MPTCP, ale konstrukcja protokołu wygląda dość solidnie.
Powinien chronić połączenia SSH przed zgubieniem z powodu niestabilnej łączności sieciowej. Nie ochroni cię przed mitmem, który chce zerwać połączenie SSH. Mitm może nadal wstrzykiwać uszkodzone dane, które SSH wykryje i przerwie połączenie.
Metoda przypominająca MPTCP wbudowana w protokół SSH byłaby metodą, którą mogłem sobie wyobrazić, utrzymując połączenie przez jak najdłuższy czas. Ale nie sądzę, że taka funkcja została zaprojektowana dla protokołu SSH.
źródło
Możesz użyć,
daemontools
aby utrzymać port ssh do przodu; nie musi utrzymywać programów w zależności od połączenia, gdy jest ono wyłączone (jak przypuszczalnie, gdy ssh się rozłączy, port lokalny zacznie odmawiać ich połączeń), ale to początek.Podejrzewam, że są pewne
iptables
sztuczki, jak na przykład spowodowanie, że ten port do pakietów DROP, jak tylko ssh przesunie się do przodu, więc łączące się programy wiedzą, że pakiety znikają, a nie są odrzucane. Właśnie się uczędaemontools
(ponownie), więc nie jestem pewien, czy możesz uruchomić niestandardowy skrypt po śmierci usługi, ale podejrzewam, że możesz.źródło
TCP robi to automatycznie. Musisz tylko wyłączyć lub osłabić typowe praktyczne hacki do czyszczenia używane do zabijania konających połączeń TCP. Wyłącz utrzymywanie połączenia TCP dla swojego połączenia i znacznie zwiększ limit nadmiernych retransmisji. Na przykład w systemie Linux napisz dużą liczbę do
/proc/sys/net/ipv4/tcp_retries2
.Jednak w nowoczesnej sieci zapora stanowa do inspekcji pakietów prawdopodobnie zapomni o połączeniu TCP, które nie wymienia regularnie pakietów, więc może padać na twoją paradę.
źródło
reasons beyond my control
, które czytam jako dynamiczne IP lub stanowe skrzynki pośrednie. W takich scenariuszach utrzymywanie aktywności TCP może trochę pomóc. Ale bez względu na to, jak skonfigurujesz utrzymywanie aktywności protokołu TCP, połączenie nie będzie wystarczające, gdy stan skrzynki pośredniej zostanie utracony z powodu ponownego uruchomienia.