Պահեք մի քանի 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Միայն կանգնեցված պրոֆիլը պետք է վերակապակցվի, և մյուս նստաշրջանները պետք է պահեն և՛ իրենց գործընթացները, և՛ իրենց երթուղիները։ Եթե երկու պրոֆիլ վերագործարկվում է, ձեր շղթան զուգահեռ աշխատում է մի տեղ, որտեղ դուք չէիք սպասում։
Ինչ չպետք է անի հսկիչը
Հսկիչը, որը վերագործարկում է ամեն ինչ, երբ ինչ-որ բան ձախողվում է, փորձարկման ժամանակ առողջ է թվում և ընդհատում է առաջացնում սպասարկման պատուհանում։ Վերագործարկեք պրոֆիլով, երբեք գլոբալ։
Նախընտրեք պահպանվող հաճախորդ, երբ դարպասը առաջարկում է մեկը նույն արձանագրության համար, և երբեք գաղտնաբառ չկոդավորեք սկրիպտում և չփոխանցեք այն հրամանի տողում, քանի որ պրոֆիլի ֆայլն արդեն պահում է գաղտնիքը։ Եթե առաջադրանքը պետք է աշխատի որպես սովորական օգտվող, երբ թունելը բարձրացել է, նվազեցրեք արտոնությունները սկրիպտի ներսից՝ ամբողջ շղթան այդ հաշվի տակ աշխատեցնելու փոխարեն։ Վերջում նորից կարդացեք երթուղիները վերակապակցումից հետո, քանի որ պրոֆիլը կարող է վերադառնալ այլ հատկացված հասցեով և թողնել հնացած երթուղի, որը թունելի հասցեին ուղղված ոչ մի ստուգում երբեք չի նկատի։