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 वर ठेवा, तयार झालेल्या unit नवीन यादी घेतील यासाठी systemctl daemon-reload चालवा, मग आता नको असलेली टेम्प्लेट इन्स्टन्स बंद करा. रीलोड वगळल्यास जुने unit सक्रिय राहतात, आणि बदलाचा काही परिणाम झाला नाही असे वाटते.
अडकणारा स्टॉप वेगळी समस्या आहे आणि तिचे उत्तर मर्यादित आहे. TimeoutStopSec SIGKILL पाठवण्यापूर्वी systemd किती वेळ थांबेल हे मर्यादित करते. ते सेट करण्याची योग्य जागा 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 तुमच्या शेलचा शोध क्रम वारसा घेत नाही. command -v openvpn ची unit फाइलशी तुलना केल्यास ते सेकंदात ठरते.
निवडलेला मालक प्रोफाइल नावाच्या शेजारी यंत्राच्या नोंदींमध्ये लिहा. गहाळ टनेल डीबग करणारी पुढची व्यक्ती तुलना पुन्हा न करता त्याच ओळीपासून सुरुवात करेल.