Dalsze działania: wygląda na to, że szybka seria rozłączeń zbiegająca się z kilkumiesięcznym uruchomieniem każdego serwera jest prawdopodobnie przypadkowa i służy jedynie ujawnieniu faktycznego problemu. Powodem, dla którego nie udało się ponownie połączyć, jest prawie na pewno wartość AliveInterval (odpowiedź kasperda). Użycie opcji ExitOnForwardFailure powinno pozwolić na prawidłowe przekroczenie limitu czasu przed ponownym połączeniem, co w większości przypadków powinno rozwiązać problem. Sugestia MadHattera (skrypt zabicia) jest prawdopodobnie najlepszym sposobem, aby upewnić się, że tunel może się ponownie połączyć, nawet jeśli wszystko inne zawiedzie.
Mam serwer (A) za zaporą ogniową, który inicjuje tunel zwrotny na kilku portach do małego DigitalOcean VPS (B), dzięki czemu mogę połączyć się z A za pośrednictwem adresu IP B. Tunel działał konsekwentnie przez około 3 miesiące, ale nagle zawiódł cztery razy w ciągu ostatnich 24 godzin. To samo zdarzyło się jakiś czas temu u innego dostawcy VPS - miesiące doskonałej pracy, a potem nagle wiele szybkich awarii.
Mam skrypt na komputerze A, który automatycznie wykonuje polecenie tunelowania ( ssh -R *:X:localhost:X address_of_B
dla każdego portu X), ale gdy się wykonuje, mówi Warning: remote port forwarding failed for listen port X
.
Przechodzenie do sshd /var/log/secure
na serwerze pokazuje następujące błędy:
bind: Address already in use
error: bind: Address already in use
error: channel_setup_fwd_listener: cannot listen to port: X
Rozwiązanie wymaga ponownego uruchomienia VPS. Do tego czasu wszystkie próby ponownego połączenia powodują wyświetlenie komunikatu „nieudane przekierowanie portu” i nie będą działać. Teraz jest tak, że tunel trwa tylko około 4 godzin przed zatrzymaniem.
Nic się nie zmieniło na VPS, a jest to maszyna do jednorazowego użytku dla jednego użytkownika, która służy tylko jako punkt końcowy tunelu zwrotnego. Działa z OpenSSH_5.3p1 na CentOS 6.5. Wygląda na to, że sshd nie zamyka portów na swoim końcu, gdy połączenie zostanie zerwane. Nie potrafię wyjaśnić, dlaczego lub dlaczego tak się stanie nagle po miesiącach prawie idealnej pracy.
Aby to wyjaśnić, najpierw muszę dowiedzieć się, dlaczego sshd odmawia nasłuchiwania portów po awarii tunelu, co wydaje się być spowodowane tym, że sshd pozostawia porty otwarte i nigdy ich nie zamyka. To wydaje się być głównym problemem. Po prostu nie jestem pewien, co spowodowałoby, że zachowałby się w ten sposób po miesiącach zachowań zgodnych z oczekiwaniami (tj. Natychmiastowym zamknięciu portów i umożliwieniu skryptu ponownego połączenia).