VPN ਨੇਮਸਪੇਸ ਅੰਦਰਲੀ ਐਪ LAN ਤੋਂ ਪਹੁੰਚਯੋਗ ਨਹੀਂ
ਨੈੱਟਵਰਕ ਨੇਮਸਪੇਸ ਇੱਕ ਪ੍ਰੋਗਰਾਮ ਨੂੰ ਆਪਣਾ ਟਨਲ ਅਤੇ ਆਪਣਾ ਲੂਪਬੈਕ ਦਿੰਦਾ ਹੈ। ਹੋਸਟ ਦੀ ਥਾਂ ਸਿਰਫ਼ ਇਸ ਦਾ ਪੋਰਟ socat ਹੌਪ ਜਾਂ veth ਜੋੜੀ ਨਾਲ ਪ੍ਰਕਾਸ਼ਿਤ ਕਰੋ।
ਤੁਹਾਡੀ ਸੇਵਾ ਮਸ਼ੀਨ ਉੱਤੇ ਚੱਲ ਰਹੀ ਹੈ, ਟਨਲ ਚਾਲੂ ਹੈ, ਅਤੇ ਫਿਰ ਵੀ ਤੁਹਾਡੇ ਡੈਸਕ ਦਾ ਬ੍ਰਾਊਜ਼ਰ ਅਜੇ ਵੀ ਜਵਾਬ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ। ਸਾਧਾਰਨ ਅਰਥਾਂ ਵਿੱਚ ਕੁਝ ਵੀ ਟੁੱਟਿਆ ਨਹੀਂ: ਐਪਲੀਕੇਸ਼ਨ ਨੈੱਟਵਰਕ ਨੇਮਸਪੇਸ ਦੇ ਅੰਦਰ ਸੁਣ ਰਹੀ ਹੈ, ਅਤੇ ਉਹ ਸਟੈਕ LAN ਲਈ ਅਦਿੱਖ ਹੈ। ਇਸ ਦਾ ਲੂਪਬੈਕ ਨੇਮਸਪੇਸ ਦਾ ਹੈ, ਇਸ ਲਈ ਕਿਸੇ ਹੋਰ ਮਸ਼ੀਨ ਦੇ ਕਲਾਇੰਟ ਕੋਲ ਕੋਈ ਪਤਾ ਨਹੀਂ ਜੋ ਪੋਰਟ ਤੱਕ ਪਹੁੰਚੇ। ਇੱਕ ਜਾਣ-ਬੁੱਝ ਕੇ ਕੀਤੀ ਹੌਪ, ਜਾਂ ਇੱਕ veth ਜੋੜੀ, ਹੋਸਟ ਦੇ ਬਾਕੀ ਹਿੱਸੇ ਨੂੰ ਹਿਲਾਏ ਬਿਨਾਂ ਇਸ ਨੂੰ ਠੀਕ ਕਰ ਦਿੰਦੀ ਹੈ।
LAN ਪਤੇ ਉੱਤੇ ਕੁਝ ਜਵਾਬ ਕਿਉਂ ਨਹੀਂ ਦਿੰਦਾ
ਨੇਮਸਪੇਸ ਇੱਕ ਪੂਰਾ ਨੈੱਟਵਰਕ ਸਟੈਕ ਹੈ: ਇੰਟਰਫ਼ੇਸ, ਰੂਟ, ਫਾਇਰਵਾਲ ਨਿਯਮ ਅਤੇ ਇੱਕ ਨਿੱਜੀ ਲੂਪਬੈਕ। ip netns exec ਰਾਹੀਂ ਸ਼ੁਰੂ ਕੀਤੀ ਪ੍ਰਕਿਰਿਆ ਸਿਰਫ਼ ਉਹ ਸਟੈਕ ਵੇਖਦੀ ਹੈ, ਇਸ ਲਈ ਜਿਸ ਪਤੇ ਉੱਤੇ ਇਹ ਬੱਝਦੀ ਹੈ ਉਹ ਸਿਰਫ਼ ਨੇਮਸਪੇਸ ਦੇ ਅੰਦਰ ਹੱਲ ਹੁੰਦਾ ਹੈ। ਹੋਸਟ ਦਾ ਆਪਣਾ 127.0.0.1 ਬਿਲਕੁਲ ਵੱਖਰਾ ਲੂਪਬੈਕ ਹੈ।
ਇਸ ਲਈ ਹੋਸਟ ਉੱਤੇ curl ਫੇਲ੍ਹ ਹੁੰਦਾ ਹੈ, ਜਦੋਂ ਕਿ ਨੇਮਸਪੇਸ ਦੇ ਅੰਦਰ ਉਹੀ ਕਮਾਂਡ ਸਫਲ ਹੁੰਦੀ ਹੈ। ਐਪਲੀਕੇਸ਼ਨ ਤੰਦਰੁਸਤ ਹੈ; ਪਤਾ ਸਿਰਫ਼ ਹੋਸਟ ਦੇ ਸਟੈਕ ਵਿੱਚ ਨਹੀਂ ਹੈ।
socat ਹੌਪ ਨਾਲ ਇੱਕ ਪੋਰਟ ਪ੍ਰਕਾਸ਼ਿਤ ਕਰੋ
socat ਵਰਤੋਂਕਾਰ ਜਗ੍ਹਾ ਵਿੱਚ ਦੋਵੇਂ ਸਟੈਕ ਜੋੜਦਾ ਹੈ, ਜੋ ਉਦੋਂ ਕਾਫ਼ੀ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਸਿਰਫ਼ ਇੱਕ TCP ਪੋਰਟ ਲੰਘਣਾ ਹੋਵੇ। ਹੋਸਟ ਵਾਲਾ ਪਾਸਾ LAN ਉੱਤੇ ਸੁਣਦਾ ਹੈ ਅਤੇ ਹਰ ਸਵੀਕਾਰ ਕੀਤੇ ਕਨੈਕਸ਼ਨ ਲਈ ਨੇਮਸਪੇਸ ਦੇ ਅੰਦਰ ਦੂਜਾ socat ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ, ਜੋ ਐਪ ਦੇ ਲੂਪਬੈਕ ਨਾਲ ਜੁੜਦਾ ਹੈ। ਅੰਦਰਲੀ ਪ੍ਰਕਿਰਿਆ ਐਪਲੀਕੇਸ਼ਨ ਤੱਕ ਠੀਕ ਸਥਾਨਕ ਕਲਾਇੰਟ ਵਾਂਗ ਪਹੁੰਚਦੀ ਹੈ। ਨੇਮਸਪੇਸ ਦੀ ਰਾਊਟਿੰਗ ਵਿੱਚ ਕੁਝ ਨਹੀਂ ਬਦਲਦਾ, ਇਸ ਲਈ ਐਪ ਟਨਲ ਨੂੰ ਆਪਣੇ ਇੱਕੋ ਇੱਕ ਨਿਕਾਸ ਵਜੋਂ ਵਰਤਦੀ ਰਹਿੰਦੀ ਹੈ।
socat TCP-LISTEN:9100,reuseaddr,fork EXEC:'ip netns exec vpn socat STDIO tcp-connect:127.0.0.1:9100',nofork
ਬਾਹਰਲੀ ਪ੍ਰਕਿਰਿਆ ਨੂੰ root ਜਾਂ ਨੇਮਸਪੇਸ ਵਿੱਚ ਦਾਖਲ ਹੋਣ ਦੀ ਸਮਰੱਥਾ ਚਾਹੀਦੀ ਹੈ। ਜੇ VPN ਡਿੱਗ ਜਾਵੇ, ਤਾਂ ਐਪ ਆਪਣਾ ਰਾਹ ਗੁਆ ਲੈਂਦੀ ਹੈ ਅਤੇ ਪ੍ਰਕਾਸ਼ਿਤ ਪੋਰਟ ਬੰਦ ਹੋ ਕੇ ਫੇਲ੍ਹ ਹੁੰਦਾ ਹੈ, ਅਤੇ ਜੇਲ੍ਹ ਤੋਂ ਤੁਸੀਂ ਇਹੀ ਵਿਵਹਾਰ ਚਾਹੁੰਦੇ ਹੋ।
ਇੱਕ ਤੋਂ ਵੱਧ ਪੋਰਟ ਲੰਘਣ ਤਾਂ veth ਜੋੜੀ ਵਰਤੋ
ਜਦੋਂ ਕਈ ਪੋਰਟ ਜਾਂ ਪ੍ਰੋਟੋਕੋਲ ਲੰਘਣੇ ਹੋਣ, ਜਾਂ ਹੋਰ ਹੋਸਟਾਂ ਨੂੰ ਕਨੈਕਸ਼ਨ ਸ਼ੁਰੂ ਕਰਨੇ ਹੋਣ, ਤਾਂ veth ਜੋੜੀ ਸਹੀ ਜਵਾਬ ਹੈ। ਇੱਕ ਸਿਰਾ ਹੋਸਟ ਵਿੱਚ ਰਹਿੰਦਾ ਹੈ, ਦੂਜਾ ਨੇਮਸਪੇਸ ਵਿੱਚ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਛੋਟਾ /30 ਦੋਵੇਂ ਪਾਸਿਆਂ ਨੂੰ ਸਥਿਰ ਪਤਾ ਦਿੰਦਾ ਹੈ। ਫਿਰ ਹੋਸਟ ਰੂਟ ਨੇਮਸਪੇਸ ਦਾ ਪਤਾ ਜੋੜੀ ਉੱਤੋਂ ਭੇਜਦਾ ਹੈ।
ip link add veth0 type veth peer name veth1
ip link set veth1 netns vpn
ip addr add 10.77.0.1/30 dev veth0
ip link set veth0 up
ip netns exec vpn ip addr add 10.77.0.2/30 dev veth1
ip netns exec vpn ip link set veth1 up
ਜੇਲ੍ਹ ਤੋੜਨ ਦਾ ਇਰਾਦਾ ਨਾ ਹੋਵੇ ਤਾਂ ਹੋਸਟ ਰਾਹੀਂ ਡਿਫ਼ਾਲਟ ਰੂਟ ਨਾ ਜੋੜੋ। ਟਨਲ ਹੀ ਨਿਕਾਸ ਰਹਿਣਾ ਚਾਹੀਦਾ ਹੈ, ਇਸ ਲਈ ਜੋੜੀ ਉੱਤੋਂ ਸਿਰਫ਼ ਪ੍ਰਕਾਸ਼ਿਤ ਸੇਵਾ ਪਤੇ ਤੱਕ ਪਹੁੰਚਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਨੇਮਸਪੇਸ ਨੂੰ ਇਸ ਦੀ ਆਪਣੀ ਰਿਜ਼ਾਲਵਰ ਫ਼ਾਈਲ ਵੀ ਦਿਓ, ਕਿਉਂਕਿ ip netns exec /etc/netns/vpn/resolv.conf ਪੜ੍ਹਦਾ ਹੈ ਅਤੇ ਇਸ ਤੋਂ ਬਿਨਾਂ ਜੇਲ੍ਹ ਅੰਦਰ ਨਾਮ ਹੱਲ ਕਰਨਾ ਖਾਲੀ ਹੈ।
ਹੋਸਟ ਤੋਂ ਨਹੀਂ, ਕਿਸੇ ਹੋਰ ਮਸ਼ੀਨ ਤੋਂ ਪਰਖੋ
ਟੈਸਟ ਦੂਜੀ ਮਸ਼ੀਨ ਤੋਂ ਚਲਾਓ, ਕਿਉਂਕਿ ਹੋਸਟ ਸਥਾਨਕ ਸਰੋਤੇ ਤੱਕ ਅਜਿਹੇ ਰਾਹਾਂ ਰਾਹੀਂ ਪਹੁੰਚ ਸਕਦਾ ਹੈ ਜੋ LAN ਬਾਰੇ ਕੁਝ ਨਹੀਂ ਦੱਸਦੇ। ਪਹਿਲਾਂ ਵੇਖੋ ਕਿ ਐਪ ਨੇਮਸਪੇਸ ਦੇ ਅੰਦਰ ਅਸਲ ਵਿੱਚ ਕਿਸ ਨਾਲ ਬੱਝੀ ਹੈ, ਫਿਰ ਬਾਹਰੋਂ ਪ੍ਰਕਾਸ਼ਿਤ ਪਤੇ ਨਾਲ ਜੁੜੋ। ਉੱਥੇ ਹਰ ਪਤੇ ਨਾਲ ਬੱਝਣ ਨਾਲ ਜੇਲ੍ਹ ਚੌੜੀ ਨਹੀਂ ਹੁੰਦੀ, ਕਿਉਂਕਿ ਵਾਈਲਡਕਾਰਡ ਅਜੇ ਵੀ ਨੇਮਸਪੇਸ ਦਾ ਹੈ ਅਤੇ LAN ਇਸ ਨੂੰ ਵੇਖ ਨਹੀਂ ਸਕਦਾ।
ip netns exec vpn ss -lntp
ਜੇ ਹੋਸਟ ਵਾਲਾ ਕਨੈਕਸ਼ਨ ਕੰਮ ਕਰੇ ਅਤੇ LAN ਵਾਲਾ ਨਾ ਕਰੇ, ਤਾਂ ਗੁੰਮ ਹਿੱਸਾ ਹੌਪ ਜਾਂ ਰੂਟ ਹੈ, ਬੱਝਣ ਦਾ ਪਤਾ ਨਹੀਂ। ਚੱਲ ਰਹੀ tun ਡਿਵਾਈਸ ਨੂੰ ਅੰਦਰ ਲਿਜਾਣ ਦੀ ਥਾਂ ਨੇਮਸਪੇਸ ਦੇ ਅੰਦਰ OpenVPN ਸ਼ੁਰੂ ਕਰੋ, ਕਿਉਂਕਿ ਇੰਟਰਫ਼ੇਸ ਹਿਲਾਉਣ ਨਾਲ ਉਹ ਬੰਦ ਹੋ ਜਾਂਦੀ ਹੈ ਅਤੇ ਅਜਿਹੇ ਰੂਟ ਮਿਟ ਸਕਦੇ ਹਨ ਜੋ ਫਿਰ ਤੁਸੀਂ ਬਾਹਰੋਂ ਠੀਕ ਨਹੀਂ ਕਰ ਸਕੋਗੇ। ਰਿਕਵਰੀ ਕਮਾਂਡਾਂ ਜੇਲ੍ਹ ਅੰਦਰ ਨਹੀਂ, ਕੰਸੋਲ ਉੱਤੇ ਰੱਖੋ।