Ինչու է vpnc-ի երթուղու մաքրման զգուշացումը հայտնվում կոնտեյներում
Երթուղիների քեշի մաքրումը միջուկի մնացորդ է, որն այլևս չի պահում այդ քեշը. միայն-կարդալու սխալը գալիս է կոնտեյների միացումից, ոչ թունելից։
/proc/sys/net/ipv4/route/flush-ի վերաբերյալ Read-only file system բողոքով են հաճախ ավարտվում թարմ կոնտեյների մատյանները, և այդ տողին են մեղադրում թունելին, որը կարող է լիովին առողջ լինել։ Դրա հետևում եղած գրառումը ուղղված է միջուկի մի գրառման, որն այլևս ոչ մի օգտակար բան չի անում, քանի որ IPv4 երթուղիների քեշը վերացել է։ Կոնտեյների ներսում /proc/sys միացվում է միայն-կարդալու ռեժիմով, ուստի վերահասցեավորումը մերժվում է նախքան որևէ արժեքի հասնելը, և shell-ը տպում է այդ մերժումը։ Աշխատող թունելը կարող է տպել այս զգուշացումը այնքան ժամանակ, քանի դեռ հին տողը մնում է սկրիպտում, և --privileged-ը երբեք գրառումը իմաստալից չի դարձնում։
Ինչ էր փորձում մաքրել սկրիպտը
Ավելի հին միացման սկրիպտներն ավարտվում էին քեշի մաքրմամբ. արժեք գրել միջուկի կառավարման ֆայլում և խնդրել IPv4 կույտին թողնել իր երթուղավորման քեշը, որպեսզի նոր թունելային երթուղին ընտրվի առանց հնացած գրառումների սպառմանը սպասելու։ Ֆայլը հասցեավորված էր /proc/sys/net/ipv4/-ի ներքո, ինչը գործողությունը դարձնում էր shell-ի վերահասցեավորում, այլ ոչ երթուղավորման հրաման։ 3.6 միջուկը հեռացրեց այդ քեշը, և դրա հետ՝ մաքրման գոյության պատճառը։ Ընթացիկ տվյալների ուղու ոչինչ կախված չէ այդ գրառումից։
Գրառումն ինքը պահպանվել է որպես հին միայն-գրառման ֆայլ, ուստի սկրիպտը, որը դեռ գրում է դրա մեջ, հասնում է իրական ուղու և իրական թույլտվության ստուգման։ Հոսթի վրա գրառումը վերադարձնում է հաջողություն և ոչինչ չի փոխում։ Կոնտեյներում նույն վերահասցեավորումը հանդիպում է միայն-կարդալու /proc/sys-ին և ձախողվում EROFS-ով, որը shell-ը տպում է որպես միայն-կարդալու ֆայլային համակարգի հաղորդագրություն։ Միջուկներում, որտեղ ուղին իսկապես բացակայում է, ձևակերպումը դառնում է No such file or directory, և եզրակացությունը չի փոխվում։
Երկու սխալները տարբեր բաներ են ասում, և տարբերությունը արժե պահել հստակ։ Read-only file system նշանակում է, որ միջուկը հասել է գրառման և մերժել գրառումը. No such file or directory նշանակում է, որ գրառումը գնացել է։ Հաղորդագրություններից ոչ մեկը չի տեղեկացնում թունելի սարքի, երթուղիների կամ անունների լուծման մասին, ուստի ոչ մեկը չի կարող արդարացնել ավելի շատ արտոնություն։
Հենց հերթականությունն է հաղորդագրությունը պատճառական թվացնում։ Միացման սկրիպտը տեղադրում է երթուղիներ, փոխում ինտերֆեյսի վիճակը և վերագրում անունների լուծումը նախքան վերջի մաքրմանը հասնելը, ուստի վերջին տպված տողն այն տողն է, որը մարդիկ մեջբերում են, նույնիսկ երբ յուրաքանչյուր կարևոր քայլ հաջողություն է վերադարձրել։ Թունելը, որը հաստատվում և տրաֆիկ է տեղափոխում այս զգուշացումը տպելիս, ճիշտ համապատասխանում է վերևի մեխանիզմին։
Ստուգեք միացումը և երթուղին նախքան արտոնություն ավելացնելը
Երեք ընթերցում առանձնացնում են կոսմետիկ զգուշացումը իրական խափանումից. արդյոք տեղադրված սկրիպտը դեռ կրում է տողը, ինչպես է միացված /proc/sys, և ուր է իրականում գնում հավելվածի տրաֆիկը։ Գործարկեք դրանք նույն կոնտեյներային անվանատարածքում կամ այն հոսթի վրա, որտեղ հայտնվել է զգուշացումը, քանի որ անկապ մեքենայի վրա ստուգումը պատասխանում է այլ հարցի։
grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10grep-ի պատասխանն ավելի թույլ է, քան թվում է, որովհետև գտնվելը ապացուցում է տողի առկայությունը, ոչ թե այն, որ այն գործարկվում է առանց պաշտպանության. սպասարկվող սկրիպտը կարող է գրառումը պահել պահակի մեջ, որը բաց է թողնում այն։ findmnt -no OPTIONS /proc/sys-ը ուղղակիորեն լուծում է միացումը, և այդ ելքի ro-ը նշանակում է, որ այդ կետից ներքև ամեն գրառում մերժվում է, ինչ էլ որ անի սկրիպտը։ Այնուհետև երթուղու որոնումը ցույց է տալիս, թե հավելվածին անհրաժեշտ նպատակակետը լուծվում է թունելի ինտերֆեյսով, թե կոնտեյների լռելյայն դարպասով։ Լռելյայն դարպասն ընտրող որոնումը նշանակում է, որ թունելը բարձրացել է, և ոչինչ չի երթուղավորվում դրա մեջ, ինչը երթուղավորման խնդիր է, ոչ արտոնության։
Որտեղից է իրականում գալիս ուղղումը
Սպասարկվող ուղղումը ապրում է սկրիպտում, ոչ կոնտեյների դրոշներում։ upstream vpnc-script-ը փոխել է, թե ինչպես է վարվում այս գործողության հետ, ուստի համեմատեք պատկերի ներսում եղած պատճենը ընթացիկ upstream-ի հետ և թարմացրեք այն փաթեթի կամ պատկերի կառուցման միջոցով, որը տրամադրում է այն։ Աշխատող կոնտեյների ներսում ձեռքով խմբագրված ֆայլը վերանայելի չէ և չի վերապրի հաջորդ կառուցումը։
--privileged-ը փաստաթղթավորված է որպես բոլոր ունակությունները և լայն սարքային հասանելիություն տվող, ինչը մեծ զիջում է ոչինչ չփոխող հաղորդագրության համար, ուստի անվանեք բացակայող ունակությունը, եթե այն իսկապես բացակայում է։ Թարմացումից հետո կրկնեք երթուղու որոնումը և թույլ տվեք հավելվածին օգտագործել թունելը, քանի որ հանգիստ մատյանը և աշխատող կապը առանձին արդյունքներ են։