ప్రతి ప్రొఫైల్కు ప్రత్యేక తనిఖీలతో అనేక 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ఆపిన ప్రొఫైల్ మాత్రమే తిరిగి కనెక్ట్ కావాలి, మిగతా సెషన్లు వాటి ప్రక్రియలు మరియు మార్గాలు రెండింటినీ ఉంచుకోవాలి. రెండు ప్రొఫైల్లు తిరిగి ప్రారంభమైతే, మీ గొలుసు మీరు ఊహించని చోట సమాంతరంగా నడుస్తోంది.
కాపలాదారు చేయకూడని పని
ఏదైనా విఫలమైన ప్రతిసారీ అన్నింటినీ తిరిగి ప్రారంభించే కాపలాదారు పరీక్షలో ఆరోగ్యకరంగా కనిపిస్తాడు మరియు నిర్వహణ విండోలో అంతరాయం కలిగిస్తాడు. ప్రొఫైల్ ప్రకారం తిరిగి ప్రారంభించండి, ఎప్పుడూ ప్రపంచవ్యాప్తంగా కాదు.
అదే ప్రోటోకాల్ కోసం గేట్వే నిర్వహించబడే క్లయింట్ను అందిస్తే దాన్ని ఎంచుకోండి, మరియు స్క్రిప్ట్లో పాస్వర్డ్ను ఎప్పుడూ హార్డ్కోడ్ చేయవద్దు లేదా ఆదేశ పంక్తిలో పంపవద్దు, ఎందుకంటే ప్రొఫైల్ ఫైల్ ఇప్పటికే రహస్యాన్ని కలిగి ఉంది. సొరంగం పైకి వచ్చిన తర్వాత ఏదైనా పని సాధారణ వినియోగదారుగా నడపాల్సి వస్తే, మొత్తం గొలుసును ఆ ఖాతా కింద నడపడానికి బదులు స్క్రిప్ట్ లోపలి నుండే అధికారాలను తగ్గించండి. చివరగా, తిరిగి కనెక్ట్ అయిన తర్వాత మార్గాలను మళ్లీ చదవండి, ఎందుకంటే ప్రొఫైల్ వేరే కేటాయించిన చిరునామాతో తిరిగి వచ్చి, సొరంగ చిరునామా వైపు ఉన్న ఏ తనిఖీ కూడా ఎప్పుడూ గమనించని పాత మార్గాన్ని వదిలివేయవచ్చు.