Takip: Her sunucuyu birkaç ay çalıştırmakla çakışan hızlı bağlantı kesme dizileri muhtemelen tesadüf eseri gibi görünüyor ve sadece asıl sorunu ortaya çıkarmak için kullanılıyor. Yeniden bağlanamamasının nedeni, kesinlikle AliveInterval değerleri (kasperd'in cevabı). ExitOnForwardFailure seçeneğinin kullanılması, yeniden bağlanmadan önce zaman aşımının uygun şekilde gerçekleşmesine izin vermeli ve bu çoğu durumda sorunu çözmelidir. MadHatter'ın önerisi (kill betiği) muhtemelen her şey başarısız olsa bile tünelin yeniden bağlanabilmesini sağlamak için en iyi yoldur.
Bir güvenlik duvarının arkasında birkaç bağlantı noktasında küçük bir DigitalOcean VPS'ye (B) ters tünel başlatan bir sunucum (A) var, böylece A'nın B'nin IP adresi üzerinden bağlanabiliyorum. Tünel yaklaşık 3 aydır sürekli çalışıyor, ancak son 24 saatte dört kez aniden başarısız oldu. Aynı şey, başka bir VPS sağlayıcısında bir süre önce oldu - aylarca mükemmel çalışma, ardından birden fazla hızlı arıza.
Makine A'da otomatik olarak tünel komutunu çalıştıran bir komut dosyası var ( ssh -R *:X:localhost:X address_of_B
her X bağlantı noktası için), ancak çalıştırıldığında yazıyor Warning: remote port forwarding failed for listen port X
.
/var/log/secure
Sunucudaki sshd'ye girmek şu hataları gösterir:
bind: Address already in use
error: bind: Address already in use
error: channel_setup_fwd_listener: cannot listen to port: X
Çözme VPS'yi yeniden başlatmayı gerektirir. O zamana kadar, yeniden bağlantı kurma girişimleri "uzaktaki bağlantı noktası iletme başarısız oldu" mesajı veriyor ve çalışmaz. Şimdi tünelin durmadan sadece 4 saat önce kaldığı noktaya geldi.
VPS'de hiçbir şey değişmedi ve yalnızca ters tünel bitiş noktası görevi gören tek kullanımlık, tek kullanıcılı bir makine. CentOS 6.5’de OpenSSH_5.3p1’i çalıştırıyor. Görünüşe göre sshd, bağlantı koptuğunda bağlantı noktalarını kapatmıyor gibi görünüyor. Niçin veya neden neredeyse aniden neredeyse mükemmel bir operasyondan sonra gerçekleştiğini açıklamaktan kaçınıyorum.
Açıklığa kavuşturmak için, önce sshd'nin tünel başarısız olduktan sonra portları dinlemeyi reddetmesinin nedenini bulmam gerekiyor, bu sshd'nin portları açık bırakıp asla kapatmamasından kaynaklanıyor gibi görünüyor. Bu asıl sorun gibi görünüyor. Beklediğim gibi davrandıktan sonra aylarca böyle davranmasına neyin neden olacağından emin değilim (yani portları hemen kapatmak ve betiğin yeniden bağlanmasını sağlamak).