Մի քանի սկրիպտների մասին նախազգուշացումը հնչում է որպես ժամանակացույցի բողոք, ուստի ակնհայտ լուծումը տողերը վերադասավորելն է, մինչև այն անհետանա։ Բայց դա ժամանակացույցի բողոք չէ։ Ավելի ուշ --up սահմանումը փոխարինում է այդ փուլի համար արդեն պահված հրամանը, և վերլուծիչը հենց այդպես էլ ասում է, այսինքն՝ ձեր երկու սկրիպտներից երբևէ աշխատել է ուղիղ մեկը։ Մյուսը հերթում նրա հետևում չէ, այն անհետացել է։

Այդ պատճառով նախազգուշացումը ուշադրության արժանի է, թեև մահացու չէ. այն կանխատեսում է DNS-ի թարմացում կամ երթուղու փոփոխություն, որը լուռ դադարել է տեղի ունենալուց։

Նախազգուշացումը հերթականության մասին չէ

OpenVPN-ը պահում է մեկ օգտատիրական սկրիպտի հրաման up փուլի համար։ Երբ վերլուծիչը հանդիպում է մեկ այլ սահմանման՝ պրոֆիլից, ներառված ֆայլից կամ հրամանի տողից, այն փոխարինում է արդեն պահածը և արձակում նախազգուշացումը։ Ոչինչ չի միացվում, ոչինչ երկու անգամ չի աշխատում, և հերթականության հարց գոյություն չունի։ Գոյատևում է այն հրամանը, որը վերլուծիչը տեսել է վերջինը, դրա համար էլ տողը տեղափոխելը կարող է փոխել հաղթողին՝ մյուս սկրիպտը թողնելով մեռած։

Նույն օրինաչափությունը գործում է նաև սկրիպտների մյուս փուլերի համար. ամեն մեկին՝ մեկ հրաման։ Եթե երկու աշխատանք պետք է երկուսն էլ կատարվեն, նրանց պետք է մեկ մուտքի կետ, ոչ թե ցանկի նման երկու հրահանգ։

Գտեք երկու սահմանումներն էլ իրական գործարկման մեջ

Սկսեք նրանից, ինչ դեմոնն իրականում ստացել է, ոչ թե ձեր խմբագրած պրոֆիլից։ ps -ef-ը և միավորի ExecStart-ը ցույց են տալիս հրամանի տողը, որտեղ կոնտեյների մուտքի կետից կամ փաթաթանից կարող է ավելանալ --up-ը. բաշխման init ֆայլը կարող է նույնն անել։ systemctl cat openvpn-server@server-ը բացահայտում է, ինչ ինքն է ավելացնում ծառայությունը, իսկ կոնֆիգուրացիայի պանակում ռեկուրսիվ grep-ը գտնում է ֆայլային մակարդակի սահմանումները։ Կրկնօրինակները սովորաբար գալիս են տարբեր շերտերից, և հենց դրա համար մեկ ֆայլ խմբագրելը ոչինչ չի փոխում։

Սկրիպտը այլ պանակ պատճենելը կամ վերանվանելը նույնպես չի հեռացնում հրահանգը։ Վերլուծիչը հաշվում է սահմանումներ, ոչ թե ֆայլեր։

Թող մեկ hook տնօրինի աշխատանքը

Կայուն լուծումը մեկ ուղարկիչ է, որը երկու գործողություններն էլ կատարում է մտածված հերթականությամբ։ Կարճ shell սկրիպտ set -eu-ով, որը կանչում է անհրաժեշտ ինտեգրումը, ապա տեղական գործողությունը, և փոխանցում է "$@"-ը, որպեսզի արգումենտների սահմանները պահպանվեն, վարքը պահում է մեկ ստուգելի տեղում։ Արգումենտները փոխանցելը միայն պահպանում է դրանք. այն չի ապացուցում, որ երկու օգնականները նույն միջերեսն են սպասում, ուստի կարդացեք յուրաքանչյուրի պայմանագիրը։ Որոշեք, թե ձախողումը ինչ պետք է անի, և արդյոք մասնակի փոփոխությունները պետք է հետ շրջվեն։

Եթե գործարկիչը առաջարկում է աջակցվող ընդլայնման hook, նախընտրեք այն ձեռքով կառուցված շղթայից։ Կոնտեյների պատկերը կամ մատակարարի փաթեթը հաճախ ունի լրացուցիչ աշխատանքի փաստաթղթավորված տեղ, և դրա օգտագործումը թույլ չի տալիս թարմացմանը վերագրել ձեր ուղարկիչը։

Մաքրումը պատկանում է համապատասխան down փուլին։ DNS-ը վերագրող կամ երթուղիներ ավելացնող up գործողությունը պահանջում է փաստաթղթավորված հետշրջում, և միայն գործարկումը զբաղեցնող ուղարկիչը կես դիզայն է։

Հաստատեք ինտեգրումը, ոչ միայն լռությունը

Կրկնօրինակ նախազգուշացումը հեռացնելը հեշտ մասն է, ինտեգրումը դեռ պետք է աշխատի։ Միանալուց հետո ստուգեք լուծիչի վիճակը resolvectl status-ով կամ կարդալով /etc/resolv.conf-ը, և հաստատեք երթուղիները ip route-ով։ Այնուհետև անջատվեք և նորից միացեք, որովհետև շտապ կապված hook-ը սովորաբար ինչ-որ բան թողնում է նախորդ նստաշրջանից։ journalctl -u openvpn-server@server -b-ը ցույց է տալիս, արդյոք ձեր ուղարկիչը աշխատել է և ինչ է տպել։

Պահեք hook-ի արտոնությունները այնտեղ, որտեղ նրանք պետք է լինեն։ script-security-ը բարձրացնելը կամ դեմոնը ավելի իրավունքներով գործարկելը լուծում չէ փոխարինված hook-ի համար. այն ընդլայնում է, ինչ կարող է անել յուրաքանչյուր ապագա սկրիպտ, ներառյալ այն, ինչին անուն կտա հարձակվողը։

Ուղղման իրական լինելու նշանը լռությունը չէ մատյանում։ Դա DNS պատասխանն է, երթուղու գրառումը և մաքրումը, որոնք բոլորը ճիշտ են աշխատում երկու վերամիացումից հետո։

Առնչվող հոդվածներ