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

Տվեք կանոններին տեր, նախքան որևէ մեկը գրելը

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

iptables -N VPN_HOOK 2>/dev/null || true
iptables -C INPUT -j VPN_HOOK 2>/dev/null || iptables -I INPUT -j VPN_HOOK
iptables -S VPN_HOOK

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

Փորձարկեք ցանկալի վիճակը՝ նորից ավելացնելու փոխարեն

Գրեք, թե ինչ պետք է գոյություն ունենա մինչ թունելը բաց է՝ որ միջերեսները, որ աղբյուրն ու նպատակակետը, որ արձանագրությունը և որ պորտը։ Այնուհետև արտահայտեք յուրաքանչյուր կանոն որպես փորձարկում, որին հաջորդում է ներդրում, որպեսզի երկրորդ գործարկումը գտնի կանոնը և ոչինչ չանի։ Ստուգման հրամանը զրոյով է ավարտվում, երբ կանոնը գոյություն ունի, և դա հենց այն ազդանշանն է, որ պետք է սկրիպտին։ iptables-ի տեղեկատուն փաստագրում է այստեղ օգտագործվող ստուգման, ավելացման և ներդրման ձևերը։

iptables -C VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT ||
  iptables -A VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT

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

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

Հաջորդականացրեք փոփոխությունը՝ դիմանալու հույսի փոխարեն

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

flock /run/vpn-hook.lock /usr/local/sbin/vpn-firewall-apply
nft -f /etc/nftables/vpn-hook.nft

Ինչ մեխանիզմ էլ ընտրեք, կրիտիկական հատվածը կարճ պահեք և դարձրեք կրկնակի մուտքով. կիսաճանապարհին ձախողվող կարթը պետք է անվտանգ լինի նորից գործարկելու համար։ Գրանցեք արդյունքը, որպեսզի կրկնվող գործարկումը երևա մատյանում, այլ ոչ թե եզրակացվի կանոնների քանակից։ Եթե երկու տարբեր վերահսկիչներ կարող են կանչել կարթը, նախ ուղղեք դա. ոչ մի կողպեք չի ուղղում երկու տիրոջ։

Ապամոնտաժեք միայն ձերը

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

iptables -D VPN_HOOK -i tun0 -p tcp --dport 443 -j ACCEPT
iptables -F VPN_HOOK
ip -brief link show type tun

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

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

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