OpenVPN PHP ਹੁੱਕ: trusted_ip ਬਨਾਮ ifconfig_pool_remote_ip
ਦੋ ਵੱਖਰੇ ਅਰਥਾਂ ਵਾਲੇ ਦੋ ਪਤੇ, ਜਿਨ੍ਹਾਂ ਨੂੰ ਉਹ ਪ੍ਰਕਿਰਿਆ ਪੜ੍ਹਦੀ ਹੈ ਜੋ ਤੁਸੀਂ ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤੀ। ਹੁੱਕ ਵੇਰੀਏਬਲ ਕੀ ਹਨ, ਅਤੇ ਖਾਲੀ $_ENV ਕਿਉਂ ਕੁਝ ਸਾਬਤ ਨਹੀਂ ਕਰਦੀ।
ਹੁੱਕ ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਖਾਲੀ $_ENV ਐਰੇ ਇਹ ਸਾਬਤ ਕਰਦੀ ਜਾਪਦੀ ਹੈ ਕਿ OpenVPN ਨੇ ਕੁਝ ਨਹੀਂ ਭੇਜਿਆ। ਆਮ ਤੌਰ 'ਤੇ ਇਹ ਬਿਲਕੁਲ ਹੋਰ ਗੱਲ ਸਾਬਤ ਕਰਦੀ ਹੈ: PHP ਉਸ ਸੁਪਰਗਲੋਬਲ ਨੂੰ ਭਰਨ ਲਈ ਨਹੀਂ ਸੀ ਬਣਾਇਆ ਗਿਆ, ਅਤੇ ਮੁੱਲ ਪੂਰੇ ਸਮੇਂ ਪ੍ਰਕਿਰਿਆ ਦੇ ਵਾਤਾਵਰਣ ਵਿੱਚ ਪਏ ਸਨ। ਦੂਜਾ ਗਲਤ ਨਤੀਜਾ ਹੋਰ ਬਾਰੀਕ ਹੈ, ਕਿਉਂਕਿ ਕਨੈਕਸ਼ਨ ਹੁੱਕ ਵਿੱਚ ਦੋ ਪਤਾ ਵੇਰੀਏਬਲ ਵੱਖਰੀਆਂ ਗੱਲਾਂ ਦਰਸਾਉਂਦੇ ਹਨ ਅਤੇ ਇੱਕ-ਦੂਜੇ ਦੀ ਥਾਂ ਵਰਤੇ ਜਾਂਦੇ ਹਨ। ਗਲਤ ਤੋਂ ਸ਼ੁਰੂ ਕਰਨ 'ਤੇ ਦੋਵੇਂ ਗਲਤੀਆਂ ਇੱਕ ਦੁਪਹਿਰ ਲੈ ਲੈਂਦੀਆਂ ਹਨ।
ਦੋ ਪਤੇ, ਦੋ ਵੱਖਰੇ ਦਾਅਵੇ
ਬਾਹਰੀ ਸਿਰਾ ਉਹ ਹੈ ਜੋ ਸਰਵਰ ਨੇ ਕਲਾਇੰਟ ਜੁੜਨ ਵੇਲੇ ਦੇਖਿਆ, IPv4 ਲਈ trusted_ip ਅਤੇ IPv6 ਲਈ trusted_ip6 ਵਜੋਂ ਉਪਲਬਧ। ਵਰਚੁਅਲ ਪਤਾ ਉਹ ਹੈ ਜੋ ਪੂਲ ਨੇ ਇਸ ਸੈਸ਼ਨ ਲਈ ਦਿੱਤਾ, ifconfig_pool_remote_ip ਵਜੋਂ ਉਪਲਬਧ।
ਉਹ ਵੱਖਰੇ ਸਵਾਲਾਂ ਦਾ ਜਵਾਬ ਦਿੰਦੇ ਹਨ, ਅਤੇ ਰਿਕਾਰਡ ਨੂੰ ਆਮ ਤੌਰ 'ਤੇ ਦੋਵੇਂ ਨਹੀਂ, ਸਗੋਂ ਇਹਨਾਂ ਵਿੱਚੋਂ ਇੱਕ ਚਾਹੀਦਾ ਹੈ। ਪਹਿਲਾ ਦੱਸਦਾ ਹੈ ਕਿ ਕਨੈਕਸ਼ਨ ਕਿੱਥੋਂ ਆਇਆ, ਜੋ ਸੈਂਕੜੇ ਲੋਕਾਂ ਵੱਲੋਂ ਵਰਤਿਆ ਸਾਂਝਾ NAT ਪਤਾ ਹੋ ਸਕਦਾ ਹੈ। ਦੂਜਾ ਦੱਸਦਾ ਹੈ ਕਿ ਇਹ ਸੈਸ਼ਨ ਟਨਲ ਦੇ ਅੰਦਰ ਕਿੱਥੇ ਰਹਿੰਦਾ ਹੈ, ਅਤੇ ਇਹ ਬਾਅਦ ਵਿੱਚ ਕਿਸੇ ਹੋਰ ਸੈਸ਼ਨ ਨੂੰ ਦਿੱਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਦੋਵਾਂ ਨੂੰ ਮਿਲਾ ਦੇਣ ਨਾਲ ਭਰੋਸੇਯੋਗ ਜਾਪਦੇ ਪਰ ਗਲਤ ਰਿਕਾਰਡ ਬਣਦੇ ਹਨ।
ਘੱਟੋ-ਘੱਟ ਪੜ੍ਹਤ ਇਸ ਤਰ੍ਹਾਂ ਦਿਖਦੀ ਹੈ।
$outer4 = getenv('trusted_ip');
$outer6 = getenv('trusted_ip6');
$inner = getenv('ifconfig_pool_remote_ip');
$outer = $outer4 !== false ? $outer4 : $outer6;ਕੋਈ ਵੀ ਮੁੱਲ ਵਿਅਕਤੀ ਦੀ ਪਛਾਣ ਨਹੀਂ ਕਰਦਾ। ਇੱਕ ਨੈੱਟਵਰਕ ਨਿਰੀਖਣ ਹੈ, ਦੂਜਾ ਲੀਜ਼ ਹੈ, ਅਤੇ ਜੋ ਰਿਕਾਰਡ ਇਹਨਾਂ ਵਿੱਚੋਂ ਕਿਸੇ ਨੂੰ ਸਥਿਰ ਜੰਤਰ ਪਛਾਣਕਰਤਾ ਮੰਨਦਾ ਹੈ ਉਹ ਪਹਿਲੀ ਵਾਰ ਹੀ ਗਲਤ ਹੋਵੇਗਾ ਜਦੋਂ ਕਲਾਇੰਟ ਕਿਸੇ ਹੋਰ ਨੈੱਟਵਰਕ ਤੋਂ ਦੁਬਾਰਾ ਜੁੜਦਾ ਹੈ ਜਾਂ ਹੋਰ ਪੂਲ ਪਤਾ ਲੈਂਦਾ ਹੈ। ਰਿਕਾਰਡ ਨੂੰ ਜਿਸ ਸਵਾਲ ਦਾ ਜਵਾਬ ਦੇਣਾ ਹੈ ਉਸ ਅਨੁਸਾਰ ਫੀਲਡ ਚੁਣੋ, ਫਿਰ ਉਹ ਸਵਾਲ ਕਾਲਮ ਦੇ ਕੋਲ ਲਿਖੋ।
ਜਾਂਚੋ ਕਿ PHP ਕਿਵੇਂ ਸ਼ੁਰੂ ਹੋਇਆ, ਆਪਣਾ ਸ਼ੈੱਲ ਨਹੀਂ
ਹੁੱਕ VPN ਡੈਮਨ ਦੇ ਬੱਚੇ ਵਜੋਂ, ਡੈਮਨ ਵੱਲੋਂ ਬਣਾਏ ਵਾਤਾਵਰਣ ਵਿੱਚ ਚੱਲਦਾ ਹੈ। ਤੁਹਾਡੇ ਇੰਟਰਐਕਟਿਵ ਸ਼ੈੱਲ ਦਾ ਵਾਤਾਵਰਣ ਵੱਖਰਾ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਸਕ੍ਰਿਪਟ ਨੂੰ ਹੱਥ ਨਾਲ ਚਲਾਉਣਾ ਹੁੱਕ ਦਾ ਨਹੀਂ, ਸ਼ੈੱਲ ਦਾ ਵਾਤਾਵਰਣ ਪਰਖਦਾ ਹੈ।
ਪਹਿਲਾਂ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਹੁੱਕ ਸੱਚਮੁੱਚ ਉਸ ਪੜਾਅ 'ਤੇ ਚੱਲਿਆ ਜਿਸ ਦੀ ਤੁਸੀਂ ਆਸ ਕੀਤੀ ਸੀ। ਗਲਤ ਪੜਾਅ ਨਾਲ ਜੁੜੀ ਸਕ੍ਰਿਪਟ, ਜਾਂ ਅਜਿਹੀ ਜੋ ਕਦੇ ਨਹੀਂ ਚੱਲੀ ਕਿਉਂਕਿ ਨਿਰਦੇਸ਼ ਕਿਸੇ ਹੋਰ ਰਾਹ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ, ਗੁੰਮ ਵੇਰੀਏਬਲ ਵਾਂਗ ਹੀ ਲੱਛਣ ਪੈਦਾ ਕਰਦੀ ਹੈ। ਸਕ੍ਰਿਪਟ ਦੇ ਸਿਖਰ 'ਤੇ ਜਾਣ-ਬੁੱਝ ਕੇ ਇੱਕ ਨਿਸ਼ਾਨ ਲਾਈਨ ਜੋੜੋ ਅਤੇ ਹੋਰ ਕੁਝ ਵੀ ਜਾਂਚਣ ਤੋਂ ਪਹਿਲਾਂ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਉਹ ਦਿਖਦੀ ਹੈ। ਲੌਗ ਵਿੱਚ ਸਮੇਂ ਦੀ ਮੋਹਰ ਵਾਲੀ ਇੱਕ ਲਾਈਨ «ਕਦੇ ਨਹੀਂ ਚੱਲੀ» ਨੂੰ «ਮੁੱਲ ਤੋਂ ਬਿਨਾਂ ਚੱਲੀ» ਤੋਂ ਵੱਖ ਕਰਦੀ ਹੈ।
ਫਿਰ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਉਹ ਸੱਦਾ ਕਿਹੜਾ ਇੰਟਰਪ੍ਰੀਟਰ ਅਤੇ ਕਿਹੜੀ ਸੰਰਚਨਾ ਫਾਈਲ ਵਰਤਦਾ ਹੈ। ਵੈੱਬ ਸਰਵਰ ਲਈ PHP ਸੰਰਚਨਾ ਬਦਲਣ ਨਾਲ OpenVPN ਵੱਲੋਂ ਸ਼ੁਰੂ ਕੀਤੀ CLI ਪ੍ਰਕਿਰਿਆ 'ਤੇ ਕੋਈ ਫ਼ਰਕ ਨਹੀਂ ਪੈਂਦਾ, ਅਤੇ ਦੋਵੇਂ ਪੂਰੀ ਤਰ੍ਹਾਂ ਵੱਖਰੀਆਂ php.ini ਫਾਈਲਾਂ ਲੋਡ ਕਰ ਸਕਦੇ ਹਨ।
ਖਾਲੀ $_ENV ਕਿਉਂ ਕੁਝ ਸਾਬਤ ਨਹੀਂ ਕਰਦੀ
PHP ਦਾ getenv ਹਵਾਲਾ ਪ੍ਰਕਿਰਿਆ ਵਾਤਾਵਰਣ ਦੀ ਸਿੱਧੀ ਪੜ੍ਹਤ ਦੱਸਦਾ ਹੈ, ਜੋ ਨਾਮ ਨਾ ਹੋਣ 'ਤੇ false ਵਾਪਸ ਕਰਦਾ ਹੈ। $_ENV ਸੁਪਰਗਲੋਬਲ ਵੱਖਰੇ ਤੌਰ 'ਤੇ ਭਰੀ ਜਾਂਦੀ ਹੈ, ਅਤੇ ਨਿਰਦੇਸ਼ variables_order ਤੈਅ ਕਰਦਾ ਹੈ ਕਿ ਕਿਹੜੀਆਂ ਸੁਪਰਗਲੋਬਲ ਭਰੀਆਂ ਜਾਣਗੀਆਂ।
ਜੇ ਉਹ ਨਿਰਦੇਸ਼ E ਛੱਡ ਦਿੰਦਾ ਹੈ, ਤਾਂ ਵਾਤਾਵਰਣ ਵਿੱਚ ਕੁਝ ਵੀ ਹੋਵੇ $_ENV ਖਾਲੀ ਰਹਿੰਦੀ ਹੈ। ਉਸ ਨੂੰ ਇੰਡੈਕਸ ਕਰਨ ਵਾਲਾ ਕੋਡ ਫਿਰ ਅਸਲ ਵਿੱਚ ਮੌਜੂਦ ਵੇਰੀਏਬਲ ਨੂੰ ਗੁੰਮ ਦੱਸਦਾ ਹੈ, ਅਤੇ ਜਦੋਂ ਜਵਾਬ php.ini ਵਿੱਚ ਹੁੰਦਾ ਹੈ ਤਾਂ ਜਾਂਚ OpenVPN ਵੱਲ ਮੁੜਦੀ ਹੈ। ਨਿਰਦੇਸ਼ ਨੂੰ ਖਾਸ ਤੌਰ 'ਤੇ CLI ਸੰਰਚਨਾ ਲਈ ਜਾਂਚੋ, ਵੈੱਬ ਸਰਵਰ ਲਈ ਨਹੀਂ।
getenv ਨਾਲ ਪੜ੍ਹਨਾ ਇਸ ਪੂਰੀ ਉਲਝਣ ਤੋਂ ਬਚਦਾ ਹੈ, ਅਤੇ ਇੰਟਰਪ੍ਰੀਟਰ ਨੂੰ ਬੁਲਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਵਾਤਾਵਰਣ ਸਾਫ਼ ਕਰਨ ਵਾਲੀ ਲਪੇਟ ਸਕ੍ਰਿਪਟ ਇਸਨੂੰ ਹੋਰ ਰੂਪ ਵਿੱਚ ਮੁੜ ਲਿਆਉਂਦੀ ਹੈ।
ਕਤਾਰ ਅੱਪਡੇਟ ਨਹੀਂ, ਸੰਬੰਧ ਸੰਭਾਲੋ
ਲਿਖਣ ਤੋਂ ਪਹਿਲਾਂ ਤੈਅ ਕਰੋ ਕਿ ਰਿਕਾਰਡ ਨੂੰ ਕਿਹੜਾ ਮੁੱਲ ਚਾਹੀਦਾ ਹੈ। ਜੇ ਟੀਚਾ ਇਹ ਦਰਜ ਕਰਨਾ ਹੈ ਕਿ ਸੈਸ਼ਨ ਕਿੱਥੋਂ ਆਇਆ, ਤਾਂ ਬਾਹਰੀ ਸਿਰਾ ਸੰਭਾਲੋ ਅਤੇ ਉਸਨੂੰ ਨਿਰੀਖਣ ਵਜੋਂ ਲੇਬਲ ਕਰੋ। ਜੇ ਟੀਚਾ ਕਨੈਕਸ਼ਨ ਦੀ ਮਿਆਦ ਲਈ ਸੈਸ਼ਨ ਨੂੰ ਟਨਲ ਪਤੇ ਨਾਲ ਜੋੜਨਾ ਹੈ, ਤਾਂ ਪੂਲ ਪਤਾ ਸੰਭਾਲੋ ਅਤੇ ਉਸਨੂੰ ਸੈਸ਼ਨ ਨਾਲ ਜੋੜੋ।
ਇੱਕੋ ਟਨਲ ਪਤਾ ਸਾਂਝਾ ਕਰਨ ਵਾਲੀ ਹਰ ਕਤਾਰ ਦੀ ਥਾਂ ਪ੍ਰਮਾਣਿਤ ਪਛਾਣ ਅਤੇ ਮੌਜੂਦਾ ਸੈਸ਼ਨ ਅਨੁਸਾਰ ਅੱਪਡੇਟ ਕਰੋ, ਕਿਉਂਕਿ ਪੂਲ ਪਤੇ ਦੁਬਾਰਾ ਵਰਤੇ ਜਾਂਦੇ ਹਨ ਅਤੇ ਦੇਰ ਨਾਲ ਆਇਆ ਡਿਸਕਨੈਕਟ ਸਮਾਗਮ ਨਵੇਂ ਕਨੈਕਸ਼ਨ ਦਾ ਡੇਟਾ ਮਿਟਾ ਸਕਦਾ ਹੈ। IPv6 ਨੂੰ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਸੰਭਾਲੋ, ਚੁੱਪਚਾਪ ਸਿਰਫ਼ IPv4 ਮੁੱਲ ਨਾ ਲਿਖੋ। NULL ਬਾਹਰੀ ਪਤੇ ਵਾਲੀ ਕਤਾਰ ਗਲਤ ਪਤੇ ਵਾਲੀ ਕਤਾਰ ਨਾਲੋਂ ਬਿਹਤਰ ਹੈ, ਕਿਉਂਕਿ ਪਹਿਲੀ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਅਧੂਰੀ ਹੈ।
ਦੁਬਾਰਾ ਜੁੜਨ 'ਤੇ ਪੁਰਾਣਾ ਸੋਧਣ ਦੀ ਥਾਂ ਨਵਾਂ ਰਿਕਾਰਡ ਬਣੇ, ਇਸ ਲਈ ਲਿਖਤ ਨੂੰ OpenVPN ਵੱਲੋਂ ਦਿੱਤੇ ਸੈਸ਼ਨ ਪਛਾਣਕਰਤਾ ਨਾਲ ਜੋੜੋ। ਪੈਰਾਮੀਟਰ ਵਾਲੇ ਬਿਆਨ ਅਤੇ ਉਹ ਖਾਤਾ ਵਰਤੋ ਜਿਸ ਕੋਲ ਸਿਰਫ਼ ਕਾਰਵਾਈ ਲਈ ਲੋੜੀਂਦੀਆਂ ਇਜਾਜ਼ਤਾਂ ਹਨ। ਹੁੱਕ ਡੈਮਨ ਦੇ ਅਧਿਕਾਰ ਨਾਲ ਚੱਲਦਾ ਹੈ, ਇਸ ਲਈ ਲਾਪਰਵਾਹੀ ਵਾਲੀ ਕਵੈਰੀ ਗਲਤ ਲੌਗ ਲਾਈਨ ਨਾਲੋਂ ਵੱਡੀ ਸਮੱਸਿਆ ਹੈ।
ਵਾਤਾਵਰਣ ਸੁੱਟੇ ਬਿਨਾਂ ਨਿਦਾਨ ਕਰੋ
ਲੌਗ ਕਰੋ ਕਿ ਕਿਹੜੇ ਨਾਮ ਮੌਜੂਦ ਸਨ, ਕਿਹੜਾ ਪੜਾਅ ਚੱਲਿਆ ਅਤੇ ਕਿਹੜਾ ਇੰਟਰਪ੍ਰੀਟਰ ਵਰਤਿਆ ਗਿਆ। ਪੂਰਾ ਵਾਤਾਵਰਣ ਨਾ ਛਾਪੋ, ਕਿਉਂਕਿ ਹੁੱਕ ਪ੍ਰਕਿਰਿਆ ਲੌਗ ਫਾਈਲ ਵਿੱਚ ਨਾ ਪਹੁੰਚਣ ਵਾਲੇ ਅਸੰਬੰਧਿਤ ਮੁੱਲ ਵਿਰਾਸਤ ਵਿੱਚ ਲੈ ਸਕਦੀ ਹੈ।
ਇੱਕ ਕਨੈਕਸ਼ਨ ਸ਼ੁਰੂ ਤੋਂ ਅੰਤ ਤੱਕ ਪਰਖੋ: ਬਾਹਰੀ ਸਿਰਾ ਪੜ੍ਹੋ, ਦਿੱਤਾ ਗਿਆ ਪਤਾ ਪੜ੍ਹੋ, ਅਤੇ ਦੋਵੇਂ ਸਰਵਰ ਦੇ ਉਸ ਸੈਸ਼ਨ ਬਾਰੇ ਆਪਣੇ ਦ੍ਰਿਸ਼ਟੀਕੋਣ ਨਾਲ ਮਿਲਾਓ। ਇੱਕ ਕਲਾਇੰਟ ਲਈ ਜੋੜੀ ਪੱਕੀ ਹੋਣ ਤੋਂ ਬਾਅਦ, ਸੰਬੰਧ 'ਤੇ ਹੋਰ ਥਾਂ ਵੀ ਭਰੋਸਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।