प्रत्येक प्रोफाइलको छुट्टै जाँचसहित धेरै vpnc सुरुङ चालु राख्नुहोस्
प्याकेजसँग आउने पुनः जडान स्क्रिप्टले एउटै सुरुङ मान्छ। प्रत्येक vpnc प्रोफाइललाई आफ्नै पोर्ट दिनुहोस्, वास्तविक सेवा जाँच्नुहोस् र जाँचहरूलाई एउटै निश्चित क्रममा जोड्नुहोस्।
एउटा vpnc प्रोफाइल रोमिङपछि सफासँग पुनः जोडिन्छ; तीनवटा पालैपालो एकअर्काको सकेट, रुट र रिजोल्भरको अवस्था तोड्छन्। प्याकेजसँग आउने पुनः जडान स्क्रिप्ट एउटै सुरुङका लागि लेखिएको छ, त्यसैले तीमध्ये कुनै एक तल हुँदा यसले प्रत्येक प्रोफाइल पुनः सुरु गर्छ। यसलाई सुधार्न तीन कुरा चाहिन्छ: छुट्टाछुट्टै स्थानीय पोर्ट, प्रत्येक प्रोफाइलका लागि वास्तविक सेवा परीक्षण गर्ने जाँच, र एउटा क्रमबद्ध शृंखला जसले कहिल्यै दुई जडान एकैसाथ चलाउँदैन।
प्रत्येक प्रोफाइललाई आफ्नै स्थानीय पोर्ट दिनुहोस्
पूर्वनिर्धारित स्थानीय पोर्टमा छोडिएको vpnc प्रोफाइल पहिलेदेखि चलिरहेको प्रोफाइलसँग प्रतिस्पर्धा गर्छ। पहिलोले पोर्ट समातिरहेको बेला दोस्रो जडान असफल हुन्छ, र लगको लाइन स्थानीय द्वन्द्वको सट्टा गेटवे समस्याजस्तो देखिन्छ। यसको सट्टा प्रत्येक प्रोफाइल फाइलका लागि एउटा लाइन राख्नुहोस्:
Local Port 0शून्यले कर्नेललाई क्षणिक पोर्ट छान्न दिन्छ, त्यसैले दुई प्रोफाइल एकैसाथ स्थापना गर्न सकिन्छ। प्रत्येक फाइललाई त्यसले सेवा गर्ने गेटवे र समूहको नाम दिनुहोस्, यसलाई root का लागि मात्र पढ्न मिल्ने राख्नुहोस्, र सधैं साझा पूर्वनिर्धारितको सट्टा मिल्ने प्रोफाइलसँग जोडिनुहोस्। कसैले प्रोफाइलको नाम फेरेपछि स्क्रिप्टले गलत सुरुङ पुनः जोड्ने बाटो नै साझा पूर्वनिर्धारित फाइल हो।
प्रोफाइल फाइलहरूमा प्रमाणहरू हुन्छन्, त्यसैले अनुमतिहरू डिजाइनको भाग हुन्, घरधन्दाको होइन। /etc/vpnc मुनि सबैले पढ्न सक्ने फाइलले समूहको गोप्यता प्रत्येक स्थानीय प्रयोगकर्तालाई दिन्छ। मोड 0600 राख्नुहोस् र मालिक root राख्नुहोस्, र स्क्रिप्टहरूलाई गोप्यता आर्गुमेन्टमा प्रतिलिपि गर्नुको सट्टा फाइल root का रूपमा पढ्न दिनुहोस्। त्यसैले जाँच स्क्रिप्टले कहिल्यै फाइलको सामग्री लगमा लेख्नु हुँदैन।
प्रत्येक प्रोफाइलका लागि एउटा सेवा जाँच्नुहोस्, सुरुङको ठेगाना होइन
सुरुङको आफ्नै ठेगानामा पठाइएको इको अनुरोधले मुख्यतः इन्टरफेस अवस्थित छ भन्ने मात्र प्रमाणित गर्छ। यसले पछाडिको होस्ट अझै सुरुङलाई न्यायोचित ठहराउने अनुप्रयोगसम्म पुग्छ कि भन्ने केही भन्दैन। इन्टरफेस माथि हुन सक्छ जबकि त्यसपछिको रुट पहिले नै गइसकेको हुन्छ।
प्रत्येक प्रोफाइलका लागि एउटा सेवा छोटो TCP समयसीमासँग जाँच्नुहोस् र जाँच असफल भएको प्रोफाइल मात्र पुनः जोड्नुहोस्। दुई सेकेन्डले मृत बाटोलाई ढिलो बाटोबाट अलग गर्छ, र TCP जाँच बाटोमा कतै ICMP अनुमति छ कि छैन भन्नेमा निर्भर गर्दैन। प्रोफाइलहरूबीच केवल लक्ष्य र कन्फिगको नाम बदल्नुहोस्:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiत्यसलाई /usr/local/bin/ensure-vpn-ops.sh का रूपमा सुरक्षित गर्नुहोस्, कार्यान्वयनयोग्य बनाउनुहोस्, र केवल जाँचको लक्ष्य र कन्फिगको नाम बदलेर प्रत्येक प्रोफाइलका लागि दोहोर्याउनुहोस्। प्रोटोकलको प्रश्नको उत्तर दिने जाँच इको फ्याँक्ने तर प्रयोगकर्तालाई महत्त्वपूर्ण सेवाहरू अझै अगाडि पठाउने गेटवेहरूबाट जोगिन्छ।
जाँचहरू कहिल्यै प्रतिस्पर्धा नगर्न शृंखलामा जोड्नुहोस्
प्याकेजसँग आउने पुनः जडान स्क्रिप्टले तपाईंका जाँचहरूलाई क्रममा बोलाउन सक्छ, र क्रम नै पूरा कुरा हो। सँगै चल्ने दुई vpnc-connect कलहरूले राउटिङ तालिका कसैले नियन्त्रण नगर्ने क्रममा पुनः लेख्छन्, र यसरी नै स्वस्थ प्रोफाइलले आफ्नो रुट गुमाउँछ।
कलहरूलाई अगाडि राख्नुहोस्, तल्लो इन्टरफेसका लागि छोटो स्थिरता ढिलाइ थप्नुहोस्, र शृंखलालाई root को cron तालिकाबाट तालिकाबद्ध गर्नुहोस्, किनकि सुरुङका रुटहरू पुनः लेख्न सक्ने root मात्र हो:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shबुट स्क्रिप्ट र cron प्रविष्टिबीच क्रम उस्तै राख्नुहोस्, किनकि बुटको समयमा फरक क्रममा चल्ने शृंखला वास्तवमा अर्को प्रोग्राम हो। जब एउटा प्रोफाइल अर्कोको रुटमा निर्भर हुन्छ, निर्भरता पहिले राख्नुहोस् र अघिल्लो सुरुङ अझै माथि आइरहेको बेला पछिल्लो जाँचलाई हानिरहित रूपमा असफल हुन दिनुहोस्।
लग हेर्नुहोस्, त्यसपछि जानाजान एउटा तोड्नुहोस्
प्रत्येक पटक चलाउँदा एउटा लाइन लग गर्नुहोस् — प्रोफाइल, जाँचको लक्ष्य, नतिजा र गरिएको कदम। त्यसबिना हरेक मिनेट हल्लिने सुरुङ कहिल्यै नखसेको सुरुङजस्तै देखिन्छ, र जाँचको बगलाई गेटवे अवरोधबाट छुट्याउन सकिँदैन। शृंखलाले असफल भएको प्रोफाइललाई मात्र छोयो भन्ने पनि लगले प्रमाणित गर्छ। रिबुटपछि पनि रहने ठाउँमा लेख्नुहोस्, नत्र प्रमाण प्रक्रियासँगै जान्छ।
त्यसपछि जानाजान एउटा सुरुङ तोड्नुहोस् र के हुन्छ हेर्नुहोस्। एउटै प्रोफाइल रोक्नुहोस् र कुन प्रक्रिया र रुट अझै छन् पुष्टि गर्नुहोस्:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logरोकिएको प्रोफाइल मात्र पुनः जोडिनुपर्छ, र अन्य सत्रहरूले आफ्ना प्रक्रिया र रुट दुवै राख्नुपर्छ। यदि दुई प्रोफाइल पुनः सुरु भए, तपाईंको शृंखला कतै समानान्तर चलिरहेको छ जहाँ तपाईंले अपेक्षा गर्नुभएको थिएन।
पहरेदारले के गर्नु हुँदैन
केही असफल हुनासाथ सबै पुनः सुरु गर्ने पहरेदार परीक्षणमा स्वस्थ देखिन्छ र मर्मत विन्डोमा अवरोध निम्त्याउँछ। प्रोफाइल अनुसार पुनः सुरु गर्नुहोस्, कहिल्यै विश्वव्यापी रूपमा होइन।
जब गेटवेले त्यही प्रोटोकलका लागि मर्मत गरिएको क्लाइन्ट दिन्छ त्यसलाई प्राथमिकता दिनुहोस्, र स्क्रिप्टमा पासवर्ड कहिल्यै हार्डकोड नगर्नुहोस् वा कमाण्ड लाइनमा नपठाउनुहोस्, किनकि प्रोफाइल फाइलले पहिले नै गोप्यता राख्छ। सुरुङ माथि आएपछि कुनै काम साधारण प्रयोगकर्ताका रूपमा चलाउनुपर्ने भए, पूरै शृंखला त्यो खातामुनि चलाउनुको सट्टा स्क्रिप्टभित्रैबाट विशेषाधिकार घटाउनुहोस्। अन्तमा, पुनः जोडिएपछि रुटहरू फेरि पढ्नुहोस्, किनकि प्रोफाइल फरक तोकिएको ठेगानासहित फर्केर सुरुङको ठेगानातर्फ लक्षित कुनै पनि जाँचले कहिल्यै नदेख्ने पुरानो रुट छोड्न सक्छ।