Systemd ընդդեմ NetworkManager-ի. ո՞վ է գործարկում VPN-ը բեռնման պահին
Երեք մեխանիզմ կարող են բարձրացնել նույն Ubuntu պրոֆիլը, յուրաքանչյուրը տարբեր ազդակով։ Համեմատեք դրանք, պահեք մեկ տիրոջ և հեռացրեք կրկնօրինակը։
Նույն պատկերից երկու Ubuntu մեքենա, մեկ VPN պրոֆիլ, հակառակ արդյունքներ մուտքի պահին. մեկում թունելը բարձրացած է մինչև աշխատասեղանի հայտնվելը, մյուսում այն երբեք չի բարձրանում։ Պրոֆիլը այստեղ փոփոխական չէ։ Տարբերությունն այն է, թե երեք բաղադրիչներից որին է հանձնարարվել գործարկել այն, և այդ երեքը չեն կիսում մեկ անջատիչ։
Դրանք կողք կողքի համեմատելն ավելի արագ է, քան գուշակելը։ Նրանցից յուրաքանչյուրը ձախողվում է ճանաչելի ձևով, և հենց դա է համեմատությունն արժեքավոր դարձնում։
Երեք գործարկիչ՝ երեք տարբեր ազդակներով
Փաթեթավորված openvpn ծառայությունը ամենահին ուղին է։ Նրա init սկրիպտը ինքնագործարկման ցանկ է կարդում /etc/default/openvpn ֆայլից։ Եթե այդ ցանկը մեկնաբանված է կամ դատարկ է թողնված, սկրիպտը գործարկում է այդ պանակում գտած յուրաքանչյուր կարգավորում՝ ձեր ավելացրած միակի փոխարեն։ Մեկ թունելի համար ավելացված մեկ ֆայլը կարող է լուռ բարձրացնել մի քանիսը։
| Starter | What triggers it | Typical failure |
|---|---|---|
| Init script and templated units | Boot, plus anything in the autostart list | Starts every config, not the one you meant |
| NetworkManager secondary | Activation of the base Wi-Fi or Ethernet profile | Nothing happens until that base link comes up |
| Hand-written unit or wrapper | Whatever its WantedBy and ExecStart say | Runs 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 ֆայլի հետ դա լուծում է վայրկյանների ընթացքում։
Գրեք ընտրված տիրոջը մեքենայի նշումներում՝ պրոֆիլի անվան կողքին։ Հաջորդ մարդը, ով կզբաղվի բացակայող թունելով, կսկսի այդ տողից՝ համեմատությունը կրկնելու փոխարեն։