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 ಗಳು ಸಕ್ರಿಯವಾಗಿ ಉಳಿಯುತ್ತವೆ, ಇದು ಬದಲಾವಣೆ ಯಾವ ಪರಿಣಾಮವೂ ಬೀರಲಿಲ್ಲ ಎಂಬಂತೆ ಕಾಣುತ್ತದೆ.
ನೇತಾಡುವ ನಿಲುಗಡೆ ಬೇರೆ ಸಮಸ್ಯೆ, ಅದಕ್ಕೆ ಸೀಮಿತ ಉತ್ತರವಿದೆ. 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 ಫೈಲ್ನೊಂದಿಗೆ ಹೋಲಿಸಿದರೆ ಅದು ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಬಗೆಹರಿಯುತ್ತದೆ.
ಆಯ್ಕೆ ಮಾಡಿದ ಮಾಲೀಕರನ್ನು ಪ್ರೊಫೈಲ್ ಹೆಸರಿನ ಪಕ್ಕದಲ್ಲಿ ಯಂತ್ರದ ಟಿಪ್ಪಣಿಗಳಲ್ಲಿ ಬರೆಯಿರಿ. ಕಾಣೆಯಾದ ಟನೆಲ್ ಅನ್ನು ಡೀಬಗ್ ಮಾಡುವ ಮುಂದಿನ ವ್ಯಕ್ತಿ ಹೋಲಿಕೆಯನ್ನು ಪುನರಾವರ್ತಿಸುವ ಬದಲು ಆ ಸಾಲಿನಿಂದ ಪ್ರಾರಂಭಿಸುತ್ತಾನೆ.