Systemd vs 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-കൾ സജീവമായി തുടരും, അത് മാറ്റത്തിന് ഫലമില്ലാത്തതുപോലെ തോന്നിപ്പിക്കും.
തൂങ്ങിനിൽക്കുന്ന സ്റ്റോപ്പ് വേറിട്ട പ്രശ്നമാണ്, അതിന് പരിമിതമായ ഉത്തരമുണ്ട്. SIGKILL അയയ്ക്കുന്നതിനു മുമ്പ് systemd എത്രനേരം കാത്തിരിക്കണം എന്നത് TimeoutStopSec പരിമിതപ്പെടുത്തുന്നു. അത് സജ്ജമാക്കാൻ ശരിയായ സ്ഥലം 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 ഫയലുമായി താരതമ്യം ചെയ്താൽ അത് സെക്കൻഡുകളിൽ തീരും.
തിരഞ്ഞെടുത്ത ഉടമയെ പ്രൊഫൈൽ പേരിന് അടുത്ത് യന്ത്രത്തിന്റെ കുറിപ്പുകളിൽ എഴുതുക. കാണാതായ ടണൽ ഡീബഗ് ചെയ്യുന്ന അടുത്ത വ്യക്തി താരതമ്യം ആവർത്തിക്കാതെ ആ വരിയിൽ നിന്ന് തുടങ്ങും.