सुरंग बंद है, पर मशीन अब भी ऐसे व्यवहार करती है जैसे वह चालू हो: एक लुकअप टाइमआउट होने तक लटका रहता है, और एक रूट ऐसे इंटरफ़ेस की ओर इशारा करता है जो अब मौजूद नहीं है। यह उस openconnect प्रक्रिया की पहचान है जो अपने डिस्कनेक्ट हेल्पर को चलाए बिना मर गई। इसने जो नेटवर्क स्थिति बनाई वह अब भी स्थापित है, और सिस्टम में कुछ और नहीं जानता कि उसे कैसे हटाना है।

मशीन पर उसी क्रम में चलें जिसमें स्थिति बनी थी: प्रक्रिया, लिंक, रूट, रिज़ॉल्वर। हर कदम बताता है कि क्लाइंट सचमुच चला गया या केवल आपके टर्मिनल से अलग हुआ, और यही अंतर तय करता है कि आप कुछ ठीक करें भी या नहीं।

प्रक्रिया से शुरू करें, कॉन्फ़िगरेशन से नहीं

टर्मिनल खोलें और रूट को छूने से पहले पूछें कि अब भी क्या चल रहा है। pgrep -a openconnect हर इंस्टेंस को उसके आर्ग्युमेंट के साथ सूचीबद्ध करता है, जो pid फ़ाइल और उसे दिया गया स्क्रिप्ट दिखाता है। जिस प्रक्रिया की आपने अपेक्षा नहीं की थी वह फ़ैंटम सुरंग को किसी भी लॉग से तेज़ समझाती है।

अगर कुछ नहीं चल रहा, तो लिंक देखें। ip link show tun0 बताता है कि इंटरफ़ेस बचा है या नहीं, और ip route show dev tun0 अब भी उससे जुड़े रूट सूचीबद्ध करता है। फिर रिज़ॉल्वर इससे जाँचें resolvectl status। उन्हें बदलने से पहले तीनों आउटपुट लिख लें, क्योंकि वही रिकॉर्ड बाद में पुरानी प्रविष्टि को नई से अलग करने का तरीका है।

जो इंटरफ़ेस चला जाता है वह आमतौर पर अपने रूट साथ ले जाता है। जो रूट लिंक के बाद भी टिकते हैं उनका आम मतलब है कि प्रक्रिया अब भी जीवित है या दूसरा क्लाइंट डिवाइस का मालिक है।

हेल्पर स्क्रिप्ट ही बदलावों को वापस लौटाती है

openconnect खुद इंटरफ़ेस, रूट या रिज़ॉल्वर प्रविष्टियाँ नहीं हटाता। यह एक बाहरी हेल्पर को बुलाता है, /etc/vpnc/vpnc-script एक upstream बिल्ड में और /usr/share/vpnc-scripts/vpnc-script Debian और Ubuntu पैकेजों में, और चुना जाता है -s से। जो स्क्रिप्ट सुरंग खड़ी करती है वही उसे तोड़ती है।

अगर प्रक्रिया उस हेल्पर को बुलाए बिना बाहर निकलती है, तो स्थिति बनी रहती है। OpenConnect मैनुअल स्पष्ट कहता है कि स्क्रिप्ट के बिना रूटिंग और नाम सेवा ठीक से काम नहीं करेंगी, और हेल्पर को उस घटक के रूप में बताता है जो बाहर निकलते समय इंटरफ़ेस की स्थिति तोड़ता है। इसीलिए जब आप क्लाइंट को -s के साथ शुरू करते हैं तब पथ मायने रखता है।

कौन-सा सिग्नल उस पथ तक पहुँचता है यह संस्करणों के बीच बदला है। 7.06 मैनुअल SIGTERM को तत्काल निकास मानता है जो स्क्रिप्ट को छोड़ देता है। मौजूदा बिल्ड INT और TERM को स्वच्छ रोक के रूप में दस्तावेज़ित करते हैं, जहाँ सत्र लॉगआउट होता है और हेल्पर चलता है। जो बाइनरी वास्तव में आपके पास है उसका SIGNALS अनुभाग पढ़ें, दोनों में से कोई व्यवहार मान लेने के बजाय।

man openconnect | sed -n '/^SIGNALS/,/^LIMITATIONS/p'

वह सिग्नल भेजें जिसे आपका बिल्ड दस्तावेज़ित करता है

सिग्नल जानने के बाद प्रक्रिया को पैटर्न से नहीं, pid से रोकें।

pgrep -a openconnect
sudo kill -INT "$(cat /var/run/openconnect.pid)"

फिर एग्ज़िट स्टेटस पर भरोसा करने के बजाय पहले भाग की तीन जाँचें दोहराएँ। ip link show tun0 विफल होना चाहिए, ip route show dev tun0 कुछ नहीं छापना चाहिए, और resolvectl status अब VPN लिंक सूचीबद्ध नहीं करना चाहिए।

SIGHUP स्टॉप बटन नहीं है: यह डिस्कनेक्ट करता है, स्क्रिप्ट चलाता है और सत्र को इस विकल्प के साथ फिर से शुरू करने योग्य छोड़ता है: --cookie। SIGUSR2 तत्काल पुनः कनेक्शन पर बाध्य करता है। SIGKILL सफ़ाई पूरी तरह छोड़ देता है, और यह ठीक वही स्थिति है जिस पर यह लेख है।

resolv.conf बदले बिना रिज़ॉल्वर ठीक करें

अधिकांश Ubuntu सिस्टम पर /etc/resolv.conf systemd-resolved की सिम्बॉलिक लिंक है, ऐसी फ़ाइल नहीं जिसे आपको संपादित करना चाहिए। इसे बदलने से हर नेटवर्क के लिए नाम रिज़ॉल्यूशन टूटता है, सिर्फ़ VPN के लिए नहीं। इसके बजाय सुरंग का पंजीकरण हटाएँ:

resolvectl revert tun0
resolvectl query example.com

अगर सिस्टम systemd-resolved के बजाय resolvconf इस्तेमाल करता है, तो प्रति-इंटरफ़ेस रिकॉर्ड तब तक रहता है जब तक उसे लिंक छोड़ने को न कहा जाए, और resolvconf -d tun0 समकक्ष क्रिया है। कमांड चुनने से पहले जाँचें कि कौन-सा रिज़ॉल्वर इस्तेमाल हो रहा है।

मृत लिंक के पीछे के सर्वर की ओर अब भी लक्षित लुकअप टाइमआउट होने तक लटका रहता है, और वह देरी बचे हुए रूट की बजाय टूटे DNS सर्वर जैसी लगती है।

अगला डिस्कनेक्ट उबाऊ बनाएँ

स्टार्टअप और शटडाउन में pid फ़ाइल का पथ एक जैसा रखें, हर बार --pid-file देकर, या openconnect को unit के अंतर्गत चलाएँ जिसका KillSignal आपके संस्करण द्वारा दस्तावेज़ित सिग्नल से मेल खाता है। पहले फ़ोरग्राउंड में परखने से हेल्पर के छापे शटडाउन संदेश दिखते हैं।

कनेक्ट करें, डिस्कनेक्ट करें और तीन जाँचें एक बार चलाएँ। स्वच्छ निकास कोई VPN लिंक, VPN रूट या VPN रिज़ॉल्वर प्रविष्टि नहीं छोड़ता। अगर तीन में से एक बचा रहता है, तो अब आप जानते हैं कि कौन-सा घटक सफ़ाई में विफल रहा। तब अगली जाँच लटके हुए लुकअप से नहीं, उसी उत्तर से शुरू होती है।

संबंधित लेख