Պահեք nftables-ի քաղաքականությունը կայուն, մինչ VPN-ի ինտերֆեյսը գալիս է
Անվան վրա հիմնված nftables-ի կանոնները դիմանում են թունելին, որը հայտնվում ու անհետանում է, սակայն երթուղիներն ու գոյություն ունեցող հոսքերը ինքնաբերաբար չեն հետևում։ Առանձնացրեք սեփականատերերին։
Թունելները ժամանակավոր են, իսկ քաղաքականությունը՝ ոչ։ Linux-ի դարպասում nftables-ի այն կանոնը, որը թունելի ինտերֆեյսը համապատասխանեցնում է անվանմամբ, կարելի է բեռնել մեկ անգամ, և այն շարունակում է գործել ամեն անգամ, երբ այդ ինտերֆեյսը հայտնվում է։ Ինտերֆեյսը դեռևս ունի կյանքի ցիկլ՝ այն ստեղծվում է, անհետանում է, իսկ նրա շուրջ եղած երթուղիներն ու թարգմանությունները հետևում են իրենց ժամանակացույցին։ Այդ սեփականատերերին առանձնացնելն է, որ վերամիացման ընթացքում հասանելիությունը պահում է կայուն։
Անվան համընկնումն ապրում է ինտերֆեյսից ավելի երկար
nftables-ն առաջարկում է ինտերֆեյսի ինդեքսի թվային համընկնումներ և անվան դինամիկ համընկնումներ՝ iifname և oifname։ Այդ անվանումներն օգտագործող կանոնները մաքուր բեռնվում են նույնիսկ այն դեպքում, երբ թունելի սարքը դեռ ստեղծված չէ, ինչը հենց այն է, ինչ պետք է կանոնների հավաքածուին բեռնման պահին։ Համընկնումը դադարում է, եթե ինտերֆեյսը վերանվանվում է, և վերսկսվում է, երբ նոր ինտերֆեյսը վերցնում է այդ անունը։ Թվային ինդեքսը չունի այդ հատկությունը, դրա համար էլ թունելի համար սովորական ընտրություն է անվան ձևը։
Անունը համընկնման բանալի է, ոչ թե ապացույց, թե ով է մյուս ծայրում։ Գործընկերոջ նույնականացումը մնում է VPN-ի գործը։
Կարդացեք շղթան՝ նախքան կանոններ ավելացնելը
Նայեք, թե ինչ է պարունակում կանոնների հավաքածուն հիմա և որտեղ կտեղավորվի նոր կանոնը, քանի որ հերթականությունն է որոշում արդյունքը։
nft list ruleset
nft -c -f /etc/nftables.confՑանկը ցույց է տալիս շղթաներ, կանոններ և բռնակներ, իսկ ստուգման ռեժիմը վավերացնում է թեկնածու ֆայլը՝ առանց այն բեռնելու։ Միևնույն հոսքի համար ավելի վաղ տրված թույլտվությունից հետո տեղադրված՝ միայն թունելին վերաբերող թույլտվությունը ոչինչ չի փոխում, քանի որ հաղթում է առաջին համապատասխան կանոնը։ Այդ պատճառով ուշ կանոնը կարող է ճիշտ թվալ և ոչ մի ազդեցություն չունենալ։ Կարդացեք շղթան հերթականությամբ և հաստատեք, որ հաճախորդից դեպի վերին կապ ուղղվող երթևեկության արգելքը դեռևս նախորդում է ցանկացած ավելի լայն բանի։
Երթուղիները, թարգմանությունը և հոսքերը այլ սեփականատերեր ունեն
Ինտերֆեյսի առկայությունը երթուղիներ չի ստեղծում և չի նույնականացնում գործընկերոջը։ Դրանք VPN-ի կառավարչինն են, մինչդեռ թարգմանությունն ունի երրորդ կյանքի ցիկլ։
conntrack -L -s 10.20.0.0/24 | head
ip route show dev vpn0conntrack-ի ցանկը ցույց է տալիս գոյություն ունեցող հոսքերը՝ իրենց սկզբնական և թարգմանված արժեքներով, իսկ երթուղիների ցանկը՝ ինչ է կառավարիչը տեղադրել ինտերֆեյսի համար։ NAT-ի կանոնները միացման հետևման վիճակը ստեղծում են առաջին փաթեթի վրա, ուստի հաստատված հոսքը պահպանում է իր թարգմանությունը նույնիսկ կանոնը փոխվելուց հետո։ Այդ պատճառով թարմացվող կանոնը և նոր ուղին օգտագործող հոսքը երկու տարբեր պնդումներ են։ Որոշեք, թե որ նստաշրջանները պետք է վերամիանան, և անկապ հոսքերը թողեք հանգիստ։
Ընդունեք սառը մեկնարկը, կորուստը և վերականգնումը
Փորձարկեք դարպասը, երբ թունելը բացակայում է մեկնարկին, ապա՝ առկա է, ապա՝ ընդհատումից և վերադարձից հետո։ Հաստատեք, որ արգելված փոխանցումը մնում է արգելված, քանի դեռ թունելը բացակայում է, որ նոր թույլատրված հոսքը աշխատում է գործընկերոջ նույնականացումից հետո, և որ վերականգնումը չի պահանջում անկապ վիճակի մաքրում։ Մի ջնջեք ամբողջ POSTROUTING շղթան կամ յուրաքանչյուր conntrack գրառում որպես մեկ պրոֆիլի կանգի գործողություն, քանի որ այլ ծառայություններ դրանք կիսում են։ Արձանագրեք, թե որ բաղադրիչը փոխեց ինտերֆեյսը, երթուղին և քաղաքականությունը, այլ ոչ միայն այն, որ մեկնարկի կարթը դուրս եկավ զրոյով։
Վերամիացումը վերապրող քաղաքականությունն այն է, որի սեփականատերերը անվանված են, և որի կանոնները փորձարկվել են թունելի և անջատված, և միացված վիճակում։ Հաջողության մասին հաղորդող կարթը միայն ապացուցում է, որ կարթն աշխատել է։