VPN ਕਲਾਇੰਟ ਦੀ ਸਕ੍ਰਿਪਟਿੰਗ: ਪਾਸਵਰਡ ਤੋਂ ਪਹਿਲਾਂ ਪਰਤ ਚੁਣੋ
ਵਿਕਰੇਤਾ ਦੀ CLI, rasdial, ਐਪ ਦਾ ਇਰਾਦਾ ਜਾਂ UI ਆਟੋਮੇਸ਼ਨ ਹਰ ਇੱਕ ਵੱਖਰੇ ਢੰਗ ਨਾਲ ਅਸਫਲ ਹੁੰਦੇ ਹਨ। ਪਰਤ ਚੁਣੋ, ਗੁਪਤ ਨੂੰ argv ਤੋਂ ਬਾਹਰ ਰੱਖੋ, ਅਤੇ ਸਥਿਤੀ ਦੀ ਉਡੀਕ ਕਰੋ, ਨਿਕਾਸ ਕੋਡ ਦੀ ਨਹੀਂ।
ਸਕ੍ਰਿਪਟਾਂ VPN ਕਲਾਇੰਟਾਂ ਨੂੰ ਉਸੇ ਪਰਤ 'ਤੇ ਸ਼ੁਰੂ ਕਰਦੀਆਂ ਹਨ ਜੋ ਲੇਖਕ ਨੇ ਚੁਣੀ ਸੀ, ਅਤੇ ਉਹ ਪਰਤ ਘੱਟ ਹੀ ਉਹ ਹੁੰਦੀ ਹੈ ਜਿਸ ਦੀ ਕੰਮ ਨੂੰ ਲੋੜ ਸੀ। ਵਿਕਰੇਤਾ ਦੀ ਕਮਾਂਡ ਲਾਈਨ, ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਦਾ ਡਾਇਲਰ ਅਤੇ ਮੋਬਾਈਲ ਐਪ ਦਾ ਇਰਾਦਾ ਸਾਰੇ ਕਨੈਕਸ਼ਨ ਦੇ ਜੀਵਨ ਦੇ ਵੱਖ-ਵੱਖ ਬਿੰਦੂਆਂ 'ਤੇ ਵਾਪਸ ਆਉਂਦੇ ਹਨ। ਉਹ ਗੁਪਤ ਨੂੰ ਵੀ ਵੱਖਰੇ ਢੰਗ ਨਾਲ ਸੰਭਾਲਦੇ ਹਨ, ਅਤੇ ਇਹੀ ਅੰਤਰ ਤੈਅ ਕਰਦਾ ਹੈ ਕਿ ਪਾਸਵਰਡ ਮਸ਼ੀਨ 'ਤੇ ਹਰ ਵਰਤੋਂਕਾਰ ਨੂੰ ਦਿਸਦਾ ਹੈ ਜਾਂ ਨਹੀਂ। ਸਕ੍ਰਿਪਟ ਦੀ ਪਹਿਲੀ ਲਾਈਨ ਲਿਖਣ ਤੋਂ ਪਹਿਲਾਂ ਪਰਤ ਚੁਣੋ।
ਪਰਤ 1: ਵਿਕਰੇਤਾ ਦੀ ਕਮਾਂਡ ਲਾਈਨ
ਬਹੁਤੇ ਡੈਸਕਟਾਪ ਕਲਾਇੰਟ ਇੱਕ ਕਮਾਂਡ ਲਾਈਨ ਦਿੰਦੇ ਹਨ ਜੋ ਪ੍ਰੋਫਾਈਲ ਦਾ ਨਾਮ ਅਤੇ, ਬਹੁਤ ਵਾਰ, ਪਾਸਵਰਡ ਲੈਂਦੀ ਹੈ। Cisco ਦਾ ਪੁਰਾਣਾ ਕਲਾਇੰਟ ਵਰਤੋਂਕਾਰ ਅਤੇ ਪਾਸਵਰਡ ਆਰਗਿਊਮੈਂਟਾਂ ਨਾਲ connect ਕਿਰਿਆ ਸਵੀਕਾਰ ਕਰਦਾ ਸੀ; macOS ਅੰਦਰੂਨੀ ਸੇਵਾ ਨੂੰ networksetup ਰਾਹੀਂ ਪੇਸ਼ ਕਰਦਾ ਹੈ; NetworkManager nmcli ਨੂੰ ਜਵਾਬ ਦਿੰਦਾ ਹੈ। ਇਹ ਕਾਲਾਂ ਕਮਾਂਡ ਖਤਮ ਹੋਣ 'ਤੇ ਵਾਪਸ ਆਉਂਦੀਆਂ ਹਨ, ਜੋ ਉਹ ਪਲ ਨਹੀਂ ਜਦੋਂ ਟਨਲ ਵਰਤੋਂਯੋਗ ਹੁੰਦੀ ਹੈ। ਆਪਣੇ ਤੈਨਾਤ ਸੰਸਕਰਣ ਲਈ ਵਿਕਰੇਤਾ ਦਾ ਆਪਣਾ ਦਸਤਾਵੇਜ਼ ਪੜ੍ਹੋ, ਕਿਉਂਕਿ ਇਹ ਇੰਟਰਫੇਸ ਬਦਲਦੇ ਹਨ ਅਤੇ ਕੁਝ ਪੂਰੀ ਤਰ੍ਹਾਂ ਹਟਾ ਦਿੱਤੇ ਜਾਂਦੇ ਹਨ।
nmcli connection up "Work VPN"
networksetup -connectpppoeservice "Work VPN"
ਫਾਇਦਾ ਇਹ ਹੈ ਕਿ ਵਿਕਰੇਤਾ ਆਪਣਾ ਪ੍ਰੋਫਾਈਲ ਸਟੋਰ ਜਾਣਦਾ ਹੈ, ਇਸ ਲਈ ਕਾਲ ਉਹੀ ਕਨਫਿਗਰੇਸ਼ਨ ਵਰਤਦੀ ਹੈ ਜੋ GUI ਵਰਤਦਾ। ਨੁਕਸਾਨ ਇਹ ਹੈ ਕਿ ਹਰ ਵਿਕਰੇਤਾ ਆਪਣੀਆਂ ਕਿਰਿਆਵਾਂ ਘੜਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਕਲਾਇੰਟ ਲਈ ਲਿਖੀ ਸਕ੍ਰਿਪਟ ਦੂਜੇ 'ਤੇ ਨਹੀਂ ਜਾਂਦੀ। ਜਦੋਂ ਕਲਾਇੰਟ ਨਿਸ਼ਚਿਤ ਅਤੇ ਸੰਸਕਰਣ ਪਿੰਨ ਹੋਵੇ ਤਾਂ ਇਸ ਪਰਤ ਨੂੰ ਸਭ ਤੋਂ ਛੋਟਾ ਰਾਹ ਮੰਨੋ।
ਪਰਤ 2: ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਦੀ ਆਪਣੀ ਸੇਵਾ
Windows ਵਿੱਚ ਡਾਇਲਰ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਦਾ ਹਿੱਸਾ ਹੈ, ਅਤੇ ਇਹ ਵਿਕਰੇਤਾ ਦੇ ਪ੍ਰੋਫਾਈਲ ਸਟੋਰ ਦੀ ਬਜਾਏ ਫੋਨਬੁੱਕ ਐਂਟਰੀ ਦੇ ਵਿਰੁੱਧ ਕੰਮ ਕਰਦਾ ਹੈ। ਇਹ ਇਸ ਨੂੰ ਕਲਾਇੰਟਾਂ ਵਿੱਚ ਵਧੇਰੇ ਪੋਰਟੇਬਲ ਅਤੇ ਸੇਵਾ ਖਾਤੇ ਤੋਂ ਸਕ੍ਰਿਪਟ ਕਰਨਾ ਸੌਖਾ ਬਣਾਉਂਦਾ ਹੈ। ਇਸ ਦਾ ਮਤਲਬ ਇਹ ਵੀ ਹੈ ਕਿ ਕਨੈਕਸ਼ਨ ਇੱਕ ਥਾਂ ਮੌਜੂਦ ਹੋ ਸਕਦਾ ਹੈ ਅਤੇ ਦੂਜੀ ਥਾਂ ਨਹੀਂ, ਜੋ ਗਲਤ ਸੂਚੀ ਵਿੱਚ ਵੇਖਣ ਵਾਲਿਆਂ ਨੂੰ ਉਲਝਾਉਂਦਾ ਹੈ।
rasdial "Work VPN" user pass
Get-VpnConnection -Name "Work VPN" | Select-Object ConnectionStatus
ਜਦੋਂ ਐਂਟਰੀ ਬਣਾਉਣੀ ਜਾਂ ਹਟਾਉਣੀ ਹੋਵੇ ਤਾਂ ਇਸ ਨੂੰ ਡਾਇਲ ਕਰਨ ਦੀ ਬਜਾਏ PowerShell ਸਤਹ ਵਰਤੋ। WMI ਅਤੇ cmdlet ਪਰਤਾਂ ਉਹੀ ਵਸਤੂਆਂ ਵੱਖਰੇ ਨਾਮਾਂ ਨਾਲ ਪੇਸ਼ ਕਰਦੀਆਂ ਹਨ, ਅਤੇ ਹਟਾਉਣਾ ਡਿਸਕਨੈਕਟ ਕਰਨ ਤੋਂ ਵੱਖਰੀ ਕਿਰਿਆ ਹੈ। ਸਿਰਫ਼ ਡਾਇਲ ਕਰਨ ਵਾਲੀ ਸਕ੍ਰਿਪਟ ਮਾਈਗ੍ਰੇਸ਼ਨ ਤੋਂ ਬਾਅਦ ਪੁਰਾਣੀਆਂ ਐਂਟਰੀਆਂ ਛੱਡ ਦੇਵੇਗੀ। ਸਫਾਈ ਹੋਣ ਦਾ ਵਾਅਦਾ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਜਾਂਚੋ ਕਿ ਤੁਹਾਡਾ ਆਟੋਮੇਸ਼ਨ ਕਿਸ ਸਟੋਰ ਵਿੱਚ ਲਿਖਦਾ ਹੈ।
Remove-VpnConnection -Name "Old VPN" -Force
Get-VpnConnection
macOS ਵਿੱਚ ਸਮਾਨ ਨੈੱਟਵਰਕ ਸੇਵਾਵਾਂ ਦੀ ਸੂਚੀ ਹੈ, ਜਿੱਥੇ ਮੌਜੂਦਾ ਸੇਵਾ ਨਾਮ ਨਾਲ ਜੁੜਦੀ ਹੈ, ਮੌਕੇ 'ਤੇ ਬਣਾਈ ਨਹੀਂ ਜਾਂਦੀ।
ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਹਰ ਪਰਤ 'ਤੇ ਲੀਕ ਹੁੰਦੇ ਹਨ, ਇਸ ਲਈ ਚੈਨਲ ਚੁਣੋ
ਕਮਾਂਡ ਲਾਈਨ 'ਤੇ ਜੋ ਵੀ ਭੇਜਦੇ ਹੋ ਉਹ ਹਰ ਸਥਾਨਕ ਵਰਤੋਂਕਾਰ ਲਈ ਪ੍ਰੋਸੈਸ ਟੇਬਲ ਵਿੱਚ ਦਿਸਦਾ ਹੈ, ਅਤੇ ਆਮ ਤੌਰ 'ਤੇ ਸ਼ੈੱਲ ਇਤਿਹਾਸ ਵਿੱਚ ਵੀ ਬਚ ਜਾਂਦਾ ਹੈ। OpenVPN ਦਾ ਸਮਰਥਿਤ ਬਦਲ ਇਹ ਹੈ ਕਿ ਗੁਪਤ ਨੂੰ ਫਾਈਲ ਤੋਂ ਪੜ੍ਹੋ --askpass ਨਾਲ, ਅਤੇ ਫਾਈਲ ਨੂੰ ਆਪ ਉਹ ਅਨੁਮਤੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ ਜੋ ਇਸ 'ਤੇ ਰੱਖੇ ਭਰੋਸੇ ਨਾਲ ਮੇਲ ਖਾਂਦੀਆਂ ਹੋਣ। ਨਾਮਿਤ ਪਾਈਪ ਗੁਪਤ ਨੂੰ ਡਿਸਕ 'ਤੇ ਲਿਖਣ ਤੋਂ ਬਚਾਉਂਦੀ ਹੈ ਪਰ ਹਰ ਉਸ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਜੋ ਇਸ ਨੂੰ ਖੋਲ੍ਹ ਸਕਦੀ ਹੈ ਉੱਥੇ ਲਿਖਣ ਦਿੰਦੀ ਹੈ। Windows ਵਿੱਚ ਗੁਪਤ ਨੂੰ ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਮੈਨੇਜਰ ਵਿੱਚ, ਜਾਂ ਇੱਕ ਫਾਈਲ ਵਿੱਚ ਰੱਖੋ ਜਿਸ ਨੂੰ ਸਿਰਫ਼ ਸੇਵਾ ਖਾਤਾ ਪੜ੍ਹ ਸਕਦਾ ਹੈ, ਅਤੇ ਕਦੇ ਵੀ ਬੈਚ ਫਾਈਲ ਵਿੱਚ ਸ਼ਬਦੀ ਰੂਪ ਵਿੱਚ ਨਾ ਰੱਖੋ।
openvpn --config /etc/openvpn/work.conf --askpass /etc/openvpn/work.secret --auth-nocache --daemon
ls -l /etc/openvpn/work.secret
ਇਹੀ ਨਿਯਮ ਟੋਕਨ ਅਤੇ ਇੱਕ ਵਾਰ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਕੋਡਾਂ 'ਤੇ ਵੀ ਲਾਗੂ ਹੁੰਦਾ ਹੈ: ਜੇ ਆਟੋਮੇਸ਼ਨ ਨੂੰ ਇਹਨਾਂ ਦੀ ਲੋੜ ਹੈ ਤਾਂ ਆਟੋਮੇਸ਼ਨ ਨੂੰ ਇੱਕ ਚੈਨਲ ਚਾਹੀਦਾ ਹੈ ਜੋ ਕਮਾਂਡ ਲਾਈਨ ਆਰਗਿਊਮੈਂਟ ਨਹੀਂ। ਜਦੋਂ ਤੰਤਰ ਬਦਲੋ ਤਾਂ ਗੁਪਤ ਨੂੰ ਘੁਮਾਓ, ਕਿਉਂਕਿ ਪੁਰਾਣਾ ਮੁੱਲ ਕਿਤੇ ਲੌਗ ਵਿੱਚ ਪਿਆ ਹੈ। ਕੰਮ ਕਰਨ ਵਾਲੀ ਅਤੇ ਲੀਕ ਹੋਣ ਵਾਲੀ ਸਕ੍ਰਿਪਟ ਕੰਮ ਕਰਨ ਵਾਲੀ ਸਕ੍ਰਿਪਟ ਨਹੀਂ ਹੈ।
ਸਥਿਤੀ ਦੀ ਉਡੀਕ ਕਰੋ, ਫਿਰ ਇੱਕ ਹੀ ਮਾਲਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰੋ
ਇਹਨਾਂ ਕਾਲਾਂ ਵਿੱਚੋਂ ਹਰ ਇੱਕ ਟਨਲ ਤਿਆਰ ਹੋਣ ਤੋਂ ਪਹਿਲਾਂ ਵਾਪਸ ਆਉਂਦੀ ਹੈ, ਇਸ ਲਈ ਉਹ ਸਥਿਤੀ ਪੁੱਛੋ ਜੋ ਕਲਾਇੰਟ ਪੇਸ਼ ਕਰਦਾ ਹੈ ਜਾਂ ਇਸ ਦੇ ਅੰਦਰ ਕਿਸੇ ਮੰਜ਼ਿਲ ਨੂੰ ਸਮਾਂ-ਸੀਮਾ ਨਾਲ ਜਾਂਚੋ। ਕਨੈਕਸ਼ਨ ਕਾਲ ਤੋਂ ਤੁਰੰਤ ਬਾਅਦ ਫਾਈਲਾਂ ਕਾਪੀ ਕਰਨਾ ਜਾਂ ਡੇਟਾਬੇਸ ਕਨੈਕਸ਼ਨ ਖੋਲ੍ਹਣਾ ਇੱਕ ਦੌੜ ਹੈ, ਅਤੇ ਇਹ ਰੁਕ-ਰੁਕ ਕੇ ਇਸ ਤਰ੍ਹਾਂ ਅਸਫਲ ਹੁੰਦੀ ਹੈ ਜੋ ਨੈੱਟਵਰਕ ਖਰਾਬੀ ਵਰਗੀ ਲੱਗਦੀ ਹੈ।
ip link show tun0
nmcli -t -f GENERAL.STATE connection show "Work VPN"
curl -sS --max-time 5 https://app.internal.example/health -o /dev/null
ਡਿਸਕਨੈਕਟ ਦਾ ਉਲਟੀ ਦਿਸ਼ਾ ਵਿੱਚ ਉਹੀ ਸਮੱਸਿਆ ਹੈ: ਪ੍ਰਕਿਰਿਆ ਰਾਹਾਂ ਦੇ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਨਿਕਲ ਸਕਦੀ ਹੈ। ਕਲਾਇੰਟ ਦੇ ਹੁੱਕ ਜਿੱਥੇ ਮੌਜੂਦ ਹੋਣ ਉੱਥੇ ਵਰਤੋ, ਜਿਵੇਂ OpenVPN ਦੇ up ਅਤੇ down ਸਕ੍ਰਿਪਟਾਂ ਜਾਂ systemd ਯੂਨਿਟ ਦਾ ExecStartPost, ਕਿਉਂਕਿ ਉਹ ਉਸੇ ਬਿੰਦੂ 'ਤੇ ਚੱਲਦੇ ਹਨ ਜੋ ਸੱਚਮੁੱਚ ਤੁਹਾਡੇ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਹੁੱਕ ਉਹਨਾਂ ਦੇ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰਾਂ ਨਾਲ ਚੱਲਦੇ ਹਨ ਜਿਨ੍ਹਾਂ ਨੇ ਉਹਨਾਂ ਨੂੰ ਬੁਲਾਇਆ, ਇਸ ਲਈ ਨੈੱਟਵਰਕ ਮੁੜ ਸ਼ੁਰੂ ਕਰਨ ਵਾਲੇ ਹੁੱਕ ਨੂੰ ਧਾਰਨਾ ਦੀ ਬਜਾਏ ਸਪੱਸ਼ਟ ਨਿਯਮ ਚਾਹੀਦਾ ਹੈ। ਕਨੈਕਸ਼ਨ ਦੇ ਪੂਰੇ ਜੀਵਨ ਵਿੱਚ ਠੀਕ ਇੱਕ ਮਾਲਕ ਰੱਖੋ।
ਜਦੋਂ ਦੋ ਨਿਗਰਾਨ ਇੱਕੋ ਪ੍ਰੋਫਾਈਲ ਸ਼ੁਰੂ ਅਤੇ ਬੰਦ ਕਰਦੇ ਹਨ, ਨਤੀਜਾ ਮੁੜ-ਕਨੈਕਟ ਦਾ ਲੂਪ ਹੁੰਦਾ ਹੈ ਜੋ ਪ੍ਰਦਾਤਾ ਦੀ ਰੁਕਾਵਟ ਵਾਂਗ ਪੜ੍ਹਿਆ ਜਾਂਦਾ ਹੈ। ਰਨਬੁੱਕ ਤਦ ਖਤਮ ਹੁੰਦੀ ਹੈ ਜਦੋਂ ਪਰਤ ਦਸਤਾਵੇਜ਼ੀ ਹੋਵੇ, ਗੁਪਤ ਦਾ ਇੱਕ ਚੈਨਲ ਹੋਵੇ ਜੋ argv ਨਹੀਂ, ਉਡੀਕ ਦੀ ਸ਼ਰਤ ਸਮਾਂ-ਸੀਮਾ ਨਾਲ ਸਥਿਤੀ ਜਾਂਚ ਹੋਵੇ, ਅਤੇ ਇੱਕ ਪ੍ਰਕਿਰਿਆ ਜੀਵਨ ਚੱਕਰ ਦੀ ਮਾਲਕ ਹੋਵੇ।