Բաց թողնել տան VPN-ը systemd ExecCondition-ով
Դիտավորյալ բաց թողնելը և կոտրված նախապատրաստական հրամանը տարբեր արդյունքներ են։ Սահմանեք օգնականի ելքի կոդերը, ապա փորձարկեք ցանցերի միջև անցումը։
Տնային ցանցի VPN-ը ոչինչ չունի անելու, երբ նոթբուքն արդեն այդ ցանցում է։ Հրապուրիչ կարճ ուղին նախապատրաստական հրամանն է, որը դուրս է գալիս ոչ զրոյական կոդով։ Դա ձախողում է միավորը և յուրաքանչյուր վահանակի կոտրված տեսք տալիս։ systemd-ն ունի ուղղորդում հենց այս տեսակի որոշման համար, և այն առանձնացնում է դիտավորյալ բաց թողնելը իրական խափանումից։ Ճիշտ անելը հիմնականում նշանակում է գրի առնել, թե ինչ է նշանակում յուրաքանչյուր ելքի կոդ։
Ինչու ձախողվող նախապայմանը սխալ ձև է
ExecStartPre-ն ոչ զրոյական ելքը դիտարկում է որպես գործարկման ձախողում, ինչը ճիշտ է ծառայությունը նախապատրաստող հրամանի համար։ Այն որպես պայման օգտագործելը քաղաքականության որոշումը դարձնում է անտարբերելի կոտրված կախվածությունից։ ExecCondition-ը գոյություն ունի, որպեսզի միավորը կարողանա հրաժարվել գործարկվելուց՝ առանց ձախողված նշվելու։
Այդ տարբերությունը կարևոր է գիշերվա ժամը երեքին, երբ ոչ ոք չի ուզում վերլուծել կարմիր միավոր, որը վարվում էր ըստ նախագծի։ Ձախողված միավորը նաև թաքցնում է իրական խափանումները դիտավորյալների միջև։
Նախ գրեք ելքի կոդերի պայմանագիրը
Գրեք պայմանագիրը սկրիպտից առաջ։ Զրո ելքը նշանակում է շարունակել, մեկ ելքը՝ բաց թողնել մնացած գործարկման հրամանները, իսկ 255 ելքը՝ որ պայմանն ինքը չկարողացավ աշխատել։ Երկուսից 254-ի միջև կոդերը սովորաբար նույնպես նշանակում են բաց թողնել, ինչը հեշտ է մոռանալ, երբ օգնականը վերադարձնում է պատահական սխալի կոդ։ Ներքևի drop-in-ը կապում է օգնականին միավորի իրական անվան հետ։
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnՆախքան լռելյայն իմաստաբանությունը ենթադրելը ստուգեք գործող միավորը ժառանգված SuccessExitStatus կամ stop-post կարգավորումների համար։ Ապա դիտավորյալ փորձարկեք երեք արդյունքներից յուրաքանչյուրը։
Ցանցային ակնարկը տեղորոշման ապացույց չէ
Հասանելի երթուղիչի հասցեն կամ հայտնի MAC-ը կարող են հուշել ճիշտ ցանցը, և ոչ մեկը դա չի ապացուցում։ Այլ ցանցը կարող է կրկին օգտագործել նույն հասցեն, ARP տվյալները կարող են հնացած լինել, և նույնացուցիչները կարելի է ընդօրինակել։ Զննումը դիտարկեք որպես քաղաքականությանը համահունչ օպտիմիզացիա, ոչ որպես նույնականացման արդյունք։
Նախապես որոշեք, թե ինչ է նշանակում անորոշությունը։ VPN-ը գործարկելը անորոշության դեպքում անվտանգ է այն հաճախորդի համար, որը պարզապես չէր կարողանա միանալ։ Այն բաց թողնելը անորոշության դեպքում անվտանգ չէ։ Սահմանափակեք զննումը և կարդացեք ակտիվ ինտերֆեյսը՝ ցանկի առաջինը ենթադրելու փոխարեն։ Կախվող զննումն ավելի վատ է, քան «ոչ» պատասխանողը, քանի որ միավորը սպասում է դրան։
Գրանցեք այդ ենթադրությունները միավորի ֆայլի կողքին, որպեսզի հաջորդ մարդը իմանա, թե ինչի է հավատում օգնականը։ Սկրիպտի վերևի մեկնաբանությունը դրանք պահելու ամենաէժան տեղն է։
Կարգավորեք ցանցերի միջև անցումը
Պայմանը գործարկվում է ծառայության մեկնարկին և հետագայում չի վերագնահատվում։ Բաց թողնված միավորը մնում է բաց թողնված նույնիսկ այն բանից հետո, երբ նոթբուքը տեղափոխվում է սրճարան, և աշխատող թունելը մնում է բարձրացված նույնիսկ այն բանից հետո, երբ նոթբուքը վերադառնում է տուն։ Կապեք ցանցի փոփոխության կյանքի ցիկլը մեկնարկի և կանգի որոշմանը առանձին մեխանիզմով։
systemctl cat home-vpn.serviceՓորձարկեք չորս դեպք՝ մեկնարկ տանը, մեկնարկ տնից դուրս, զննում, որը չի կարող աշխատել, և անցում ցանցերի միջև, մինչ միավորը ակտիվ է։ Տեղեկագրում տեսանելի պահեք բաց թողնելու պատճառը, որպեսզի դիտավորյալ որոշումը երբեք նույնականացման ձախողում չթվա։ Ծառայության տեղեկատուն նկարագրում է ելքի իմաստաբանությունը և նվազագույն տարբերակը։