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 सीमित करता है कि 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 फ़ाइल से तुलना यह सेकंडों में तय कर देती है।
चुने गए मालिक को प्रोफ़ाइल नाम के पास मशीन के नोट्स में लिखें। गुम टनल को डीबग करने वाला अगला व्यक्ति तुलना दोहराने के बजाय उसी पंक्ति से शुरू करेगा।