Ինչ են իրականում վերապրում persist-tun-ը և persist-key-ը OpenVPN-ում
Երկու ընտրանքներն էլ ընդգրկում են մեղմ վերագործարկում կենդանի պրոցեսի ներսում։ Նրանք չեն պահպանում ինտերֆեյսը կանգից հետո և տրաֆիկի արգելափակման քաղաքականություն չեն։
Ծառայության կանգը հեռացնում է ինտերֆեյսը նույնիսկ persist-tun-ը դրված վիճակում։ Սա ընտրանքի աշխատանքն է՝ ըստ փաստաթղթերի, ոչ թե խափանում։ Ընտրանքը նկարագրում է մեկ վերագործարկման ուղի աշխատող պրոցեսի ներսում, և systemctl stop-ը այդ ուղին չէ։
Կարդացեք երկու անունները միասին, և դիզայնը պարզ է դառնում։ Մեկը պահում է դեսկրիպտոր, մյուսը՝ բանալու նյութ, և երկուսն էլ գոյություն ունեն այն պատճառով, ինչ տեղի է ունենում արտոնությունները թողնելուց հետո։
Երկու ռեսուրսը և այն վերագործարկումը, որին նրանք պատկանում են
OpenVPN-ը ազդարարում է իր սեփական վերագործարկումը երկու սովորական իրավիճակներում։ Բացահայտ SIGUSR1-ը դա անում է, և մեռած զուգընկերոջ կողմից հարուցված ping-restart-ը նույնն է անում։ Երկուսն էլ պրոցեսը կենդանի են թողնում և նորից գործարկում կապի տեղադրումը, և հենց այստեղ են ընտրանքները վաստակում իրենց տեղը։
| Event | TUN/TAP device | Key and auth files | Addresses and routes | up/down hooks |
|---|---|---|---|---|
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itself | survives only with persist-tun | survive only with persist-key | survive with the device, otherwise rebuilt | run again only when restart hooks are enabled |
Configuration reload, SIGHUP | recreated | re-read from disk | rebuilt once the device returns | run again |
| Service stop | lost | re-read at the next start | removed | run at the next start |
Միայն մեղմ վերագործարկման տողն է այն, ինչ փոխում են այս երկու ընտրանքները, և այն աշխատանքը, որը նրանք բաց են թողնում, զբաղված կապուղու վրա թանկ մասն է։ Սարքի վերաբացումը պոկում է դրան կապված հասցեներն ու երթուղիները, և դրանց վերակառուցումը կարող է կորցնել փաթեթներ, որոնք ճանապարհին էին վերագործարկման սկզբում։ Կանգը ոչնչացնում է նույն օբյեկտները՝ առանց դրանք պահելու որևէ ընտրանքի։
Ինչու են այս ընտրանքները ընդհանրապես գոյություն ունեն
Կարծրված OpenVPN սերվերը սովորաբար սկսվում է որպես root, բացում է իր բանալիներն ու սարքը, ապա իջնում է արտոնությունից զուրկ օգտատիրոջ։ Այդ իջնելուց հետո որոշ գործողություններ պարզապես անհետանում են։ 0600 ռեժիմով բանալու ֆայլ կարդալը, ցանցային ինտերֆեյս ստեղծելը կամ երթուղիները փոխելը կարող են մերժվել։
Առանց persist ընտրանքների, զուգընկերը, որը բավական երկար է լռում ping-restart-ը հարուցելու համար, պարտադրեր հենց այդ գործողությունները։ Վերակապակցումը կձախողվեր, թեև կազմաձևում ոչինչ չէր փոխվել։ Պրոցեսը կթվա, թե մահանում է առանց պատճառի, և մատյանը ցանցային սխալի փոխարեն կցուցադրեր թույլտվության սխալ։
Նրանցով մեղմ վերագործարկումը վերօգտագործում է այն, ինչ արտոնյալ փուլն արդեն ստացել է։ Ոչ մի կախարդանք չկա, և պրոցեսը ոչնչից չի վերապրում։ Ռեսուրսների ձեռքբերումը պարզապես հետաձգվում է։
Կարդացեք առաջին սխալը, ոչ թե վերջինը
Երբ վերագործարկումը ձախողվում է, կարդացեք առաջին սխալը՝ վերջինի փոխարեն։ Պաշտպանված բանալին, auth ֆայլը, ինտերֆեյսի ioctl-ը և արտաքին կարթը չորս տարբեր ռեսուրսներ են։ Մեկը պահելը ոչինչ չի ասում մյուսներին հասանելիության մասին։ Կարթը, որը կանչում է հրապատի գործիք, դեռ պահանջում է այն արտոնությունները, որ գործիքը պահանջում է։
Կարթերն ունեն իրենց անջատիչը։ OpenVPN-ի ձեռնարկը persist ընտրանքները զուգակցում է up-restart-ի հետ, որը որոշում է՝ արդյոք up և down սկրիպտները նորից կաշխատեն վերագործարկումից հետո։ Այսպիսով՝ վերևում մնացած ինտերֆեյսը ոչինչ չի ասում այն մասին, թե արդյոք ձեր resolver ինտեգրումը թարմացել է։
# which restart path just happened?
journalctl -u openvpn-client@office --since '10 min ago' | grep -E 'SIGUSR1|ping-restart|Restart pause|NOTE:'
# did the interface survive, and do its routes still exist?
ip -brief link show tun0
ip route show dev tun0
Այս զույգ հրահանգները երկու խափանման եղանակները բաժանում են վայրկյանների ընթացքում։ Առկա, բայց երթուղիներից զուրկ ինտերֆեյսը կարթի կամ երթուղու խնդիր է։ Անհետացած ինտերֆեյսը նշանակում է, որ պրոցեսն իսկապես ավարտվել է։
Պահպանված ինտերֆեյսը kill switch չէ
Եթե պահանջն այն է, որ տրաֆիկը երբեք չհեռանա թունելից դուրս, պահպանված սարքը դա չի ապահովում։ Մյուս հասցեների ընտանիքի երթուղիները, երկրորդ լռելյայն երթուղին և այն դեպքը, երբ պրոցեսն ամբողջությամբ դուրս է գալիս, բոլորը մնում են ընտրանքի շրջանակից դուրս։
Վերաբերվեք երկու պահանջներին առանձին։ Թունելի օբյեկտը վերակապակցումների միջև պահելը հարմարավետություն է դեմոնի համար։ Ելքի արգելափակումը, երբ թունելը անջատված է, հրապատի քաղաքականություն է իր կանոններով և իր փորձարկումով։ Դրանք խառնելը ստեղծում է կազմաձև, որը պաշտպանական է թվում և վարվում է որպես լավագույն ջանքի վերակապակցում։
Անվանեք իրադարձությունը նախքան այն ախտորոշելը։ Մեղմ վերագործարկումը, ձախողված կապի փորձը և ծառայության կանգը երեք իրադարձություններ են՝ երեք վարքով, և միայն առաջինն է այն, ինչ նկարագրում են այս ընտրանքները։