Նույն պատկերից երկու Ubuntu մեքենա, մեկ VPN պրոֆիլ, հակառակ արդյունքներ մուտքի պահին. մեկում թունելը բարձրացած է մինչև աշխատասեղանի հայտնվելը, մյուսում այն երբեք չի բարձրանում։ Պրոֆիլը այստեղ փոփոխական չէ։ Տարբերությունն այն է, թե երեք բաղադրիչներից որին է հանձնարարվել գործարկել այն, և այդ երեքը չեն կիսում մեկ անջատիչ։

Դրանք կողք կողքի համեմատելն ավելի արագ է, քան գուշակելը։ Նրանցից յուրաքանչյուրը ձախողվում է ճանաչելի ձևով, և հենց դա է համեմատությունն արժեքավոր դարձնում։

Երեք գործարկիչ՝ երեք տարբեր ազդակներով

Փաթեթավորված openvpn ծառայությունը ամենահին ուղին է։ Նրա init սկրիպտը ինքնագործարկման ցանկ է կարդում /etc/default/openvpn ֆայլից։ Եթե այդ ցանկը մեկնաբանված է կամ դատարկ է թողնված, սկրիպտը գործարկում է այդ պանակում գտած յուրաքանչյուր կարգավորում՝ ձեր ավելացրած միակի փոխարեն։ Մեկ թունելի համար ավելացված մեկ ֆայլը կարող է լուռ բարձրացնել մի քանիսը։

StarterWhat triggers itTypical failure
Init script and templated unitsBoot, plus anything in the autostart listStarts every config, not the one you meant
NetworkManager secondaryActivation of the base Wi-Fi or Ethernet profileNothing happens until that base link comes up
Hand-written unit or wrapperWhatever its WantedBy and ExecStart sayRuns a different binary or environment than your shell

Երկրորդ տողն այն է, որը մարդիկ սխալ են կարգավորում։ NetworkManager-ը պահում է ներմուծված պրոֆիլը և կգործարկի այն, բայց միայն որպես մեկ այլ կապի երկրորդական, ինչը նշանակում է, որ ազդակը պատկանում է ցանցային կապին, ոչ թե VPN-ին։

Համեմատեք տեղադրման արժեքը և ծածկույթը

Init սկրիպտի ուղին արժե մեկ տող և ծածկում է մեքենայի բոլոր կարգավորումները։ Դա ճիշտ է երթուղիչի համար և սխալ՝ տարբեր ցանցերին միացող նոութբուքի համար։ NetworkManager-ի ուղին արժե UUID որոնում և թունելը կապում է մեկ հիմնական կապի։ Այն բարձրանում է աշխատանքային SSID-ում և մնում է ցածր հյուրանոցային ցանցում։

Ձեռքով գրված unit-ը արժե ամենաշատը և տալիս է ամենաշատ վերահսկողությունը, ներառյալ այլ ծառայությունների նկատմամբ հերթականությունը։ Ծածկույթը որոշիչ գործոնն է։ Եթե մեքենան ունի մեկ ցանց և մեկ թունել, փաթեթավորված ծառայությունը ազնիվ է և կանխատեսելի։ Եթե թունելը պետք է հետևի կոնկրետ Wi-Fi ցանցի, երկրորդականը երեքից միակն է, որ արտահայտում է այդ պայմանը առանց լրացուցիչ սկրիպտավորման։

Ընտրեք մեկ տեր և հեռացրեք մյուսներին

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

# who is configured to start something?
grep -v '^#' /etc/default/openvpn
systemctl list-units 'openvpn*'
nmcli -g connection.secondaries connection show 'Work Wi-Fi'

# NetworkManager: attach the tunnel to the base link by UUID
TUNNEL=$(nmcli -g UUID connection show 'Corp Tunnel')
nmcli connection modify 'Work Wi-Fi' +connection.secondaries "$TUNNEL"

Եթե դուրս է բերվում հենց փաթեթավորված ուղին, արեք դա ճիշտ հաջորդականությամբ. AUTOSTART-ը դրեք none, գործարկեք systemctl daemon-reload, որպեսզի գեներացված unit-երը վերցնեն նոր ցանկը, ապա անջատեք այն ձևանմուշային օրինակը, որն այլևս չեք ուզում։ Վերբեռնումը բաց թողնելը հին unit-երը թողնում է ակտիվ, և թվում է, թե փոփոխությունն ազդեցություն չի ունեցել։

Կախվող կանգը առանձին խնդիր է՝ սահմանափակ պատասխանով։ TimeoutStopSec-ը սահմանափակում է, թե որքան է systemd-ը սպասում SIGKILL ուղարկելուց առաջ։ Drop-in ֆայլը դա սահմանելու ճիշտ տեղն է, որովհետև փաթեթավորված unit-ը խմբագրելը փոփոխությունը կորցնում է հաջորդ թարմացման ժամանակ։

Ստուգեք, թե իրականում ինչ գործարկվեց

Վերաբեռնեք և կարդացեք ապացույցները՝ կարգավորումների ֆայլին վստահելու փոխարեն։ Թունելին տիրացող unit-ը ցույց կտա ակտիվ վիճակ և բեռնմանը համապատասխան մեկնարկի ժամանակի դրոշմ, իսկ VPN միջերեսը գոյություն կունենա մինչև ձեր մուտքը։

systemctl is-enabled openvpn-client@office
systemctl status openvpn-client@office --no-pager
nmcli -f GENERAL.STATE,connection.secondaries connection show 'Work Wi-Fi'
ip -brief link show tun0

Այստեղ տեղ ունի ևս մեկ ստուգում. համոզվեք, որ unit-ի ExecStart-ը ցույց է տալիս այն բինարին, որ դուք մտածում եք։ Տեղում կոմպիլացված հաճախորդը կամ snap փաթեթը հաճախ պահանջում է բացահայտ ուղի կամ snap run փաթաթան, որովհետև systemd-ը չի ժառանգում ձեր shell-ի որոնման կարգը։ command -v openvpn-ի համեմատությունը unit ֆայլի հետ դա լուծում է վայրկյանների ընթացքում։

Գրեք ընտրված տիրոջը մեքենայի նշումներում՝ պրոֆիլի անվան կողքին։ Հաջորդ մարդը, ով կզբաղվի բացակայող թունելով, կսկսի այդ տողից՝ համեմատությունը կրկնելու փոխարեն։

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