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 ਫਾਈਲ ਨਾਲ ਤੁਲਨਾ ਇਹ ਸਕਿੰਟਾਂ ਵਿੱਚ ਤੈਅ ਕਰ ਦਿੰਦੀ ਹੈ।
ਚੁਣੇ ਮਾਲਕ ਨੂੰ ਪ੍ਰੋਫਾਈਲ ਨਾਮ ਦੇ ਕੋਲ ਮਸ਼ੀਨ ਦੇ ਨੋਟਾਂ ਵਿੱਚ ਲਿਖੋ। ਗੁੰਮ ਟਨਲ ਡੀਬੱਗ ਕਰਨ ਵਾਲਾ ਅਗਲਾ ਵਿਅਕਤੀ ਤੁਲਨਾ ਦੁਹਰਾਉਣ ਦੀ ਥਾਂ ਉਸੇ ਕਤਾਰ ਤੋਂ ਸ਼ੁਰੂ ਕਰੇਗਾ।