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