Weka tunnel nyingi za vpnc hai kwa uchunguzi wa kila wasifu
Skripti ya kuunganisha upya inayokuja na kifurushi inadhani tunnel moja. Ipe kila wasifu wa vpnc bandari yake, chunguza huduma halisi, na unganisha uchunguzi kwa mpangilio mmoja maalum.
Wasifu mmoja wa vpnc huunganisha upya kwa usafi baada ya kuzunguka; watatu kati yao huvunja soketi, njia na hali ya kitatuzi cha kila mmoja kwa zamu. Skripti ya kuunganisha upya iliyo kwenye kifurushi imeandikwa kwa tunnel moja, kwa hivyo huanzisha upya kila wasifu kila mmoja wao anapokosa. Kurekebisha hilo kunahitaji mambo matatu: bandari za ndani tofauti, uchunguzi unaojaribu huduma halisi kwa kila wasifu, na mnyororo mmoja uliopangwa ambao hauendeshi miunganisho miwili kwa wakati mmoja.
Ipe kila wasifu bandari yake ya ndani
Wasifu wa vpnc ulioachwa kwenye bandari ya ndani chaguo-msingi hushindana na wasifu unaoendesha tayari. Muunganisho wa pili hushindwa wakati wa kwanza unashikilia bandari, na mstari wa kumbukumbu huonekana kama tatizo la lango badala ya mgongano wa ndani. Badala yake weka mstari mmoja kwa kila faili ya wasifu:
Local Port 0Sifuri humruhusu kerneli kuchagua bandari ya muda, kwa hivyo wasifu wawili wanaweza kuanzishwa kwa wakati mmoja. Taja kila faili kwa lango na kikundi inachohudumia, iweze kusomwa na root pekee, na unganisha kila mara na wasifu unaofaa badala ya chaguo-msingi la pamoja. Faili ya chaguo-msingi la pamoja ndiyo njia ambayo skripti huunganisha upya tunnel isiyo sahihi baada ya mtu kubadili jina la wasifu.
Faili za wasifu hubeba vitambulisho, kwa hivyo ruhusa ni sehemu ya muundo, si ya usafi wa nyumbani. Faili inayosomeka na kila mtu chini ya /etc/vpnc hukabidhi siri ya kikundi kwa kila mtumiaji wa ndani. Weka hali ya 0600 na root kama mmiliki, na waachie skripti zisome faili kama root badala ya kunakili siri kwenye hoja. Ndiyo sababu skripti ya uchunguzi haipaswi kamwe kuandika yaliyomo ya faili kwenye kumbukumbu.
Chunguza huduma moja kwa kila wasifu, si anwani ya tunnel
Ombi la mwangwi kwa anwani ya tunnel yenyewe huthibitisha zaidi kwamba kiolesura kipo. Haisemi chochote kuhusu kama mwenyeji aliye nyuma yake bado anafikia programu inayohalalisha tunnel. Kiolesura kinaweza kuwa juu wakati njia iliyo ng'ambo yake imekwisha kwenda.
Chunguza huduma moja kwa kila wasifu kwa muda mfupi wa TCP na unganisha upya wasifu ambao uchunguzi wake umeshindwa pekee. Sekunde mbili hutenganisha njia iliyokufa na ile ya polepole, na uchunguzi wa TCP hautegemei ICMP kuruhusiwa mahali popote njiani. Badilisha tu lengo na jina la usanidi kati ya wasifu:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiHifadhi hiyo kama /usr/local/bin/ensure-vpn-ops.sh, ifanye iweze kutekelezwa, na urudie kwa kila wasifu ukibadilisha tu lengo la uchunguzi na jina la usanidi. Uchunguzi unaojibu swali la itifaki huishi kupitia malango yanayotupa mwangwi lakini bado yanapeleka huduma ambazo watumiaji wanajali.
Unganisha uchunguzi kwa mnyororo ili usishindane kamwe
Skripti ya kuunganisha upya iliyo kwenye kifurushi inaweza kuita uchunguzi wako kwa mfuatano, na mfuatano ndio jambo lote. Simu mbili za vpnc-connect zinazoendesha pamoja huandika upya jedwali la uelekezaji kwa mpangilio ambao hakuna anayedhibiti, na ndivyo wasifu mzima hupoteza njia yake.
Weka simu mbele, ongeza kusubiri kwa utulivu kwa kiolesura cha chini, na panga mnyororo kutoka jedwali la cron la root, kwa kuwa root pekee anaweza kuandika upya njia za tunnel:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shWeka mpangilio sawa kati ya skripti ya kuwasha na ingizo la cron, kwa kuwa mnyororo unaoendesha kwa mpangilio tofauti wakati wa kuwasha kwa hakika ni programu nyingine. Wasifu mmoja unapotegemea njia za mwingine, weka utegemezi mbele na uache uchunguzi wa baadaye ushindwe bila madhara wakati tunnel ya awali inapanda bado.
Fuatilia kumbukumbu, kisha vunja moja kwa makusudi
Andika mstari mmoja kwa kila uendeshaji ukiwa na wasifu, lengo la uchunguzi, matokeo na hatua iliyochukuliwa. Bila hiyo, tunnel inayoyumba kila dakika inaonekana sawa kabisa na ile ambayo haikuanguka kamwe, na hitilafu ya uchunguzi haiwezi kutofautishwa na kukatika kwa lango. Kumbukumbu pia huthibitisha kwamba mnyororo uligusa wasifu ulioshindwa pekee. Iandike mahali panapodumu baada ya kuwasha upya, la sivyo ushahidi unaondoka na mchakato.
Kisha vunja tunnel kwa makusudi na uone kinachotokea. Simamisha wasifu mmoja na uthibitishe ni michakato na njia zipi bado zipo:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logWasifu uliosimamishwa pekee unapaswa kuunganishwa upya, na vikao vingine vinapaswa kubaki na michakato na njia zao. Ikiwa wasifu wawili wanaanza upya, mnyororo wako unaendesha sambamba mahali usipotarajia.
Kile ambacho mlinzi hapaswi kufanya
Mlinzi anayeanza upya kila kitu kila kitu kinaposhindwa huonekana mzima wakati wa majaribio na husababisha kukatika katika dirisha la matengenezo. Anza upya kwa wasifu, kamwe si kwa ujumla.
Pendelea mteja anayetunzwa wakati lango linatoa mmoja kwa itifaki hiyo hiyo, na kamwe usiweke nenosiri kwa maandishi thabiti kwenye skripti wala usilipeleke kwenye mstari wa amri, kwa kuwa faili ya wasifu tayari inashikilia siri. Ikiwa kazi lazima iendeshwe kama mtumiaji wa kawaida baada ya tunnel kupanda, punguza mapendeleo kutoka ndani ya skripti badala ya kuendesha mnyororo mzima chini ya akaunti hiyo. Hatimaye, soma upya njia baada ya kuunganisha upya, kwa kuwa wasifu unaweza kurudi na anwani nyingine iliyotengwa na kuacha njia ya zamani ambayo hakuna uchunguzi unaoelekezwa kwenye anwani ya tunnel utakaoiona kamwe.