ਤੁਹਾਡੇ VPN ਉੱਤੇ SOCKS ਪ੍ਰੌਕਸੀ ਵਜੋਂ SSH ਗਤਿਸ਼ੀਲ ਫ਼ਾਰਵਰਡਿੰਗ
ਸਿਰਫ਼ SOCKS ਬੋਲਣ ਵਾਲੇ ਐਪ ਕੋਲ ਆਮ VPN ਉੱਤੇ ਕੋਈ ਪ੍ਰੌਕਸੀ ਐਂਡਪੌਇੰਟ ਨਹੀਂ ਹੁੰਦਾ। ਦੋ ਹੌਪ, ਇੱਕ ਲੂਪਬੈਕ ਸਰੋਤਾ ਅਤੇ ਇੱਕ ਨਾਮ ਖੋਜ ਜੋ SSH ਸਰਵਰ ਨੂੰ ਖੁਦ ਕਰਨੀ ਪੈਂਦੀ ਹੈ।
ਸਿਰਫ਼ SOCKS ਬੋਲਣ ਵਾਲੇ ਐਪ ਕੋਲ ਆਮ VPN ਉੱਤੇ ਬੋਲਣ ਲਈ ਕੁਝ ਨਹੀਂ ਹੁੰਦਾ, ਕਿਉਂਕਿ ਟਨਲ ਪੈਕਟ ਢੋਂਦੀ ਹੈ ਅਤੇ ਐਪ ਨੂੰ ਪ੍ਰੌਕਸੀ ਐਂਡਪੌਇੰਟ ਚਾਹੀਦਾ ਹੈ। ਪਹੁੰਚ ਦਾ ਮਾਲਕ ਮਨਜ਼ੂਰੀ ਦੇਵੇ ਤਾਂ OpenSSH ਉਹ ਐਂਡਪੌਇੰਟ ਦੇ ਸਕਦਾ ਹੈ, ਕਿਉਂਕਿ ਗਤਿਸ਼ੀਲ ਫ਼ਾਰਵਰਡਿੰਗ ਇੱਕ SSH ਸੈਸ਼ਨ ਨੂੰ ਸਥਾਨਕ ਪ੍ਰੌਕਸੀ ਬਣਾ ਦਿੰਦੀ ਹੈ। ਫਿਰ ਦੋ ਹੌਪ ਵੱਖ ਰੱਖਣੇ ਪੈਂਦੇ ਹਨ: SSH ਹੋਸਟ ਤੱਕ ਪਹੁੰਚਣ ਵਾਲੀ ਟਨਲ ਅਤੇ ਉਹ ਹੋਸਟ ਅੱਗੇ ਜੋ ਕਨੈਕਸ਼ਨ ਖੋਲ੍ਹਦਾ ਹੈ। ਇਨ੍ਹਾਂ ਨੂੰ ਵੱਖ ਕਰਨ ਨਾਲ ਇਹ ਸਮਝ ਆਉਂਦੀ ਹੈ ਕਿ ਇਹ ਬੰਦੋਬਸਤ ਕਿਉਂ ਕੰਮ ਕਰਦੀ ਹੈ ਅਤੇ ਇਹ ਕਦੇ ਕੀ ਨਹੀਂ ਕਰੇਗੀ।
SSH ਸਰੋਤਾ ਕੀ ਬਣਦਾ ਹੈ ਅਤੇ ਕੀ ਨਹੀਂ
ਗਤਿਸ਼ੀਲ ਫ਼ਾਰਵਰਡਿੰਗ SSH ਕਲਾਇੰਟ ਨੂੰ ਸਥਾਨਕ ਤੌਰ 'ਤੇ ਸੁਣਨ ਅਤੇ ਜੋ ਵੀ ਜੁੜਦਾ ਹੈ ਉਸ ਨਾਲ SOCKS4 ਜਾਂ SOCKS5 ਬੋਲਣ ਲਈ ਮਜਬੂਰ ਕਰਦੀ ਹੈ। ਹਰ ਬੇਨਤੀ ਇੱਕ ਮੰਜ਼ਿਲ ਦਾ ਨਾਮ ਲੈਂਦੀ ਹੈ ਅਤੇ SSH ਸਰਵਰ ਅਗਲਾ ਕਨੈਕਸ਼ਨ ਖੋਲ੍ਹਦਾ ਹੈ, ਇਸ ਲਈ ਮੰਜ਼ਿਲ ਦੀ ਖੋਜ ਪਰਲੇ ਪਾਸੇ ਹੋ ਸਕਦੀ ਹੈ। ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਪੱਧਰ ਦੀ TCP ਫ਼ਾਰਵਰਡਿੰਗ ਹੈ, ਪੂਰੀ ਡਿਵਾਈਸ ਲਈ VPN ਨਹੀਂ। ਇਹ ਕੋਈ UDP ਐਸੋਸੀਏਸ਼ਨ, ਕੋਈ ICMP, ਅਤੇ ਪ੍ਰੌਕਸੀ ਸੈਟਿੰਗਾਂ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਅਣਡਿੱਠ ਕਰਨ ਵਾਲੇ ਐਪਾਂ ਲਈ ਕੁਝ ਨਹੀਂ ਢੋਂਦੀ। SSH ਸਰਵਰ ਤੋਂ ਐਪ ਤੱਕ ਦਾ ਹੌਪ ਵੀ ਤੁਹਾਡੀ ਟਨਲ ਦੇ ਅੰਦਰ ਨਹੀਂ ਹੈ, ਜੋ ਤਦ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਮੰਜ਼ਿਲ ਸਿਰਫ਼ ਜਾਣੇ-ਪਛਾਣੇ ਨੈੱਟਵਰਕਾਂ ਤੋਂ ਟ੍ਰੈਫ਼ਿਕ ਲੈਂਦੀ ਹੈ।
ਪੂਰਵ-ਸ਼ਰਤਾਂ ਅਸਲੀ ਹਨ: SSH ਹੋਸਟ ਤੱਕ ਰਸਤਾ, ਅਧਿਕਾਰਤ ਖਾਤਾ, ਪਰਖੀ ਹੋਈ ਸਰਵਰ ਹੋਸਟ ਕੁੰਜੀ ਅਤੇ ਫ਼ਾਰਵਰਡ ਕਰਨ ਦੀ ਮਨਜ਼ੂਰੀ। ਇਨ੍ਹਾਂ ਵਿੱਚੋਂ ਕੋਈ ਵੀ ਪ੍ਰੌਕਸੀ ਨਹੀਂ ਬਣਾਉਂਦੀ, ਅਤੇ ਆਖਰੀ ਆਮ ਤੌਰ 'ਤੇ ਪਹਿਲਾਂ ਗੁੰਮ ਹੁੰਦੀ ਹੈ। ਹੋਰ ਕੁਝ ਵੀ ਡੀਬੱਗ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਚਾਰੇ ਪੱਕੇ ਕਰੋ, ਕਿਉਂਕਿ ਕਲਾਇੰਟ ਵੱਲੋਂ ਨਾਕਾਮੀ ਇੱਕੋ ਜਿਹੀ ਦਿਸਦੀ ਹੈ, ਭਾਵੇਂ ਕੋਈ ਵੀ ਗੁੰਮ ਹੋਵੇ।
ਇਸ ਨੂੰ ਸਪਸ਼ਟ ਪੋਰਟ ਨਾਲ ਲੂਪਬੈਕ ਉੱਤੇ ਸ਼ੁਰੂ ਕਰੋ
ਅਣਵਰਤੀ ਸਥਾਨਕ ਪੋਰਟ ਚੁਣੋ ਅਤੇ ਪਤਾ ਛੱਡਣ ਦੀ ਥਾਂ ਇਸ ਨੂੰ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਲੂਪਬੈਕ ਨਾਲ ਬੰਨ੍ਹੋ। ਹੇਠਾਂ ਦਿੱਤੇ ਤਿੰਨ ਵਿਕਲਪਾਂ ਵਿੱਚੋਂ ਹਰ ਇੱਕ ਇੱਕ ਕਾਰਨ ਨਾਲ ਹੈ।
ssh -D 127.0.0.1:1080 -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
[email protected]
-N ਦੂਰ ਦੇ ਕਮਾਂਡ ਨੂੰ ਛੱਡ ਦਿੰਦਾ ਹੈ ਅਤੇ -T ਸਿਊਡੋ-ਟਰਮੀਨਲ ਛੱਡ ਦਿੰਦਾ ਹੈ, ਇਸ ਲਈ ਸੈਸ਼ਨ ਸਿਰਫ਼ ਫ਼ਾਰਵਰਡ ਕਰਨ ਲਈ ਹੈ। ExitOnForwardFailure ਸਰੋਤਾ ਨਾ ਬਣ ਸਕਣ 'ਤੇ ਕਲਾਇੰਟ ਨੂੰ ਬਾਹਰ ਨਿਕਲਣ ਦਿੰਦਾ ਹੈ, ਤੁਹਾਡੀ ਮੰਗੀ ਫ਼ਾਰਵਰਡਿੰਗ ਤੋਂ ਬਿਨਾਂ ਚੱਲਣ ਦੀ ਥਾਂ। ControlPath=none ਸੈਸ਼ਨ ਨੂੰ ਕਿਸੇ ਮੌਜੂਦਾ ਮਲਟੀਪਲੈਕਸ ਕਨੈਕਸ਼ਨ ਤੋਂ ਬਾਹਰ ਰੱਖਦਾ ਹੈ ਜੋ ਆਪਣੀਆਂ ਫ਼ਾਰਵਰਡਿੰਗਾਂ ਜੋੜ ਸਕਦਾ ਹੈ। ਲੂਪਬੈਕ ਸਰੋਤੇ ਨੂੰ LAN ਤੋਂ ਬਾਹਰ ਰੱਖਦਾ ਹੈ, ਪਰ ਸਾਂਝੀ ਮਸ਼ੀਨ 'ਤੇ ਇਹ ਅਧਿਕਾਰ ਦੀ ਹੱਦ ਨਹੀਂ ਹੈ, ਕਿਉਂਕਿ ਹੋਰ ਸਥਾਨਕ ਪ੍ਰੋਸੈਸ ਵੀ ਇਸ ਤੱਕ ਪਹੁੰਚ ਸਕਦੇ ਹਨ। OpenSSH ਕਲਾਇੰਟ ਸੰਦਰਭ ਇਹ ਸਾਰੇ ਫਲੈਗ ਦਸਤਾਵੇਜ਼ ਕਰਦਾ ਹੈ, ਅਤੇ ਲੂਪਬੈਕ ਚੇਤਾਵਨੀ ਸੁਣਦੇ ਸਾਕਟ ਦੇ ਅਰਥ ਤੋਂ ਆਉਂਦੀ ਹੈ।
ਨਾਮ ਪ੍ਰੌਕਸੀ ਵਿੱਚੋਂ ਭੇਜੋ, ਇਸ ਦੁਆਲੇ ਤੋਂ ਨਹੀਂ
SOCKS5 ਕਲਾਇੰਟ ਮੰਜ਼ਿਲ ਆਪ ਹੱਲ ਕਰ ਸਕਦਾ ਹੈ ਜਾਂ ਪ੍ਰੌਕਸੀ ਨੂੰ ਇਸ ਲਈ ਕਹਿ ਸਕਦਾ ਹੈ, ਅਤੇ ਇਹ ਚੋਣ ਤੈਅ ਕਰਦੀ ਹੈ ਕਿ ਕਿਹੜਾ ਰਿਜ਼ੌਲਵਰ ਜਵਾਬ ਦੇਵੇਗਾ। socks5h ਨਾਲ curl ਹੋਸਟਨਾਮ ਪ੍ਰੌਕਸੀ ਵਿੱਚੋਂ ਭੇਜਦਾ ਹੈ, ਇਸ ਲਈ ਖੋਜ SSH ਸਰਵਰ 'ਤੇ ਹੁੰਦੀ ਹੈ। ਸਾਧਾਰਨ socks5 ਨਾਲ ਲੈਪਟੌਪ ਪਹਿਲਾਂ ਹੱਲ ਕਰਦਾ ਹੈ ਅਤੇ ਸਿਰਫ਼ ਕਨੈਕਸ਼ਨ ਜਾਂਦਾ ਹੈ, ਜੋ ਨਾਮ ਅੰਦਰੂਨੀ ਹੋਣ 'ਤੇ ਮਕਸਦ ਚੁੱਪਚਾਪ ਖ਼ਤਮ ਕਰ ਦਿੰਦਾ ਹੈ। ਹੇਠਾਂ ਦਿੱਤੀ ਬੇਨਤੀ ਨੋ-ਪ੍ਰੌਕਸੀ ਸੂਚੀ ਵੀ ਖਾਲੀ ਕਰਦੀ ਹੈ, ਇਸ ਲਈ ਵਿਰਾਸਤੀ NO_PROXY ਮੁੱਲ ਇਸ ਨੂੰ ਪ੍ਰੌਕਸੀ ਦੁਆਲੇ ਨਹੀਂ ਲੈ ਜਾ ਸਕਦਾ।
curl -sS --noproxy '' --proxy socks5h://127.0.0.1:1080 https://app.corp.example/health
ਸਰਟੀਫ਼ਿਕੇਟ ਜਾਂਚ ਅਤੇ ਐਪ ਦਾ ਆਪਣਾ ਲੌਗਇਨ ਅਜੇ ਵੀ ਲਾਗੂ ਹੁੰਦੇ ਹਨ, ਕਿਉਂਕਿ ਪ੍ਰੌਕਸੀ ਦੋਹਾਂ ਵਿੱਚੋਂ ਕਿਸੇ ਨੂੰ ਨਹੀਂ ਬਦਲਦੀ। ਦੋ ਖੋਜਾਂ ਬਾਕੀ ਰਹਿੰਦੀਆਂ ਹਨ: ਲੈਪਟੌਪ ਨੇ ਮਨਜ਼ੂਰ VPN ਅਤੇ DNS ਰਸਤੇ ਰਾਹੀਂ SSH ਹੋਸਟ ਤੱਕ ਪਹੁੰਚਣਾ ਹੈ, ਅਤੇ SSH ਸਰਵਰ ਨੇ ਐਪ ਦਾ ਨਾਮ ਖੁਦ ਹੱਲ ਕਰਨਾ ਹੈ। ਦੂਜੀ ਨੂੰ ਕੋਈ ਵੀ ਟ੍ਰੈਫ਼ਿਕ ਪ੍ਰੌਕਸੀ ਵਿੱਚੋਂ ਲੰਘਣ ਤੋਂ ਪਹਿਲਾਂ ਵੱਖਰੇ ਤੌਰ 'ਤੇ ਪਰਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।
ssh [email protected] getent hosts app.corp.example
ਇੱਕ ਮਨਜ਼ੂਰ ਮੰਜ਼ਿਲ ਸਾਬਤ ਕਰੋ, ਫਿਰ ਸੈਸ਼ਨ ਬੰਦ ਕਰੋ
ਉਹ ਮੰਜ਼ਿਲ ਪਰਖੋ ਜਿਸ ਦੀ ਨੀਤੀ ਮਨਜ਼ੂਰੀ ਦਿੰਦੀ ਹੈ ਅਤੇ ਉਹ ਵੀ ਜਿਸ ਨੂੰ ਉਸ ਨੇ ਨਾਂਹ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ, ਕਿਉਂਕਿ ਕੰਮ ਕਰਦੀ ਫ਼ਾਰਵਰਡਿੰਗ ਸਿਰਫ਼ ਇਹ ਸਾਬਤ ਕਰਦੀ ਹੈ ਕਿ ਸਰੋਤਾ ਕੰਮ ਕਰਦਾ ਹੈ, ਹੋਰ ਕੁਝ ਨਹੀਂ। ਐਪ ਉਹ ਸਰੋਤ ਪਤਾ ਵੇਖਦਾ ਹੈ ਜੋ SSH ਸਰਵਰ ਚੁਣਦਾ ਹੈ, ਅਤੇ ਉਹ ਤੁਹਾਡੇ ਲੈਪਟੌਪ ਦਾ ਟਨਲ ਪਤਾ ਨਹੀਂ ਹੈ। ਜਿੱਥੇ ਪਰਲਾ ਸਿਰਾ ਕਨੈਕਸ਼ਨ ਸਰੋਤ ਅਨੁਸਾਰ ਲੌਗ ਕਰਦਾ ਹੈ, ਉੱਥੇ ਬੇਨਤੀ ਨਾਂਹ ਹੋਣ 'ਤੇ ਪਹਿਲੀ ਜਾਂਚ ਉਹੀ ਫ਼ਰਕ ਹੈ।
ਸੈਸ਼ਨ ਨੂੰ ਉਸ ਦੀ ਮਾਲਕ ਪ੍ਰੋਸੈਸ ਰਾਹੀਂ ਰੋਕੋ, ਕਿਸੇ ਬੇਸੰਬੰਧ ਸ਼ੈੱਲ ਨੂੰ ਮਾਰ ਕੇ ਨਹੀਂ। ਫਿਰ ਪੱਕਾ ਕਰੋ ਕਿ ਸਰੋਤਾ ਗਿਆ ਹੈ, ਕਿਉਂਕਿ ਅਜੇ ਵੀ ਜਵਾਬ ਦੇਣ ਵਾਲਾ ਪੋਰਟ ਉਹ ਸੈਸ਼ਨ ਹੈ ਜੋ ਤੁਸੀਂ ਸੱਚਮੁੱਚ ਬੰਦ ਨਹੀਂ ਕੀਤਾ। ਸਿਰਫ਼ ਉਹੀ ਪ੍ਰੌਕਸੀ ਸੈਟਿੰਗ ਹਟਾਓ ਜੋ ਇਸ ਅਭਿਆਸ ਨੇ ਲਿਆਂਦੀ, ਅਤੇ ਐਪ ਕੌਨਫ਼ਿਗਰੇਸ਼ਨ ਦਾ ਬਾਕੀ ਹਿੱਸਾ ਜਿਉਂ ਦਾ ਤਿਉਂ ਰਹਿਣ ਦਿਓ। ਫ਼ਾਰਵਰਡਿੰਗ ਨਿਯਮ ਰੱਖਣ ਵਾਲਾ ਬਿਨਾਂ ਨਿਗਰਾਨੀ ਵਾਲਾ ਟਰਮੀਨਲ ਸੇਵਾ ਨਹੀਂ ਹੈ, ਅਤੇ ਪੱਕੀ ਪ੍ਰੌਕਸੀ ਨੂੰ ਮਨਜ਼ੂਰ ਜੀਵਨ-ਚੱਕਰ ਚਾਹੀਦਾ ਹੈ, ਭੁੱਲੀ ਵਿੰਡੋ ਨਹੀਂ।
ss -ltn | grep 1080
ਉਹ ਨਾਕਾਮੀਆਂ ਜੋ ਇਹ ਬੰਦੋਬਸਤ ਠੀਕ ਨਹੀਂ ਕਰ ਸਕਦੀ
ਕੁਝ ਲੱਛਣ ਸਿੱਧੇ ਉੱਪਰਲੀਆਂ ਹੱਦਾਂ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦੇ ਹਨ, ਅਤੇ ਇਨ੍ਹਾਂ ਨੂੰ ਜਲਦੀ ਪਛਾਣਨਾ ਪ੍ਰੌਕਸੀ ਡੀਬੱਗਿੰਗ ਦੀ ਇੱਕ ਦੁਪਹਿਰ ਬਚਾਉਂਦਾ ਹੈ। ਟੇਬਲ ਤੁਸੀਂ ਜੋ ਵੇਖਦੇ ਹੋ ਨੂੰ ਉਸ ਨਾਲ ਜੋੜਦੀ ਹੈ ਜਿਸ ਦਾ ਇਸ ਦਾ ਆਮ ਅਰਥ ਹੁੰਦਾ ਹੈ। ਆਖਰੀ ਕਾਲਮ ਵਿੱਚ ਜੋ ਵੀ ਹੈ ਉਹ ਕੌਨਫ਼ਿਗਰੇਸ਼ਨ ਗ਼ਲਤੀ ਨਹੀਂ, ਡਿਜ਼ਾਈਨ ਦਾ ਸਵਾਲ ਹੈ।
| What you see | What it usually means | Where to look |
|---|---|---|
| The app connects and nothing follows | It ignores proxy settings entirely | Its own network settings, not the SSH session |
| A name resolution error for the destination | The SSH server cannot resolve it | Server resolver and search domains |
| A UDP-only application fails | Dynamic forwarding carries TCP only | This arrangement cannot serve it |
| curl works, the browser does not | The browser is not using the socks5h endpoint | Browser proxy configuration |
| The listener answers after the session ended | Another process owns port 1080 | The ss output, then the owning process |
ਪਹਿਲੀਆਂ ਤਿੰਨ ਕਤਾਰਾਂ ਉਹ ਹਨ ਜਿਨ੍ਹਾਂ ਦਾ ਲੋਕ ਗ਼ਲਤ ਨਿਦਾਨ ਕਰਦੇ ਹਨ, ਕਿਉਂਕਿ ਹਰ ਇੱਕ ਪ੍ਰੌਕਸੀ ਬਾਰੇ ਗ਼ਲਤੀ ਦੀ ਥਾਂ ਕਨੈਕਸ਼ਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਪੈਦਾ ਕਰਦੀ ਹੈ। ਲੈਪਟੌਪ 'ਤੇ ਹੱਲ ਹੁੰਦਾ ਨਾਮ ਸਰਵਰ ਦੇ ਰਿਜ਼ੌਲਵਰ ਬਾਰੇ ਕੁਝ ਨਹੀਂ ਦੱਸਦਾ, ਅਤੇ ਨਾਕਾਮੀ ਨੂੰ ਇਸ ਦੀ ਥਾਂ ਸਰਟੀਫ਼ਿਕੇਟ ਜਾਂ ਸਮਾਂ-ਸੀਮਾ ਦੀ ਸਮੱਸਿਆ ਵਜੋਂ ਪੜ੍ਹਿਆ ਜਾਂਦਾ ਹੈ। ਸਿਰਫ਼ UDP ਵਾਲੀਆਂ ਐਪਾਂ ਡਿਜ਼ਾਈਨ ਤੋਂ ਬਾਹਰ ਖੜ੍ਹੀਆਂ ਹਨ, ਇਸ ਦੇ ਅੰਦਰ ਟੁੱਟੀਆਂ ਨਹੀਂ, ਅਤੇ ਕੋਈ ਵਾਧੂ ssh ਵਿਕਲਪ ਇਹ ਨਹੀਂ ਬਦਲਦਾ। ਬਰਾਊਜ਼ਰ ਕਤਾਰ ਇਹ ਆਮ ਯਾਦ ਦਿਵਾਉਂਦੀ ਹੈ ਕਿ ਪ੍ਰੌਕਸੀ ਸੈਟਿੰਗਾਂ ਹਰ ਐਪ ਲਈ ਵੱਖਰੀਆਂ ਹੁੰਦੀਆਂ ਹਨ। ਆਖਰੀ ਕਤਾਰ ਇਹ ਦੱਸਦੀ ਹੈ ਕਿ ਬੰਦ ਕਰਨ ਦੀ ਜਾਂਚ ਕਿਉਂ ਹੈ: ਅਜੇ ਵੀ ਸੁਣਦਾ ਪੋਰਟ ਭਾਵ ਹੁਣ ਕੋਈ ਹੋਰ ਇਸ ਦਾ ਮਾਲਕ ਹੈ।