OpenVPN ਹੁੱਕ ਘਟਨਾਵਾਂ: ਨਾਮ ਅਤੇ ਸਮਾਂ-ਛਾਪ ਕਿਉਂ ਕੁੰਜੀ ਨਹੀਂ ਹਨ
ਡਿਸਕਨੈਕਟ ਹੁੱਕ ਕਨੈਕਸ਼ਨ ਦਾ ਸਮਾਂ ਦੱਸਦਾ ਹੈ, ਡਿਸਕਨੈਕਟ ਦਾ ਸਮਾਂ ਨਹੀਂ। ਵਰਤੋਂਕਾਰ ਨਾਮ ਨਾਲ ਜੋੜਨ ’ਤੇ ਇਹ ਗਲਤ ਸੈਸ਼ਨ ਬੰਦ ਕਰ ਸਕਦਾ ਹੈ; ਇਸ ਦੀ ਥਾਂ ਪਛਾਣ ਰੱਖੋ।
ਇੱਕੋ ਨਾਮ ਹੇਠ ਦੂਜਾ ਕਨੈਕਸ਼ਨ ਸ਼ੁਰੂ ਹੋ ਚੁੱਕਣ ਤੋਂ ਬਾਅਦ ਡਿਸਕਨੈਕਟ ਰਿਕਾਰਡ ਆਉਂਦਾ ਹੈ, ਅਤੇ ਉਸ ਵਰਤੋਂਕਾਰ ਦੀ ਨਵੀਨਤਮ ਕਤਾਰ ਅੱਪਡੇਟ ਕਰਨ ਵਾਲਾ ਹੈਂਡਲਰ ਗਲਤ ਸੈਸ਼ਨ ਬੰਦ ਕਰਦਾ ਹੈ। ਗਲਤੀ ਸਮਾਂ-ਛਾਪ ਦੀ ਤੁਲਨਾ ਵਿੱਚ ਨਹੀਂ ਹੈ। ਗਲਤੀ ਇਸ ਧਾਰਨਾ ਵਿੱਚ ਹੈ ਕਿ ਨਾਮ ਅਤੇ ਇੱਕ ਪੂਰਾ ਸਕਿੰਟ ਇੱਕ ਸੈਸ਼ਨ ਦੀ ਪਛਾਣ ਕਰਦੇ ਹਨ। ਹੁੱਕ ਘਟਨਾਵਾਂ ਕਨੈਕਸ਼ਨਾਂ ਦਾ ਵਰਣਨ ਕਰਦੀਆਂ ਹਨ, ਅਤੇ ਕਨੈਕਸ਼ਨ ਨੂੰ ਅਜਿਹੀ ਕੁੰਜੀ ਚਾਹੀਦੀ ਹੈ ਜੋ ਸਿਰਫ਼ ਉਸੇ ਦੀ ਹੋਵੇ।
ਡਿਸਕਨੈਕਟ ਵੇਰੀਏਬਲਾਂ ਦਾ ਅਸਲ ਅਰਥ ਕੀ ਹੈ, ਇਸ ਤੋਂ ਸ਼ੁਰੂ ਕਰੋ। ਤਦ ਹੀ ਪਛਾਣਕਰਤਾ ਦੀ ਚੋਣ ਅਰਥਪੂਰਨ ਹੁੰਦੀ ਹੈ।
ਡਿਸਕਨੈਕਟ ਹੁੱਕ ਅਸਲ ਵਿੱਚ ਕੀ ਚੁੱਕਦਾ ਹੈ
Community OpenVPN 2.6 ਵਿੱਚ, ਹੁੱਕ ਸੰਦਰਭ time_unix ਨੂੰ ਉਸ ਪਲ ਵਜੋਂ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ ਜਦੋਂ ਕਲਾਇੰਟ ਜੁੜਿਆ; ਇਹ ਕਨੈਕਟ ਹੁੱਕ ਚੱਲਣ ਤੋਂ ਪਹਿਲਾਂ ਸੈੱਟ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਬਾਅਦ ਵਿੱਚ ਡਿਸਕਨੈਕਟ ਹੁੱਕ ਸਰਗਰਮ ਹੋਣ ’ਤੇ ਇਹ ਦੁਬਾਰਾ ਪਰਿਭਾਸ਼ਿਤ ਨਹੀਂ ਹੁੰਦਾ। time_duration ਉਸ ਸੈਸ਼ਨ ਦੀ ਲੰਬਾਈ ਸਕਿੰਟਾਂ ਵਿੱਚ ਦਿੰਦਾ ਹੈ, ਇਸ ਲਈ ਅੰਤ ਲਗਭਗ ਕਨੈਕਸ਼ਨ ਦਾ ਸਮਾਂ ਅਤੇ ਮਿਆਦ ਦਾ ਜੋੜ ਹੈ। ਦੋਵੇਂ ਪੂਰੇ ਸਕਿੰਟ ਹਨ, ਅਤੇ ਇਨ੍ਹਾਂ ਵਿੱਚੋਂ ਕੋਈ ਵੀ ਉਹ ਪਲ ਨਹੀਂ ਜਦੋਂ ਤੁਹਾਡੇ ਡੇਟਾਬੇਸ ਨੇ ਘਟਨਾ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕੀਤੀ। ਇਹ ਤਿੰਨ ਸਮੇਂ ਵੱਖਰੇ ਰੱਖਣਾ ਹੀ ਸਹਿ-ਸੰਬੰਧ ਨੂੰ ਸਿਰਫ਼ ਟੈਸਟਿੰਗ ਦੌਰਾਨ ਸਹੀ ਦਿਖਣ ਦੀ ਥਾਂ ਅਸਲ ਵਿੱਚ ਟਿਕਾਈ ਰੱਖਦਾ ਹੈ।
ਇਹ ਗਣਿਤ ਲਿਖਣ ਯੋਗ ਹੈ, ਕਿਉਂਕਿ ਇਹ ਹੁੱਕ ਆਪ ਦਿੰਦਾ ਇੱਕੋ-ਇੱਕ ਅੰਤ ਸਮਾਂ ਹੈ। ਪ੍ਰੋਸੈਸਿੰਗ ਦੇਰੀ ਅਤੇ ਹੋਸਟਾਂ ਵਿਚਕਾਰ ਘੜੀ ਦਾ ਫ਼ਰਕ ਅਜੇ ਵੀ ਇਸ ਤੋਂ ਬਾਹਰ ਹਨ।
ਸਪਸ਼ਟ ਜੋੜੀ ਵਿਲੱਖਣ ਕਿਉਂ ਨਹੀਂ ਹੈ
ਨਾਮ ਨੂੰ ਕਨੈਕਸ਼ਨ ਦੇ ਸਮੇਂ ਨਾਲ ਜੋੜਨਾ ਖੋਜ ਨੂੰ ਸੀਮਤ ਕਰਦਾ ਹੈ ਅਤੇ ਫਿਰ ਵੀ ਸੈਸ਼ਨ ਦੀ ਪਛਾਣ ਨਹੀਂ ਕਰਦਾ। ਕਲਾਇੰਟ ਉਸੇ ਸਕਿੰਟ ਵਿੱਚ ਦੁਬਾਰਾ ਜੁੜ ਸਕਦਾ ਹੈ, ਇਸ ਲਈ ਦੋ ਸੈਸ਼ਨ ਦੋਵੇਂ ਮੁੱਲ ਸਾਂਝੇ ਕਰ ਸਕਦੇ ਹਨ। ਦੋ ਡੈਮਨ ਇੰਸਟੈਂਸ, ਜਾਂ ਉਹੀ ਸੰਰਚਨਾ ਰੱਖਣ ਵਾਲਾ ਸਰਵਰ ਬਦਲ, ਉਹ ਜੋੜੀ ਵੱਖ-ਵੱਖ ਪ੍ਰਕਿਰਿਆਵਾਂ ਤੋਂ ਬਣਾ ਸਕਦੇ ਹਨ। ਟਨਲ ਪਤੇ ਵੀ ਉਸੇ ਕਾਰਨ ਦੁਬਾਰਾ ਵਰਤੇ ਜਾਂਦੇ ਹਨ, ਜੋ ਉਨ੍ਹਾਂ ਨੂੰ ਸੈਸ਼ਨ ਦੇ ਗੁਣ ਬਣਾਉਂਦਾ ਹੈ, ਸੈਸ਼ਨ ਦੇ ਪਛਾਣਕਰਤਾ ਨਹੀਂ।
ਅਸਫਲਤਾ ਦਾ ਢੰਗ ਸ਼ਾਂਤ ਹੈ। ਪਹਿਲੇ ਸੈਸ਼ਨ ਲਈ ਦੇਰ ਨਾਲ ਆਇਆ ਡਿਸਕਨੈਕਟ ਨਵੀਨਤਮ ਕਤਾਰ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ ਅਤੇ ਦੂਜੇ ਸੈਸ਼ਨ ਦੁਆਰਾ ਅਜੇ ਵਰਤੀ ਜਾ ਰਹੀ ਨਿਰਧਾਰਨ ਨੂੰ ਸੇਵਾਮੁਕਤ ਕਰਦਾ ਹੈ, ਇਸ ਲਈ ਵਰਤੋਂਕਾਰ ਆਪਣੀ ਕੀਤੀ ਬਿਨਾਂ ਅਚਾਨਕ ਪਹੁੰਚ ਦਾ ਨੁਕਸਾਨ ਭੁਗਤਦਾ ਹੈ। ਬਾਅਦ ਵਿੱਚ ਸਹੀ ਦਿਖਣ ਵਾਲੀ ਕਤਾਰ ਗਿਣਤੀ ਸਮੱਸਿਆ ਨੂੰ ਲੱਭਣਾ ਹੋਰ ਔਖਾ ਬਣਾਉਂਦੀ ਹੈ।
ਸਥਿਰ ਪਛਾਣ ਕਿੱਥੋਂ ਆਉਂਦੀ ਹੈ
ਪ੍ਰਬੰਧਨ ਇੰਟਰਫ਼ੇਸ ਹਰ ਕਲਾਇੰਟ ਨੂੰ ਕਲਾਇੰਟ-ਇੰਸਟੈਂਸ ਪਛਾਣਕਰਤਾ ਦਿੰਦਾ ਹੈ, ਅਤੇ ਉਹ ਪਛਾਣਕਰਤਾ ਉਸ ਡੈਮਨ ਇੰਸਟੈਂਸ ਤੱਕ ਸੀਮਿਤ ਹੈ ਜਿਸਨੇ ਇਹ ਜਾਰੀ ਕੀਤਾ। ਕੰਮਯੋਗ ਬਾਹਰੀ ਕੁੰਜੀ ਸਥਿਰ ਸਰਵਰ ਪਛਾਣਕਰਤਾ, ਡੈਮਨ ਸ਼ੁਰੂ ਹੋਣ ’ਤੇ ਬਦਲਣ ਵਾਲਾ ਯੁੱਗ ਅਤੇ ਉਹ ਕਲਾਇੰਟ ID ਜੋੜਦੀ ਹੈ। ਯੁੱਗ ਜ਼ਰੂਰੀ ਹੈ ਕਿਉਂਕਿ ਪਛਾਣਕਰਤਾ ਪ੍ਰਕਿਰਿਆ ਨਾਲ ਮੁੜ ਸ਼ੁਰੂ ਹੁੰਦੇ ਹਨ, ਅਤੇ ਨੰਗਾ ਪ੍ਰਕਿਰਿਆ ID ਬਾਅਦ ਵਿੱਚ ਕਿਸੇ ਅਸੰਬੰਧਿਤ ਚੀਜ਼ ਵੱਲੋਂ ਮੁੜ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ।
ਚਾਈਲਡ ਕਨੈਕਟ ਸਕ੍ਰਿਪਟ ਦੇ ਅੰਦਰ ਸੈੱਟ ਕੀਤੇ ਵਾਤਾਵਰਣ ਵੇਰੀਏਬਲ ਮੂਲ ਡੈਮਨ ਦੀ ਬਾਅਦ ਦੀ ਡਿਸਕਨੈਕਟ ਸਕ੍ਰਿਪਟ ਤੱਕ ਨਹੀਂ ਜਾਂਦੇ, ਕਿਉਂਕਿ ਉਹ ਸਕ੍ਰਿਪਟਾਂ ਆਪਣੇ ਵਾਤਾਵਰਣਾਂ ਵਾਲੀਆਂ ਵੱਖਰੀਆਂ ਪ੍ਰਕਿਰਿਆਵਾਂ ਵਜੋਂ ਚੱਲਦੀਆਂ ਹਨ। ਇਸ ਲਈ ਕਨੈਕਸ਼ਨ ਸਮੇਂ UUID ਪੈਦਾ ਕਰਨਾ ਅੱਧਾ ਹੱਲ ਹੈ। ਡਿਸਕਨੈਕਟ ਪਾਸੇ ਨੂੰ ਉਹੀ UUID ਨਾਮ ਦੇ ਸਕਣਾ ਚਾਹੀਦਾ ਹੈ, ਜਿਸਦਾ ਅਰਥ ਹੈ ਪਛਾਣ ਨੂੰ ਅਜਿਹੀ ਥਾਂ ਰਹਿਣਾ ਚਾਹੀਦਾ ਹੈ ਜਿੱਥੇ ਦੋਵੇਂ ਘਟਨਾਵਾਂ ਪਹੁੰਚ ਸਕਣ।
ਸੇਵਾਮੁਕਤੀ ਨੂੰ ਸ਼ਰਤੀ ਅਤੇ ਇਡੈਂਪੋਟੈਂਟ ਬਣਾਓ
ਸੈਸ਼ਨ ਦੇ ਮਾਲਕ ਅਨੁਸਾਰ ਸੇਵਾਮੁਕਤ ਕਰੋ, ਵਰਤੋਂਕਾਰ ਅਨੁਸਾਰ ਨਹੀਂ। ਜੋ ਹੈਂਡਲਰ ਨਾਮ ਨਾਲ ਮੌਜੂਦਾ ਸੰਬੰਧਿਤ ਕੋਈ ਵੀ ਨਿਰਧਾਰਨ ਮਿਟਾਉਂਦਾ ਹੈ ਉਹ ਅੰਤ ਵਿੱਚ ਗਲਤ ਨੂੰ ਹੀ ਮਿਟਾਏਗਾ, ਅਤੇ ਇੱਕੋ-ਇੱਕ ਬਚਾਅ ਇਹ ਜਾਂਚਣਾ ਹੈ ਕਿ ਹਟਾਇਆ ਜਾ ਰਿਹਾ ਰਿਕਾਰਡ ਉਹੀ ਰਿਕਾਰਡ ਹੈ ਜਿਸਦਾ ਇਹ ਘਟਨਾ ਵਰਣਨ ਕਰਦੀ ਹੈ।
ਪ੍ਰਬੰਧਨ ਇੰਟਰਫ਼ੇਸ ਇੱਕ ਵਾਰ ਵਿੱਚ ਇੱਕ ਹੀ ਜੁੜਿਆ ਪ੍ਰਬੰਧਨ ਕਲਾਇੰਟ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ, ਇਸ ਲਈ ਉਸੇ ਸਾਕਟ ਲਈ ਮੁਕਾਬਲਾ ਕਰਨ ਵਾਲਾ ਦੂਜਾ ਨਿਰੀਖਕ ਜੋੜਨ ਦੀ ਥਾਂ ਪਹਿਲਾਂ ਹੀ ਇਸਦਾ ਮਾਲਕ ਹੋਣ ਵਾਲੇ ਨਾਲ ਏਕੀਕ੍ਰਿਤ ਹੋਵੋ।
ਦੁਹਰਾਈਆਂ ਘਟਨਾਵਾਂ ਨੂੰ ਨਤੀਜਾ ਦੋ ਵਾਰ ਬਦਲੇ ਬਿਨਾਂ ਸੰਭਾਲੋ, ਅਤੇ ਜੋੜੀ ਨਾ ਬਣੀਆਂ ਘਟਨਾਵਾਂ ਨੂੰ ਸੁੱਟਣ ਦੀ ਥਾਂ ਮੇਲ-ਮਿਲਾਪ ਲਈ ਰੱਖੋ। ਡਿਸਕਨੈਕਟ ਕਾਲਬੈਕ ਦੀਆਂ ਦਰਜ ਜੀਵਨ-ਚੱਕਰ ਸ਼ਰਤਾਂ ਹਨ ਅਤੇ ਕ੍ਰੈਸ਼ ਜਾਂ ਸਖ਼ਤ ਰੋਕ ਤੋਂ ਬਾਅਦ ਇਹ ਕਦੇ ਨਹੀਂ ਵੀ ਆ ਸਕਦਾ, ਇਸ ਲਈ ਡਿਜ਼ਾਈਨ ਨੂੰ ਅਜਿਹਾ ਸੈਸ਼ਨ ਦਰਸਾਉਣ ਦਾ ਤਰੀਕਾ ਚਾਹੀਦਾ ਹੈ ਜਿਸਦੀ ਅੰਤ ਘਟਨਾ ਗੁੰਮ ਹੋਵੇ।
ਔਖੇ ਮਾਮਲੇ ਜਾਣਬੁੱਝ ਕੇ ਪਰਖੋ: ਇੱਕ ਸਕਿੰਟ ਵਿੱਚ ਦੋ ਮੁੜ-ਕਨੈਕਸ਼ਨ, ਦੋ ਡੈਮਨ ਇੰਸਟੈਂਸ, ਜਿਸਦੀ ਪ੍ਰੋਸੈਸਿੰਗ ਅਸਫਲ ਹੋਈ ਅਜਿਹਾ ਕਨੈਕਸ਼ਨ, ਅਤੇ ਸੈਸ਼ਨ ਦੇ ਵਿਚਕਾਰ ਡੈਮਨ ਮੁੜ-ਸ਼ੁਰੂਆਤ। ਚਾਰੇ ਝੱਲਣ ਵਾਲੀ ਕੁੰਜੀ ਹੀ ਭਰੋਸੇਯੋਗ ਕੁੰਜੀ ਹੈ।