Android OpenVPN ਟਨਲ ਪਤੇ ਤੋਂ ਬਿਨਾਂ ਰੂਟ ਨਹੀਂ ਜੋੜਦਾ
Android OpenVPN ਕਲਾਇੰਟ ਫ਼ੋਨ ਕੋਲ ਟਨਲ ਪਤਾ ਹੋਣ ਤੱਕ ਰੂਟ ਨਹੀਂ ਜੋੜ ਸਕਦੇ। ਦੇਖੋ ਕੌਣ ਇਹ ਦਿੰਦਾ ਹੈ, ਕਿਹੜੇ pull ਫਿਲਟਰ ਇਸ ਨੂੰ ਕੱਢ ਦਿੰਦੇ ਹਨ ਅਤੇ ਤੁਹਾਨੂੰ ਖ਼ੁਦ ਕਦੋਂ ਲਿਖਣਾ ਚਾਹੀਦਾ ਹੈ।
ਤੁਹਾਡੀ Android OpenVPN ਪਰੋਫ਼ਾਈਲ ਰੂਟ ਨਹੀਂ ਜੋੜ ਸਕਦੀ ਕਿਉਂਕਿ ਫ਼ੋਨ ਕੋਲ ਵਰਚੁਅਲ ਇੰਟਰਫ਼ੇਸ ਉੱਤੇ ਕੋਈ ਪਤਾ ਨਹੀਂ ਹੈ, ਇਸ ਲਈ ਰੂਟ ਦੇ ਇਸ਼ਾਰਾ ਕਰਨ ਲਈ ਕੁਝ ਨਹੀਂ ਹੈ। ਰੂਟ ਸਿਰਫ਼ ਇਹ ਦੱਸਦੇ ਹਨ ਕਿ ਪੈਕਟ ਕਿੱਥੇ ਜਾਣੇ ਚਾਹੀਦੇ ਹਨ। ਟਨਲ ਪਤਾ ਇਹ ਦੱਸਦਾ ਹੈ ਕਿ ਟਨਲ ਦੇ ਅੰਦਰ ਫ਼ੋਨ ਕੌਣ ਹੈ, ਅਤੇ ਇੰਟਰਫ਼ੇਸ ਬਣਨ ਤੋਂ ਪਹਿਲਾਂ ਕਲਾਇੰਟ ਨੇ ਇੱਕ ਦੇਣਾ ਹੀ ਪਵੇਗਾ। ਹੇਠਾਂ ਦਿੱਤੀਆਂ ਚਾਰ ਜਾਂਚਾਂ ਕ੍ਰਮ ਵਿੱਚ ਕਰੋ ਅਤੇ ਪਹਿਲੀ ਅਸਫਲਤਾ ’ਤੇ ਰੁਕੋ, ਕਿਉਂਕਿ ਪਤਾ ਬਣਨ ਤੋਂ ਪਹਿਲਾਂ ਰੂਟ ਸੰਪਾਦਿਤ ਕਰਨਾ ਅਸਲ ਸਮੱਸਿਆ ਲੁਕਾ ਦਿੰਦਾ ਹੈ।
ਅਸਫਲਤਾ ਨੂੰ ਉਸੇ ਕ੍ਰਮ ਵਿੱਚ ਪੜ੍ਹੋ ਜਿਸ ਵਿੱਚ ਕਲਾਇੰਟ ਇਸ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ
Android ਦਾ VpnService.Builder ਦੋਵੇਂ ਧਾਰਨਾਵਾਂ ਵੱਖਰੀਆਂ ਰੱਖਦਾ ਹੈ: addAddress() ਉਸ ਇੰਟਰਫ਼ੇਸ ’ਤੇ ਪਤਾ ਰੱਖਦਾ ਹੈ ਜੋ ਐਪ ਬਣਾ ਰਹੀ ਹੈ, addRoute() ਮੰਜ਼ਿਲ ਅਗੇਤਰ ਜੋੜਦਾ ਹੈ, ਅਤੇ establish() ਘੱਟੋ-ਘੱਟ ਇੱਕ ਪਤਾ ਜੋੜੇ ਜਾਣ ਤੱਕ ਇੰਟਰਫ਼ੇਸ ਬਣਾਉਣ ਤੋਂ ਇਨਕਾਰ ਕਰਦਾ ਹੈ। OpenVPN ਕਲਾਇੰਟ ਪਰੋਫ਼ਾਈਲ ਅਤੇ ਸਰਵਰ ਵੱਲੋਂ ਭੇਜੇ ਵਿਕਲਪਾਂ ਨੂੰ ਠੀਕ ਉਹਨਾਂ ਕਾਲਾਂ ’ਤੇ ਮੈਪ ਕਰਦਾ ਹੈ, ਇਸ ਲਈ ਜੋ ਕਨੈਕਸ਼ਨ ਕਦੇ ਪਤਾ ਪਾਰਸ ਨਹੀਂ ਕਰਦਾ ਉਹ ਇੰਟਰਫ਼ੇਸ ਬਣਾ ਹੀ ਨਹੀਂ ਸਕਦਾ।
ਇਸੇ ਲਈ ਤੁਸੀਂ ਜੋ ਲੌਗ ਲਾਈਨ ਪੜ੍ਹ ਰਹੇ ਹੋ ਉਹ ਰੂਟ ਦਾ ਨਾਮ ਲੈ ਸਕਦੀ ਹੈ ਜਦੋਂ ਕਿ ਕਾਰਨ ਇੱਕ ਕਦਮ ਪਹਿਲਾਂ ਹੁੰਦਾ ਹੈ। ਕਲਾਇੰਟ ਰੂਟ ਪੜਾਅ ’ਤੇ ਇੰਟਰਫ਼ੇਸ ਬਣਨ ਤੋਂ ਬਾਅਦ ਹੀ ਪਹੁੰਚਦਾ ਹੈ; ਪਤਾ ਨਾ ਹੋਣ ’ਤੇ ਰੂਟ ਕਾਲ ਤੁਰੰਤ ਅਸਫਲ ਹੋ ਜਾਂਦੀ ਹੈ ਜਾਂ ਕਦੇ ਚੱਲਦੀ ਹੀ ਨਹੀਂ। ਜਦੋਂ ਲੌਗ ਕਹੇ ਕਿ ਰੂਟ ਨਹੀਂ ਜੋੜਿਆ ਜਾ ਸਕਦਾ, ਤਾਂ ਰੂਟ ਸਿੰਟੈਕਸ ਨਾਲ ਨਹੀਂ, ਪਤੇ ਨਾਲ ਸ਼ੁਰੂ ਕਰੋ।
ਜਾਂਚ 1: ਕੀ ਸਰਵਰ ਜਵਾਬ ਵਿੱਚ ਪਤਾ ਰੱਖਦਾ ਹੈ?
ਰੂਟ ਕੀਤੀ OpenVPN ਸੇਵਾ ਲਈ ਪਤਾ ਸਰਵਰ ਪੂਲ ਜਾਂ ਹਰ ਕਲਾਇੰਟ ਲਈ ਅਲਾਟਮੈਂਟ ਤੋਂ ਆਉਂਦਾ ਹੈ, ਅਤੇ ਟੋਪੋਲੋਜੀ ਇਸ ਦਾ ਰੂਪ ਤੈਅ ਕਰਦੀ ਹੈ। OpenVPN 2.4 ਜਾਂ ਨਵੇਂ ਸਰਵਰ ’ਤੇ, ਸਬਨੈੱਟ ਟੋਪੋਲੋਜੀ ਵਾਲੀ ਸੇਵਾ ਇੰਝ ਦਿਸਦੀ ਹੈ:
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccd
ਉਸ ਰੂਪ ਨਾਲ ਸਰਵਰ ifconfig 10.8.0.6 255.255.255.0 ਵਰਗਾ ਕੁਝ ਭੇਜਦਾ ਹੈ। ਪੁਰਾਣੀ topology net30 ਸਥਾਪਨਾ ਇਸ ਦੀ ਥਾਂ ਪੀਅਰ ਪਤਾ ਭੇਜਦੀ ਹੈ, ਉਦਾਹਰਨ ਲਈ ifconfig 10.8.0.6 10.8.0.5, ਇਸ ਲਈ ਦੋ ਮਾਡਲਾਂ ਵਿਚਕਾਰ ਭੇਜੀ ਗਈ ਪਰੋਫ਼ਾਈਲ ਸਹੀ ਦਿਸ ਸਕਦੀ ਹੈ ਜਦੋਂ ਕਿ ਉਹ ਗ਼ਲਤ ਨੈੱਟਮਾਸਕ ਲੈ ਕੇ ਚੱਲ ਰਹੀ ਹੋਵੇ।
ਕਲਾਇੰਟ ਕਨੈਕਸ਼ਨ ਲੌਗ ਵਿੱਚ ਭੇਜੇ ਗਏ ਵਿਕਲਪਾਂ ਦਾ ਸੈੱਟ ਲੱਭੋ। ਜੇ ਇਸ ਵਿੱਚ ifconfig ਦੀ ਇੱਕ ਵੀ ਲਾਈਨ ਨਹੀਂ ਹੈ, ਤਾਂ ਸਰਵਰ ਨੇ ਕਦੇ ਪਤਾ ਨਹੀਂ ਭੇਜਿਆ ਜਾਂ ਕਲਾਇੰਟ ਨੇ ਵਿਕਲਪ ਨਾਮਨਜ਼ੂਰ ਕੀਤਾ। ਜੋ ਸਰਵਰ client-config-dir ਵਰਤਦਾ ਹੈ, ਉਸ ’ਤੇ ਸਰਟੀਫਿਕੇਟ ਦੇ common name ਨਾਂ ਵਾਲੀ ਫ਼ਾਈਲ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ ਅਤੇ ਅਲਾਟਮੈਂਟ ਰੱਖਣੀ ਚਾਹੀਦੀ ਹੈ:
# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0
ਜਾਂਚ 2: ਕੀ ਕਲਾਇੰਟ ਮਿਲਿਆ ਪਤਾ ਰੱਖਦਾ ਹੈ?
ਬਹੁਤ ਚੌੜਾ ਫਿਲਟਰ ਦੂਜਾ ਆਮ ਕਾਰਨ ਹੈ। pull-filter OpenVPN 2.4 ਅਤੇ ਨਵੇਂ ਵਿੱਚ ਹੈ, ਅਤੇ ਜਦੋਂ ਕਈ ਫਿਲਟਰ ਇੱਕੋ ਵਿਕਲਪ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਹਨ ਤਾਂ ਆਖ਼ਰੀ ਮੇਲ ਖਾਣ ਵਾਲਾ ਜਿੱਤਦਾ ਹੈ, ਇਸ ਲਈ ਅੰਤ ਵਿੱਚ ਛੱਡਿਆ catch-all ਬਿਨਾਂ ਗ਼ਲਤੀ ਪਤਾ ਹਟਾ ਦਿੰਦਾ ਹੈ:
# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"
ਫਿਲਟਰ ਨੂੰ ਉਸੇ ਵਿਕਲਪ ਤੱਕ ਸੀਮਤ ਕਰੋ ਜੋ ਤੁਸੀਂ ਸੱਚਮੁੱਚ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ ਅਤੇ ਪਤੇ ਨੂੰ ਛੇੜੋ ਨਾ:
# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"
ਸਾਰੇ pull ਬੰਦ ਕਰਨ ਦੀ ਸਲਾਹ ਆਮ ਤੌਰ ’ਤੇ ਉਸ ਵਿਅਕਤੀ ਤੋਂ ਆਉਂਦੀ ਹੈ ਜੋ ਇੱਕੋ ਰੂਟ ਤੋਂ ਛੁਟਕਾਰਾ ਪਾਉਣਾ ਚਾਹੁੰਦਾ ਹੈ। route-nopull ਵਧੇਰੇ ਸੰਕਰਾ ਸਵਿੱਚ ਹੈ: ਇਹ ifconfig ਅਤੇ ਬਾਕੀ ਭੇਜੇ ਵਿਕਲਪ ਰੱਖਦਾ ਹੈ ਜਦੋਂ ਕਿ ਭੇਜੇ ਰੂਟ ਅਤੇ DHCP ਵਰਗੇ ਵਿਕਲਪ ਨਾਮਨਜ਼ੂਰ ਕਰਦਾ ਹੈ। ਇਹ ਤਦ ਵਰਤੋ ਜਦੋਂ ਸੱਚਮੁੱਚ ਇਹੀ ਚਾਹੀਦਾ ਹੋਵੇ, ਅਤੇ ਪਤੇ ਦਾ ਸਵਾਲ ਵੱਖਰਾ ਹੱਲ ਕਰੋ।
ਜਾਂਚ 3: ਕੀ ਪਤਾ ਤੁਹਾਡੇ ਲਿਖਣ ਦਾ ਹੈ?
ਹੱਥੀਂ ਪਤਾ ਦੇਣਾ ਤਦ ਹੀ ਜਾਇਜ਼ ਹੈ ਜਦੋਂ ਓਪਰੇਟਰ ਤੁਹਾਨੂੰ ਮੁੱਲ ਦਿੰਦਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਖ਼ੁਦ ਲਿਖੋ ਤਾਂ ਇਹ VPN ਕਲਾਇੰਟ ਸਬਨੈੱਟ ਤੋਂ ਆਉਣਾ ਚਾਹੀਦਾ ਹੈ, ਸਰਗਰਮ ਸੈਸ਼ਨਾਂ ਵਿੱਚ ਇਕੋ ਜਿਹਾ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ ਅਤੇ ਸਰਵਰ ਦੀ ਟੋਪੋਲੋਜੀ ਨਾਲ ਮੇਲ ਖਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਡੈਸਕਟਾਪ ਬ੍ਰਿਜ ਜਾਂ ਦੂਰ ਦੇ LAN ਦੇ ਹੋਸਟ ਦਾ ਪਤਾ ਕਾਪੀ ਕਰਨਾ ਦੋਵੇਂ ਪਾਸਿਆਂ ਤੋਂ ਗ਼ਲਤ ਹੈ: ਫ਼ੋਨ ਉਹ ਪਤਾ ਮੰਗੇਗਾ ਜੋ ਪਹਿਲਾਂ ਹੀ ਕਿਤੇ ਹੋਰ ਹੈ, ਅਤੇ ਗੇਟਵੇ ਕੋਲ ਉਸ ਤੱਕ ਵਾਪਸੀ ਦਾ ਰਾਹ ਨਹੀਂ ਹੋਵੇਗਾ।
ਰੂਟ ਵਿੱਚ ਦੂਰ ਦੇ LAN ਦਾ ਅਗੇਤਰ ਮੰਜ਼ਿਲ ਹੈ, ਕਦੇ ਫ਼ੋਨ ਦੀ ਪਛਾਣ ਨਹੀਂ। 10.60.0.0/24 ਲਈ ਰੂਟ ਕਹਿੰਦਾ ਹੈ ਕਿ ਉਸ ਨੈੱਟਵਰਕ ਤੱਕ ਟਨਲ ਰਾਹੀਂ ਪਹੁੰਚੋ; ਇਹ ਨਹੀਂ ਦੱਸਦਾ ਕਿ ਫ਼ੋਨ ਕੋਲ ਕਿਹੜਾ 10.60.0.x ਪਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ, ਅਤੇ ਫ਼ੋਨ ਕੋਲ ਉਹਨਾਂ ਵਿੱਚੋਂ ਇੱਕ ਵੀ ਨਹੀਂ ਹੋਣਾ ਚਾਹੀਦਾ। ਸਥਿਰ ਅਲਾਟਮੈਂਟ ਸਰਵਰ ਪਾਸੇ ਦੀਆਂ ਹੁੰਦੀਆਂ ਹਨ, ਜਿੱਥੇ ਉਹ ਗਤੀਸ਼ੀਲ ਪੂਲ ਨਾਲ ਟਕਰਾ ਨਹੀਂ ਸਕਦੀਆਂ।
ਇੱਕ ਪਛਾਣ ’ਤੇ ਦੋ ਸੈਸ਼ਨ ਉਹੀ ਟਕਰਾਅ ਦਿਖਾਉਂਦੇ ਹਨ। ਜੇ ਇੱਕੋ ਸਰਟੀਫਿਕੇਟ ਦੋ ਵਾਰ ਜੁੜੇ ਅਤੇ ਸਰਵਰ ਦੋਵਾਂ ਨੂੰ ਇੱਕ ਸਥਿਰ ਪਤਾ ਭੇਜੇ, ਤਾਂ ਦੂਜਾ ਸੈਸ਼ਨ ਪਹਿਲੇ ਦੀ ਨਕਲ ਬਣ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਹੱਲ ਕਲਾਇੰਟ ਪਾਸੇ ਦੀ ਸੋਧ ਨਹੀਂ ਸਗੋਂ ਵੱਖਰੀਆਂ ਪਛਾਣਾਂ ਜਾਂ ਵੱਖਰੀਆਂ ਅਲਾਟਮੈਂਟਾਂ ਹਨ।
ਜਾਂਚ 4: ਕੀ ਕੋਈ ਹੋਰ ਟਨਲ ਦੀ ਥਾਂ ਰੋਕ ਰਿਹਾ ਹੈ?
Android ਇੱਕ ਸਮੇਂ ਸਿਰਫ਼ ਇੱਕ ਸਰਗਰਮ VPN ਸੇਵਾ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਕੋਈ ਹੋਰ VPN ਐਪ, ਜਾਂ ਹੁਣ ਕੰਮ ਨਾ ਕਰਨ ਵਾਲੀ ਪਰੋਫ਼ਾਈਲ ਲਈ ਚਾਲੂ ਛੱਡੀ always-on VPN ਐਂਟਰੀ, ਤੁਹਾਡੇ OpenVPN ਕਲਾਇੰਟ ਦੇ establish() ਕਾਲ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹ ਥਾਂ ਲੈ ਸਕਦੀ ਹੈ। ਫਿਰ ਪਰੋਫ਼ਾਈਲ ਵੈਧ ਹੋਣ ’ਤੇ ਵੀ ਇੰਟਰਫ਼ੇਸ ਕਦੇ ਨਹੀਂ ਦਿਸਦਾ, ਇਸ ਲਈ ਦੂਜਾ VPN ਡਿਸਕਨੈਕਟ ਕਰੋ, always-on ਸੈਟਿੰਗ ਬੰਦ ਕਰੋ ਅਤੇ ਪਰੋਫ਼ਾਈਲ ਛੂਹਣ ਤੋਂ ਪਹਿਲਾਂ ਦੁਬਾਰਾ ਜੁੜੋ।
ਈਥਰਨੈੱਟ ਬ੍ਰਿਜਿੰਗ ’ਤੇ ਜ਼ੋਰ ਦੇਣ ਵਾਲੀ ਸੇਵਾ ਦੂਜੀ ਬੰਦ ਗਲੀ ਹੈ। root ਤੋਂ ਬਿਨਾਂ Android ਐਪ IP ਟਨਲ ਬਣਾ ਸਕਦੀ ਹੈ, ਬ੍ਰਿਜ ਕੀਤਾ ਈਥਰਨੈੱਟ ਸੈਗਮੈਂਟ ਨਹੀਂ, ਇਸ ਲਈ ਤੁਸੀਂ ਲਿਖੋ ਕੋਈ ਵੀ ਪਤਾ dev tap ਸਰਵਰ ਨੂੰ ਕੰਮ ਨਹੀਂ ਕਰਾਵੇਗਾ; ਓਪਰੇਟਰ ਨੂੰ ਰੂਟ ਕੀਤੀ ਸੇਵਾ ਦੇਣੀ ਪਵੇਗੀ। ਸਮੱਸਿਆ ਦੀ ਰਿਪੋਰਟ ਕਰਦਿਆਂ ਕਲਾਇੰਟ ਦਾ ਨਾਂ ਅਤੇ ਸੰਸਕਰਣ, ਭੇਜਿਆ ਵਿਕਲਪ ਸੈੱਟ, ਟੋਪੋਲੋਜੀ ਅਤੇ ਉਹ ਸਹੀ ਕਦਮ ਸ਼ਾਮਲ ਕਰੋ ਜਿੱਥੇ ਪਤਾ ਦਿਸਣਾ ਚਾਹੀਦਾ ਸੀ।
ਜੇ ਚਾਰੇ ਜਾਂਚਾਂ ਪਾਸ ਹੋਣ ਅਤੇ ਪਤਾ ਮੌਜੂਦ, ਇਕੋ ਜਿਹਾ ਨਾ ਹੋਵੇ ਅਤੇ ਠੀਕ ਮਾਸਕ ਹੋਇਆ ਹੋਵੇ, ਤਾਂ ਰੂਟ ਦਾ ਸਵਾਲ ਆਮ ਬਣ ਜਾਂਦਾ ਹੈ: ਸਰਵਰ ਕਿਹੜੇ ਅਗੇਤਰਾਂ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ ਅਤੇ ਕਲਾਇੰਟ ਨੂੰ ਉਹਨਾਂ ਦੀ ਹੱਦ ਕਿਵੇਂ ਤੈਅ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ। ਹੋਰ ਕੁਝ ਬਦਲਣ ਤੋਂ ਪਹਿਲਾਂ ਟਨਲ ਪਤਾ, ਉਸ ਦਾ ਨੈੱਟਮਾਸਕ ਅਤੇ ਟੋਪੋਲੋਜੀ ਲਿਖ ਲਓ, ਕਿਉਂਕਿ ਓਪਰੇਟਰ ਨੂੰ ਸਰਵਰ ਦੇ ਦ੍ਰਿਸ਼ ਨਾਲ ਤੁਲਨਾ ਕਰਨ ਲਈ ਇਹੀ ਤਿੰਨ ਮੁੱਲ ਚਾਹੀਦੇ ਹਨ।