फॉलो-अप: ऐसा लगता है कि प्रत्येक सर्वर को चलाने के कुछ महीनों के दौरान होने वाले डिस्कनेक्ट की तीव्र श्रृंखला संभवतः संयोग है और वास्तविक समस्या को प्रकट करने के लिए बस सेवा की जाती है। AliveInterval मान (कैस्परर्ड के उत्तर) के कारण इसे पुन: कनेक्ट करने में विफल होने का कारण लगभग निश्चित रूप से है। ExitOnForwardFailure विकल्प का उपयोग करने से पुन: कनेक्ट होने से पहले टाइमआउट ठीक से होने देना चाहिए, जिससे अधिकांश मामलों में समस्या का समाधान होना चाहिए। मदहैटर का सुझाव (किल स्क्रिप्ट) संभवतः यह सुनिश्चित करने का सबसे अच्छा तरीका है कि सुरंग बाकी सब विफल होने पर भी पुन: कनेक्ट कर सकती है।
मेरे पास फ़ायरवॉल के पीछे एक सर्वर (ए) है जो एक छोटे से DigitalOcean VPS (B) के लिए कई बंदरगाहों पर एक रिवर्स सुरंग की शुरुआत करता है ताकि मैं B के IP पते से A से जुड़ सकूं। सुरंग लगभग 3 महीने से लगातार काम कर रही है, लेकिन पिछले 24 घंटों में अचानक चार बार विफल रही है। एक ही बात एक और VPS प्रदाता पर कुछ समय पहले हुई थी - सही संचालन के महीने, फिर अचानक कई तीव्र विफलताएं।
मेरे पास मशीन ए पर एक स्क्रिप्ट है जो स्वचालित रूप से सुरंग कमांड को निष्पादित करती है ( ssh -R *:X:localhost:X address_of_B
प्रत्येक पोर्ट एक्स के लिए) लेकिन जब यह निष्पादित होता है, तो यह कहता है Warning: remote port forwarding failed for listen port X
।
/var/log/secure
सर्वर पर sshd में जाना इन त्रुटियों को दर्शाता है:
bind: Address already in use
error: bind: Address already in use
error: channel_setup_fwd_listener: cannot listen to port: X
हल करने के लिए वीपीएस को रिबूट करने की आवश्यकता होती है। तब तक, "रिमोट पोर्ट फ़ॉरवर्डिंग विफल" संदेश देने के लिए पुन: कनेक्ट करने के सभी प्रयास और काम नहीं करेंगे। यह अब उस बिंदु पर है जहां सुरंग केवल रोकने से पहले लगभग 4 घंटे तक चलती है।
VPS पर कुछ भी नहीं बदला है, और यह एक एकल-उपयोग, एकल उपयोगकर्ता मशीन है जो केवल रिवर्स सुरंग समापन बिंदु के रूप में कार्य करता है। यह CentOS 6.5 पर OpenSSH_5.3p1 चल रहा है। ऐसा लगता है कि कनेक्शन खो जाने पर sshd पोर्ट को बंद नहीं कर रहा है। मुझे यह समझाने के लिए नुकसान हो रहा है कि लगभग सही संचालन के महीनों के बाद अब ऐसा क्यों या क्यों होता है।
स्पष्ट करने के लिए, मुझे पहले यह पता लगाने की आवश्यकता है कि सुरंग विफल होने के बाद बंदरगाहों पर सुनने से इनकार क्यों करता है, जो लगता है कि एसडीएस बंदरगाहों को खुला छोड़ने और उन्हें बंद नहीं करने के कारण होता है। यह मुख्य समस्या लगती है। मुझे यकीन नहीं है कि व्यवहार के महीनों के बाद इस तरह से व्यवहार करने का क्या कारण होगा क्योंकि मुझे उम्मीद है (यानी बंदरगाहों को तुरंत बंद कर देना और स्क्रिप्ट को फिर से जोड़ने की अनुमति देना)।