ਇੱਕ vpnc ਪਰੋਫਾਈਲ ਰੋਮਿੰਗ ਤੋਂ ਬਾਅਦ ਸਾਫ਼ ਤਰੀਕੇ ਨਾਲ ਮੁੜ ਜੁੜਦਾ ਹੈ; ਤਿੰਨੇ ਵਾਰੀ-ਵਾਰੀ ਇੱਕ ਦੂਜੇ ਦੇ ਸਾਕਟ, ਰੂਟ ਅਤੇ ਰਿਜ਼ਾਲਵਰ ਦੀ ਹਾਲਤ ਤੋੜਦੇ ਹਨ। ਪੈਕੇਜ ਨਾਲ ਆਉਣ ਵਾਲੀ ਮੁੜ-ਜੁੜਨ ਸਕ੍ਰਿਪਟ ਇੱਕ ਟਨਲ ਲਈ ਲਿਖੀ ਗਈ ਹੈ, ਇਸ ਲਈ ਜਦੋਂ ਵੀ ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਇੱਕ ਹੇਠਾਂ ਹੁੰਦਾ ਹੈ ਤਾਂ ਇਹ ਹਰ ਪਰੋਫਾਈਲ ਮੁੜ ਸ਼ੁਰੂ ਕਰਦੀ ਹੈ। ਇਸਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ਤਿੰਨ ਚੀਜ਼ਾਂ ਚਾਹੀਦੀਆਂ ਹਨ: ਵੱਖਰੇ ਲੋਕਲ ਪੋਰਟ, ਹਰ ਪਰੋਫਾਈਲ ਲਈ ਅਸਲ ਸੇਵਾ ਜਾਂਚਣ ਵਾਲੀ ਜਾਂਚ, ਅਤੇ ਇੱਕ ਕ੍ਰਮਬੱਧ ਲੜੀ ਜੋ ਕਦੇ ਵੀ ਦੋ ਕਨੈਕਸ਼ਨ ਇਕੱਠੇ ਨਹੀਂ ਚਲਾਉਂਦੀ।

ਹਰ ਪਰੋਫਾਈਲ ਨੂੰ ਆਪਣਾ ਲੋਕਲ ਪੋਰਟ ਦਿਓ

ਡਿਫ਼ਾਲਟ ਲੋਕਲ ਪੋਰਟ ਉੱਤੇ ਛੱਡਿਆ vpnc ਪਰੋਫਾਈਲ ਪਹਿਲਾਂ ਤੋਂ ਚੱਲ ਰਹੇ ਪਰੋਫਾਈਲ ਨਾਲ ਮੁਕਾਬਲਾ ਕਰਦਾ ਹੈ। ਪਹਿਲਾ ਪੋਰਟ ਫੜੀ ਰੱਖਦਾ ਹੈ ਤਾਂ ਦੂਜਾ ਕਨੈਕਸ਼ਨ ਫੇਲ੍ਹ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਲਾਗ ਦੀ ਲਾਈਨ ਲੋਕਲ ਟਕਰਾਅ ਦੀ ਥਾਂ ਗੇਟਵੇ ਸਮੱਸਿਆ ਵਰਗੀ ਦਿਸਦੀ ਹੈ। ਇਸਦੀ ਥਾਂ ਹਰ ਪਰੋਫਾਈਲ ਫਾਈਲ ਲਈ ਇੱਕ ਲਾਈਨ ਰੱਖੋ:

Local Port 0

ਸਿਫ਼ਰ ਕਰਨਲ ਨੂੰ ਥੋੜ੍ਹੇ ਸਮੇਂ ਦਾ ਪੋਰਟ ਚੁਣਨ ਦਿੰਦਾ ਹੈ, ਇਸ ਲਈ ਦੋ ਪਰੋਫਾਈਲ ਇਕੱਠੇ ਸਥਾਪਿਤ ਹੋ ਸਕਦੇ ਹਨ। ਹਰ ਫਾਈਲ ਦਾ ਨਾਮ ਉਸ ਗੇਟਵੇ ਅਤੇ ਸਮੂਹ ਉੱਤੇ ਰੱਖੋ ਜਿਸਦੀ ਇਹ ਸੇਵਾ ਕਰਦੀ ਹੈ, ਇਸਨੂੰ ਸਿਰਫ਼ root ਲਈ ਪੜ੍ਹਨਯੋਗ ਰੱਖੋ, ਅਤੇ ਹਮੇਸ਼ਾ ਸਾਂਝੇ ਡਿਫ਼ਾਲਟ ਦੀ ਥਾਂ ਮਿਲਦੇ-ਜੁਲਦੇ ਪਰੋਫਾਈਲ ਨਾਲ ਜੁੜੋ। ਕਿਸੇ ਦੇ ਪਰੋਫਾਈਲ ਦਾ ਨਾਮ ਬਦਲਣ ਤੋਂ ਬਾਅਦ ਸਾਂਝੀ ਡਿਫ਼ਾਲਟ ਫਾਈਲ ਹੀ ਉਹ ਤਰੀਕਾ ਹੈ ਜਿਸ ਨਾਲ ਸਕ੍ਰਿਪਟ ਗਲਤ ਟਨਲ ਮੁੜ ਜੋੜਦੀ ਹੈ।

ਪਰੋਫਾਈਲ ਫਾਈਲਾਂ ਵਿੱਚ ਪਛਾਣ ਪੱਤਰ ਹੁੰਦੇ ਹਨ, ਇਸ ਲਈ ਇਜਾਜ਼ਤਾਂ ਡਿਜ਼ਾਈਨ ਦਾ ਹਿੱਸਾ ਹਨ, ਘਰ ਦੇ ਕੰਮ ਦਾ ਨਹੀਂ। /etc/vpnc ਹੇਠ ਸਭ ਲਈ ਪੜ੍ਹਨਯੋਗ ਫਾਈਲ ਸਮੂਹ ਦਾ ਭੇਤ ਹਰ ਲੋਕਲ ਵਰਤੋਂਕਾਰ ਨੂੰ ਦੇ ਦਿੰਦੀ ਹੈ। ਮੋਡ 0600 ਰੱਖੋ ਅਤੇ ਮਾਲਕ root ਰੱਖੋ, ਅਤੇ ਸਕ੍ਰਿਪਟਾਂ ਨੂੰ ਭੇਤ ਆਰਗਿਊਮੈਂਟਾਂ ਵਿੱਚ ਕਾਪੀ ਕਰਨ ਦੀ ਥਾਂ ਫਾਈਲ ਨੂੰ root ਵਜੋਂ ਪੜ੍ਹਨ ਦਿਓ। ਇਸੇ ਲਈ ਜਾਂਚ ਸਕ੍ਰਿਪਟ ਨੂੰ ਕਦੇ ਵੀ ਫਾਈਲ ਦੀ ਸਮੱਗਰੀ ਲਾਗ ਵਿੱਚ ਨਹੀਂ ਛਾਪਣੀ ਚਾਹੀਦੀ।

ਹਰ ਪਰੋਫਾਈਲ ਲਈ ਇੱਕ ਸੇਵਾ ਜਾਂਚੋ, ਟਨਲ ਦਾ ਪਤਾ ਨਹੀਂ

ਟਨਲ ਦੇ ਆਪਣੇ ਪਤੇ ਉੱਤੇ ਭੇਜੀ ਈਕੋ ਬੇਨਤੀ ਮੁੱਖ ਤੌਰ ਉੱਤੇ ਇਹੀ ਸਾਬਤ ਕਰਦੀ ਹੈ ਕਿ ਇੰਟਰਫ਼ੇਸ ਮੌਜੂਦ ਹੈ। ਇਹ ਨਹੀਂ ਦੱਸਦੀ ਕਿ ਇਸਦੇ ਪਿੱਛੇ ਦਾ ਹੋਸਟ ਅਜੇ ਵੀ ਉਸ ਐਪਲੀਕੇਸ਼ਨ ਤੱਕ ਪਹੁੰਚਦਾ ਹੈ ਜੋ ਟਨਲ ਨੂੰ ਜਾਇਜ਼ ਠਹਿਰਾਉਂਦੀ ਹੈ। ਇੰਟਰਫ਼ੇਸ ਚਾਲੂ ਹੋ ਸਕਦਾ ਹੈ ਜਦੋਂ ਕਿ ਇਸਤੋਂ ਅੱਗੇ ਦਾ ਰੂਟ ਪਹਿਲਾਂ ਹੀ ਜਾ ਚੁੱਕਾ ਹੋਵੇ।

ਹਰ ਪਰੋਫਾਈਲ ਲਈ ਇੱਕ ਸੇਵਾ ਛੋਟੇ TCP ਸਮੇਂ-ਸੀਮਾ ਨਾਲ ਜਾਂਚੋ ਅਤੇ ਸਿਰਫ਼ ਉਹ ਪਰੋਫਾਈਲ ਮੁੜ ਜੋੜੋ ਜਿਸਦੀ ਜਾਂਚ ਫੇਲ੍ਹ ਹੋਈ। ਦੋ ਸਕਿੰਟ ਮੁਰਦਾ ਰਾਹ ਨੂੰ ਹੌਲੀ ਰਾਹ ਤੋਂ ਵੱਖ ਕਰਦੇ ਹਨ, ਅਤੇ TCP ਜਾਂਚ ਇਸ ਉੱਤੇ ਨਿਰਭਰ ਨਹੀਂ ਕਰਦੀ ਕਿ ਰਾਹ ਵਿੱਚ ਕਿਤੇ ICMP ਦੀ ਇਜਾਜ਼ਤ ਹੈ ਜਾਂ ਨਹੀਂ। ਪਰੋਫਾਈਲਾਂ ਵਿਚਕਾਰ ਸਿਰਫ਼ ਟਾਰਗਿਟ ਅਤੇ ਕਾਨਫਿਗ ਦਾ ਨਾਮ ਬਦਲੋ:

#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
  /usr/sbin/vpnc-connect ops.conf
fi

ਇਸਨੂੰ /usr/local/bin/ensure-vpn-ops.sh ਵਜੋਂ ਸੰਭਾਲੋ, ਇਸਨੂੰ ਚਲਾਉਣਯੋਗ ਬਣਾਓ, ਅਤੇ ਸਿਰਫ਼ ਜਾਂਚ ਦਾ ਟਾਰਗਿਟ ਅਤੇ ਕਾਨਫਿਗ ਦਾ ਨਾਮ ਬਦਲ ਕੇ ਹਰ ਪਰੋਫਾਈਲ ਲਈ ਦੁਹਰਾਓ। ਜੋ ਜਾਂਚ ਪ੍ਰੋਟੋਕਾਲ ਦੇ ਸਵਾਲ ਦਾ ਜਵਾਬ ਦਿੰਦੀ ਹੈ ਉਹ ਅਜਿਹੇ ਗੇਟਵੇ ਵਿੱਚੋਂ ਬਚ ਨਿਕਲਦੀ ਹੈ ਜੋ ਈਕੋ ਸੁੱਟਦੇ ਹਨ ਪਰ ਵਰਤੋਂਕਾਰਾਂ ਲਈ ਜ਼ਰੂਰੀ ਸੇਵਾਵਾਂ ਅਜੇ ਵੀ ਅੱਗੇ ਭੇਜਦੇ ਹਨ।

ਜਾਂਚਾਂ ਨੂੰ ਲੜੀ ਵਿੱਚ ਜੋੜੋ ਤਾਂ ਜੋ ਉਹ ਕਦੇ ਮੁਕਾਬਲਾ ਨਾ ਕਰਨ

ਪੈਕੇਜ ਵਾਲੀ ਮੁੜ-ਜੁੜਨ ਸਕ੍ਰਿਪਟ ਤੁਹਾਡੀਆਂ ਜਾਂਚਾਂ ਨੂੰ ਕ੍ਰਮ ਵਿੱਚ ਬੁਲਾ ਸਕਦੀ ਹੈ, ਅਤੇ ਕ੍ਰਮ ਹੀ ਪੂਰੀ ਗੱਲ ਹੈ। ਇਕੱਠੀਆਂ ਚੱਲਣ ਵਾਲੀਆਂ ਦੋ vpnc-connect ਕਾਲਾਂ ਰਾਊਟਿੰਗ ਸਾਰਣੀ ਨੂੰ ਅਜਿਹੇ ਕ੍ਰਮ ਵਿੱਚ ਮੁੜ ਲਿਖਦੀਆਂ ਹਨ ਜਿਸਨੂੰ ਕੋਈ ਨਿਯੰਤਰਿਤ ਨਹੀਂ ਕਰਦਾ, ਅਤੇ ਇਸੇ ਤਰ੍ਹਾਂ ਸਿਹਤਮੰਦ ਪਰੋਫਾਈਲ ਆਪਣਾ ਰੂਟ ਗੁਆ ਦਿੰਦਾ ਹੈ।

ਕਾਲਾਂ ਨੂੰ ਅਗਲੇ ਭਾਗ ਵਿੱਚ ਰੱਖੋ, ਹੇਠਲੇ ਇੰਟਰਫ਼ੇਸ ਲਈ ਥੋੜ੍ਹਾ ਸਥਿਰਤਾ ਵਿਲੰਬ ਜੋੜੋ, ਅਤੇ ਲੜੀ ਨੂੰ root ਦੀ cron ਸਾਰਣੀ ਤੋਂ ਤੈਅ ਕਰੋ, ਕਿਉਂਕਿ ਟਨਲ ਦੇ ਰੂਟ ਮੁੜ ਲਿਖ ਸਕਦਾ ਹੈ ਸਿਰਫ਼ root:

#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.sh

ਬੂਟ ਸਕ੍ਰਿਪਟ ਅਤੇ cron ਐਂਟਰੀ ਵਿਚਕਾਰ ਕ੍ਰਮ ਇੱਕੋ ਜਿਹਾ ਰੱਖੋ, ਕਿਉਂਕਿ ਬੂਟ ਸਮੇਂ ਵੱਖਰੇ ਕ੍ਰਮ ਵਿੱਚ ਚੱਲਣ ਵਾਲੀ ਲੜੀ ਅਸਲ ਵਿੱਚ ਦੂਜਾ ਪ੍ਰੋਗਰਾਮ ਹੈ। ਜਦੋਂ ਇੱਕ ਪਰੋਫਾਈਲ ਦੂਜੇ ਦੇ ਰੂਟਾਂ ਉੱਤੇ ਨਿਰਭਰ ਹੋਵੇ, ਨਿਰਭਰਤਾ ਪਹਿਲਾਂ ਰੱਖੋ ਅਤੇ ਪਿਛਲੀ ਟਨਲ ਦੇ ਅਜੇ ਉੱਪਰ ਆ ਰਹੇ ਹੋਣ ਵੇਲੇ ਅਗਲੀ ਜਾਂਚ ਨੂੰ ਨਿਰਦੋਸ਼ ਢੰਗ ਨਾਲ ਫੇਲ੍ਹ ਹੋਣ ਦਿਓ।

ਲਾਗ ਵੇਖੋ, ਫਿਰ ਜਾਣ-ਬੁੱਝ ਕੇ ਇੱਕ ਤੋੜੋ

ਹਰ ਵਾਰ ਚੱਲਣ ਲਈ ਇੱਕ ਲਾਈਨ ਲਾਗ ਕਰੋ — ਪਰੋਫਾਈਲ, ਜਾਂਚ ਦਾ ਟਾਰਗਿਟ, ਨਤੀਜਾ ਅਤੇ ਚੁੱਕਿਆ ਕਦਮ। ਇਸਦੇ ਬਿਨਾਂ ਹਰ ਮਿੰਟ ਡੋਲਦੀ ਟਨਲ ਬਿਲਕੁਲ ਉਸ ਵਰਗੀ ਦਿਸਦੀ ਹੈ ਜੋ ਕਦੇ ਡਿੱਗੀ ਹੀ ਨਹੀਂ, ਅਤੇ ਜਾਂਚ ਦੀ ਗਲਤੀ ਗੇਟਵੇ ਦੀ ਰੁਕਾਵਟ ਤੋਂ ਵੱਖ ਨਹੀਂ ਪਛਾਣੀ ਜਾ ਸਕਦੀ। ਲਾਗ ਇਹ ਵੀ ਸਾਬਤ ਕਰਦੀ ਹੈ ਕਿ ਲੜੀ ਨੇ ਸਿਰਫ਼ ਉਸੇ ਪਰੋਫਾਈਲ ਨੂੰ ਛੋਹਿਆ ਜੋ ਫੇਲ੍ਹ ਹੋਇਆ। ਇਸਨੂੰ ਅਜਿਹੀ ਥਾਂ ਲਿਖੋ ਜੋ ਰੀਬੂਟ ਤੋਂ ਬਾਅਦ ਵੀ ਰਹੇ, ਨਹੀਂ ਤਾਂ ਸਬੂਤ ਪ੍ਰਕਿਰਿਆ ਨਾਲ ਚਲੇ ਜਾਂਦੇ ਹਨ।

ਫਿਰ ਜਾਣ-ਬੁੱਝ ਕੇ ਇੱਕ ਟਨਲ ਤੋੜੋ ਅਤੇ ਵੇਖੋ ਕੀ ਹੁੰਦਾ ਹੈ। ਇੱਕੋ ਪਰੋਫਾਈਲ ਰੋਕੋ ਅਤੇ ਪੱਕਾ ਕਰੋ ਕਿ ਕਿਹੜੀਆਂ ਪ੍ਰਕਿਰਿਆਵਾਂ ਅਤੇ ਰੂਟ ਅਜੇ ਮੌਜੂਦ ਹਨ:

pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.log

ਰੋਕਿਆ ਪਰੋਫਾਈਲ ਹੀ ਮੁੜ ਜੁੜਨਾ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਬਾਕੀ ਸੈਸ਼ਨਾਂ ਨੂੰ ਆਪਣੀਆਂ ਪ੍ਰਕਿਰਿਆਵਾਂ ਅਤੇ ਆਪਣੇ ਰੂਟ ਦੋਵੇਂ ਰੱਖਣੇ ਚਾਹੀਦੇ ਹਨ। ਜੇ ਦੋ ਪਰੋਫਾਈਲ ਮੁੜ ਸ਼ੁਰੂ ਹੋਣ, ਤਾਂ ਤੁਹਾਡੀ ਲੜੀ ਕਿਤੇ ਸਮਾਨਾਂਤਰ ਚੱਲ ਰਹੀ ਹੈ ਜਿੱਥੇ ਤੁਸੀਂ ਉਮੀਦ ਨਹੀਂ ਕੀਤੀ ਸੀ।

ਪਹਿਰੇਦਾਰ ਨੂੰ ਕੀ ਨਹੀਂ ਕਰਨਾ ਚਾਹੀਦਾ

ਜੋ ਪਹਿਰੇਦਾਰ ਕੁਝ ਵੀ ਫੇਲ੍ਹ ਹੋਣ ਉੱਤੇ ਸਭ ਕੁਝ ਮੁੜ ਸ਼ੁਰੂ ਕਰ ਦਿੰਦਾ ਹੈ ਉਹ ਟੈਸਟ ਵਿੱਚ ਸਿਹਤਮੰਦ ਦਿਸਦਾ ਹੈ ਅਤੇ ਰੱਖ-ਰਖਾਅ ਵਿੰਡੋ ਵਿੱਚ ਰੁਕਾਵਟ ਪੈਦਾ ਕਰਦਾ ਹੈ। ਪਰੋਫਾਈਲ ਅਨੁਸਾਰ ਮੁੜ ਸ਼ੁਰੂ ਕਰੋ, ਕਦੇ ਵੀ ਵਿਸ਼ਵਵਿਆਪੀ ਨਹੀਂ।

ਜਦੋਂ ਗੇਟਵੇ ਉਸੇ ਪ੍ਰੋਟੋਕਾਲ ਲਈ ਸੰਭਾਲਿਆ ਹੋਇਆ ਕਲਾਇੰਟ ਦਿੰਦਾ ਹੈ ਤਾਂ ਉਸਨੂੰ ਤਰਜੀਹ ਦਿਓ, ਅਤੇ ਕਦੇ ਵੀ ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਪਾਸਵਰਡ ਹਾਰਡਕੋਡ ਨਾ ਕਰੋ ਜਾਂ ਕਮਾਂਡ ਲਾਈਨ ਉੱਤੇ ਨਾ ਭੇਜੋ, ਕਿਉਂਕਿ ਪਰੋਫਾਈਲ ਫਾਈਲ ਪਹਿਲਾਂ ਹੀ ਭੇਤ ਰੱਖਦੀ ਹੈ। ਜੇ ਟਨਲ ਉੱਪਰ ਆਉਣ ਤੋਂ ਬਾਅਦ ਕੋਈ ਕੰਮ ਆਮ ਵਰਤੋਂਕਾਰ ਵਜੋਂ ਚਲਾਉਣਾ ਪਵੇ, ਤਾਂ ਪੂਰੀ ਲੜੀ ਉਸ ਖਾਤੇ ਹੇਠ ਚਲਾਉਣ ਦੀ ਥਾਂ ਸਕ੍ਰਿਪਟ ਦੇ ਅੰਦਰੋਂ ਹੀ ਵਿਸ਼ੇਸ਼ ਅਧਿਕਾਰ ਘਟਾਓ। ਅੰਤ ਵਿੱਚ, ਮੁੜ ਜੁੜਨ ਤੋਂ ਬਾਅਦ ਰੂਟ ਦੁਬਾਰਾ ਪੜ੍ਹੋ, ਕਿਉਂਕਿ ਪਰੋਫਾਈਲ ਵੱਖਰੇ ਨਿਰਧਾਰਿਤ ਪਤੇ ਨਾਲ ਵਾਪਸ ਆ ਸਕਦਾ ਹੈ ਅਤੇ ਇੱਕ ਪੁਰਾਣਾ ਰੂਟ ਛੱਡ ਸਕਦਾ ਹੈ ਜਿਸਨੂੰ ਟਨਲ ਦੇ ਪਤੇ ਵੱਲ ਕੀਤੀ ਕੋਈ ਵੀ ਜਾਂਚ ਕਦੇ ਨਹੀਂ ਵੇਖੇਗੀ।

ਸੰਬੰਧਿਤ ਲੇਖ