Վահանակը պահանջում է թիվ, թե որքան ժամանակ է կապը բաց, և OpenVPN այն չի տրամադրում։ Հաճախորդը գիտի, թե երբ է բարձրացել իր թունելը, բայց միայն այն դեպքում, եթե ինչ-որ բան գրանցում է այդ պահը նախքան նստաշրջանի վիճակի կորուստը։ Աջակցվող տեղը up կեռիկն է, և պահելու արժանի արժեքը հում epoch վայրկյանն է, ոչ թե ձևավորված տող։ Այն ամենը, ինչ հաջորդում է, թվաբանություն է, գումարած մի քանի կարգի կանոններ, որոնք որոշում են՝ թիվը մնում է ազնիվ, թե ոչ։

Համոզվեք, որ կեռիկներն իրականում աշխատում են

Ապացուցեք, որ կեռիկը գործարկվում է, նախքան դրա շուրջ ինչ-որ բան նախագծելը։ Նվազագույն հաճախորդի կարգավորումը պահանջում է script-security 2 և հստակ ուղիներ up և down ուղիներ; առանց անվտանգության տողի OpenVPN-ը հրաժարվում է կատարել սկրիպտը և դա ասում է ուղղակիորեն։ Ավելացրեք up-restart և down-pre միաժամանակ, որպեսզի վերագործարկման և ապամոնտաժման ուղիները վարվեն կանխատեսելիորեն։

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

Ստուգեք, թե որ օգտատիրոջ կարգավիճակում է աշխատում կեռիկը։ Սահմանված user և group դեպքում OpenVPN-ը թողնում է արտոնությունները սկրիպտները գործարկելուց առաջ, ուստի գրացուցակը, որտեղ root-ը կարող է գրել, կարող է փակ լինել կեռիկի համար։ Ընտրեք ուղին ծառայության տեսանկյունից, ոչ թե ձեր shell-ի։

Գրանցեք մեկ epoch արժեք և դիտավորյալ մաքրեք այն

up կեռիկը պահանջում է մեկ տող, date +%s > /run/openvpn-client.started, ուղին հարմարեցված յուրաքանչյուր օրինակի համար։ Epoch արժեքը խուսափում է ավելի ուշ լեզվի, ժամային գոտու և ձևաչափի հարցերից, և դա այն նույն թիվն է, որը վերահսկող գործակալը կարող է համեմատել իր ժամացույցի հետ։

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

Ընտրեք ճիշտ կյանքի տևողությամբ վայր։ /run տակ գտնվող ֆայլը անհետանում է վերագործարկման ժամանակ, ինչը համապատասխանում է իրականությանը, մինչդեռ /tmp տակ գտնվող ֆայլը կարող է անկանխատեսելիորեն մաքրվել, իսկ կարգավորումների գրացուցակում գտնվողը մնում է մոլորեցնող ձևով։ Սահմանեք թույլտվություններ, որպեսզի միայն ծառայության օգտատերը և վերահսկողության ընթերցողը կարողանան կարդալ այն։

Հաշվեք աշխատանքի ժամանակը՝ չվստահելով մատյանի տողերին

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

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

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

Ընդգրկեք վերամիացումները, վերագործարկումները և բազմաթիվ օրինակները

Մեկ հոսթում երկու թունել պահանջում է երկու ֆայլ՝ բանալին այն օրինակի անունը, որն արդեն օգտագործում է ծառայությունը։ Ընդհանուր ուղին նշանակում է, որ ամենավերջին միացումը վերագրում է յուրաքանչյուր պրոֆիլի մեկնարկի ժամը, և ախտանիշը թիվ է, որը հետ է թռչում, երբ սկսվում է երկրորդ թունելը։

Վերամիացման վարքը արժանի է առանձին թեստի, քանի որ հենց այնտեղ է, որ հավանական թվացող ձևավորումը հանգիստ հաղորդում է սխալը։ Ստիպեք վերագործարկման՝ գցելով զուգընկերոջը կամ ազդանշան ուղարկելով գործընթացին, ապա համեմատեք ինտերֆեյսի վիճակը ֆայլի հետ։ Ժամանակի դրոշմակնիքը պետք է առաջ շարժվի այն պահին, երբ թունելը վերադառնում է։

Սերվերի կողմում վիճակի ֆայլը յուրաքանչյուր հաճախորդի համար կրում է connected-since արժեք, որը պատասխանում է այլ հարցի՝ երբ է սերվերը վերջին անգամ տեսել այդ զուգընկերոջը։ Օգտագործեք այն խաչաձև ստուգման համար, ոչ թե որպես փոխարինող, քանի որ այն անհետանում է իր նկարագրած նստաշրջանի հետ։ Չափումներից ոչ մեկը ոչինչ չի ասում թունելի հետևում գտնվող հավելվածի առողջության մասին։

Գործարկեք երեք ստուգումները, որոնք բռնում են կարգի սխալները

Փորձարկեք սովորական միացում, հարկադիր վերամիացում և մաքուր կանգառ՝ յուրաքանչյուրից հետո միասին կարդալով ինտերֆեյսների ցանկը և ֆայլը։ Դրոշմակնիք, որը դեռ կա մաքուր կանգառից հետո, կամ ֆայլ, որը պնդում է թունել, որը չկա ինտերֆեյսների ցանկում, ուղղակիորեն մատնանշում է կեռիկների կարգը։ Գործարկեք ստուգումները որպես ծառայության օգտատեր և ծառայության ուղիներով, քանի որ root shell-ը կարող է այլ ֆայլ տեսնել և ինքնավստահ սխալ պատասխան տալ։ Ապա թողեք դանդաղ հարցում կատարողին կարդալ ֆայլը և հաստատեք, որ այն երբեք չի գրում դրա մեջ։

Յուրաքանչյուր վաթսուն վայրկյանը մեկ հարցումը ծածկում է ահազանգումը, և ոչ մի կեռիկ չպետք է ապավինի նրան, որ այդ հարցում կատարողը կենդանի է։ Առանձնացրեք այդ երկու պատասխանատվությունները, և թիվը կմնա վստահելի, երբ կողմերից որևէ մեկը նորից տեղակայվի։

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