ਇੱਕ ਲੈਪਟਾਪ 'ਤੇ, ਇੱਕ VPN ਕਲਾਇੰਟ ਜੁੜਿਆ ਹੋਣ ਸਮੇਂ, Linux ਕੰਟੇਨਰ ਆਪਸ ਵਿੱਚ ਗੱਲ ਕਰਦੇ ਰਹਿੰਦੇ ਹਨ ਅਤੇ Windows ਕੰਟੇਨਰ ਰੁਕ ਜਾਂਦੇ ਹਨ। ਬਦਲਣ ਵਾਲੀ ਚੀਜ਼ ਇਮੇਜ ਨਹੀਂ; ਪੈਕਟ ਹੋਸਟ ਤੱਕ ਜਿਸ ਰਾਹ ਜਾਂਦੇ ਹਨ ਉਹ ਹੈ। ਡਿਫਾਲਟ ਨੈੱਟਵਰਕ 'ਤੇ Windows ਕੰਟੇਨਰ ਹੋਸਟ ਦੀ ਰੂਟ ਟੇਬਲ ਅਤੇ ਅਨੁਵਾਦ ਉਧਾਰ ਲੈਂਦੇ ਹਨ, ਇਸ ਲਈ ਹੋਸਟ ਦੀ ਰੂਟਿੰਗ ਬਦਲਣ ਵਾਲੀ ਨੀਤੀ ਉਹਨਾਂ ਨੂੰ ਵੀ ਬਦਲਦੀ ਹੈ। ਕੁਝ ਵੀ ਦੁਬਾਰਾ ਸਥਾਪਿਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਰੂਟ ਖੋਜ ਨਾਲ ਇਸ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ।

Windows ਕੰਟੇਨਰ ਦੇ ਪੈਕਟ ਹੋਸਟ ਵਿੱਚ ਕਿੱਥੇ ਦਾਖਲ ਹੁੰਦੇ ਹਨ

ਡਿਫਾਲਟ nat ਨੈੱਟਵਰਕ 'ਤੇ ਕੰਟੇਨਰ Host Networking Service ਦੇ ਪ੍ਰੀਫਿਕਸ ਤੋਂ ਪਤਾ ਲੈਂਦਾ ਹੈ, ਆਮ ਤੌਰ 'ਤੇ 172.16.0.0/12 ਦੇ ਅੰਦਰ ਕਿਤੇ, ਅਤੇ ਵਰਚੁਅਲ ਅਡੈਪਟਰ ਰਾਹੀਂ ਹੋਸਟ ਤੱਕ ਪਹੁੰਚਦਾ ਹੈ। ਹੋਸਟ ਉਸ ਪ੍ਰੀਫਿਕਸ ਦੀ ਰੂਟ ਰੱਖਦਾ ਹੈ ਅਤੇ ਟ੍ਰੈਫਿਕ ਨੂੰ ਉਸ ਅਡੈਪਟਰ ਵੱਲ ਅਨੁਵਾਦ ਕਰਦਾ ਹੈ ਜੋ ਇਸ ਸਮੇਂ ਸਰਗਰਮ ਹੈ। ਉਸ ਰਾਹ ਦੇ ਵਿਚਕਾਰ ਕੋਈ ਵੱਖਰੀ ਵਰਚੁਅਲ ਮਸ਼ੀਨ ਨਹੀਂ ਹੈ।

ਇਹੀ ਡਿਜ਼ਾਈਨ ਅਸਫਲਤਾ ਨੂੰ ਮਸ਼ੀਨੀ ਬਣਾਉਂਦਾ ਹੈ। ਜਦੋਂ ਕੰਟੇਨਰ ਪੈਕਟ ਭੇਜਦਾ ਹੈ, ਹੋਸਟ ਕੰਟੇਨਰ ਪ੍ਰੀਫਿਕਸ ਲਈ ਰੂਟ ਖੋਜ ਕਰਦਾ ਹੈ। ਜੋ ਵੀ ਰੂਟ ਜਿੱਤਦੀ ਹੈ ਪੈਕਟ ਉੱਥੇ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਕੰਟੇਨਰ ਦਾ ਇਸ ਵਿੱਚ ਕੋਈ ਮੱਤ ਨਹੀਂ।

VPN ਕਲਾਇੰਟ ਉਸ ਰਾਹ 'ਤੇ ਕੀ ਬਦਲਦਾ ਹੈ

ਕਾਰਪੋਰੇਟ ਕਲਾਇੰਟ ਅਕਸਰ ਬਹੁਤ ਸਾਰੀਆਂ ਰੂਟਾਂ ਅਤੇ ਇੱਕ ਫਿਲਟਰ ਸਥਾਪਿਤ ਕਰਦਾ ਹੈ ਜੋ ਟਨਲ ਚਾਲੂ ਹੋਣ ਸਮੇਂ ਸਥਾਨਕ ਸਬਨੈੱਟ ਤੱਕ ਪਹੁੰਚ ਨੂੰ ਰੱਦ ਕਰਦਾ ਹੈ। ਮਕਸਦ ਬਚਾਅ ਵਾਲਾ ਹੈ: ਸਮਝੌਤਾ ਹੋਏ ਸਥਾਨਕ ਨੈੱਟਵਰਕ ਨੂੰ ਸੁਰੱਖਿਅਤ ਮਸ਼ੀਨ ਤੱਕ ਨਹੀਂ ਪਹੁੰਚਣਾ ਚਾਹੀਦਾ। ਮਾੜਾ ਅਸਰ ਇਹ ਹੈ ਕਿ ਹੋਸਟ ਦੀ ਰੂਟ ਕੰਟੇਨਰ ਪ੍ਰੀਫਿਕਸ ਤੱਕ ਹੁਣ ਸਥਾਨਕ NAT ਨੈੱਟਵਰਕ ਨਹੀਂ ਹੈ।

ਇਸ ਦੀ ਬਜਾਏ ਖੋਜ ਟਨਲ ਨਾਲ ਮੇਲ ਖਾਂਦੀ ਹੈ ਅਤੇ ਪੈਕਟ ਉਸ ਗੇਟਵੇ ਨੂੰ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ ਜਿਸਨੇ ਉਹ ਕੰਟੇਨਰ ਪਤਾ ਕਦੇ ਨਹੀਂ ਸੁਣਿਆ। Ping ਅਸਫਲ ਹੁੰਦਾ ਹੈ, ਐਪਲੀਕੇਸ਼ਨ ਦਾ ਸਮਾਂ ਖ਼ਤਮ ਹੁੰਦਾ ਹੈ, ਅਤੇ VPN ਆਇਕਨ ਚਮਕਦੇ ਹੋਏ ਕੰਟੇਨਰ ਟੁੱਟਿਆ ਦਿਸਦਾ ਹੈ। ਜੁੜੇ ਹੋਣ ਸਮੇਂ ਹੋਸਟ ਦੀ ਟੇਬਲ ਵੇਖੋ ਅਤੇ ਮੁਕਾਬਲਾਵਾਦੀ ਰੂਟ ਦਿਸਦੀ ਹੈ।

Container modeOutbound pathTypical result behind the VPN
Windows, default natHost routes and translates container trafficContainer prefix follows the tunnel and fails
Windows, transparentContainer sits on the physical linkDepends on the local subnet being allowed
Linux engine on Docker DesktopVM egress proxied by a host processOften keeps working

Linux ਕੰਟੇਨਰ ਵੱਖਰਾ ਵਿਵਹਾਰ ਕਿਉਂ ਕਰਦੇ ਹਨ

Linux ਇੰਜਣ ਕੰਟੇਨਰਾਂ ਨੂੰ ਹਲਕੀ ਵਰਚੁਅਲ ਮਸ਼ੀਨ ਦੇ ਅੰਦਰ ਚਲਾਉਂਦਾ ਹੈ, ਅਤੇ ਉਸ ਮਸ਼ੀਨ ਤੋਂ ਬਾਹਰ ਜਾਣ ਵਾਲੇ ਕਨੈਕਸ਼ਨ ਕੰਟੇਨਰ ਵੱਲੋਂ ਹੋਸਟ ਪਾਸੇ ਦਾ ਪ੍ਰੌਕਸੀ ਖੋਲ੍ਹਦਾ ਹੈ। ਸੌਕਟ ਹੋਸਟ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ, ਇਸ ਲਈ ਕੰਟੇਨਰ ਪ੍ਰੀਫਿਕਸ ਬਾਰੇ VPN ਦਾ ਨਿਯਮ ਉਸ 'ਤੇ ਉਸੇ ਤਰ੍ਹਾਂ ਲਾਗੂ ਨਹੀਂ ਹੁੰਦਾ, ਅਤੇ ਕੰਮ ਦਾ ਭਾਰ ਨੈੱਟਵਰਕ ਤੱਕ ਪਹੁੰਚਦਾ ਰਹਿੰਦਾ ਹੈ।

ਇਹ ਫ਼ਰਕ ਇਹ ਵੀ ਦੱਸਦਾ ਹੈ ਕਿ Linux ਦੇ ਤਰੀਕੇ ਕਿਉਂ ਨਹੀਂ ਲੰਘਦੇ। ਜਿਸ Linux ਕੰਟੇਨਰ ਨੂੰ ਆਪਣੀ ਟਨਲ ਚਾਹੀਦੀ ਹੈ ਉਸਨੂੰ TUN ਜੰਤਰ ਅਤੇ NET_ADMIN ਸਮਰੱਥਾ ਦਿੱਤੀ ਜਾਂਦੀ ਹੈ। Windows ਕੰਟੇਨਰ ਕਿਸੇ ਇੰਟਰਫੇਸ ਨੂੰ ਜੰਤਰ ਵਜੋਂ ਨਹੀਂ ਦਰਸਾਉਂਦੇ, ਇਸ ਲਈ ਉਸ ਪੈਟਰਨ ਦਾ ਉਸ ਪਾਸੇ ਕੋਈ ਬਰਾਬਰ ਨਹੀਂ।

ਰੂਟ ਸਾਬਤ ਕਰੋ, ਫਿਰ ਡਿਜ਼ਾਈਨ ਚੁਣੋ

ਸਬੂਤ ਹੋਸਟ ਤੋਂ ਇਕੱਠੇ ਕਰੋ, ਕੰਟੇਨਰ ਤੋਂ ਨਹੀਂ, ਕਿਉਂਕਿ ਖੋਜ ਹੋਸਟ ਕਰਦਾ ਹੈ:

docker network inspect nat --format "{{range .IPAM.Config}}{{.Subnet}}{{end}}"
route print -4
Get-NetRoute -AddressFamily IPv4 | Where-Object DestinationPrefix -like "172.16.*"

VPN ਜੁੜਨ ਤੋਂ ਪਹਿਲਾਂ ਇੱਕ ਵਾਰ ਅਤੇ ਬਾਅਦ ਵਿੱਚ ਇੱਕ ਵਾਰ ਰੂਟ ਆਉਟਪੁੱਟ ਚਲਾਓ। ਜੇ ਦੂਜੇ ਆਉਟਪੁੱਟ ਵਿੱਚ ਕੰਟੇਨਰ ਪ੍ਰੀਫਿਕਸ ਟਨਲ ਅਡੈਪਟਰ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਹੈ, ਤਾਂ ਨਿਦਾਨ ਪੂਰਾ ਹੈ ਅਤੇ ਕੰਟੇਨਰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਨ ਨਾਲ ਮਦਦ ਨਹੀਂ ਮਿਲੇਗੀ।

ਪਹਿਲਾ ਵਿਕਲਪ ਨੀਤੀ ਦਾ ਫੈਸਲਾ ਹੈ: ਨੈੱਟਵਰਕ ਦੇ ਮਾਲਕ ਨੂੰ ਪੁੱਛੋ ਕਿ ਇਸ ਡਿਵਾਈਸ ਲਈ ਸਥਾਨਕ LAN ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦਿੱਤੀ ਜਾ ਸਕਦੀ ਹੈ ਜਾਂ ਨਹੀਂ। ਕਈ ਕਾਰਪੋਰੇਟ ਕਲਾਇੰਟ ਇਸਨੂੰ ਸੈਟਿੰਗ ਵਜੋਂ ਦਿੰਦੇ ਹਨ, ਪਰ ਇਹ ਜਾਣ-ਬੁੱਝ ਕੇ ਬਣਾਈ ਸੀਮਾ ਨੂੰ ਕਮਜ਼ੋਰ ਕਰਦਾ ਹੈ। ਇਸਨੂੰ ਮਾਲਕ ਅਤੇ ਸਮੀਖਿਆ ਤਾਰੀਖ਼ ਸਮੇਤ ਦਸਤਾਵੇਜ਼ੀ ਛੋਟ ਵਜੋਂ ਮੰਗੋ। ਹਰ ਡਿਵਾਈਸ ਲਈ ਟੌਗਲ ਜਿਸ ਵੱਲ ਕੋਈ ਵਾਪਸ ਨਹੀਂ ਆਉਂਦਾ, ਉਹੀ ਤਰੀਕਾ ਹੈ ਜਿਸ ਨਾਲ ਬਚਾਅ ਵਾਲੀ ਨੀਤੀ ਚੁੱਪਚਾਪ ਗਾਇਬ ਹੋ ਜਾਂਦੀ ਹੈ।

ਜਿੱਥੇ ਨੀਤੀ ਟਿਕਣੀ ਲਾਜ਼ਮੀ ਹੈ, ਉੱਥੇ ਰੂਟ ਨਾਲ ਲੜਨ ਦੀ ਬਜਾਏ ਕੰਮ ਦਾ ਭਾਰ ਹਿਲਾਓ। ਸਪਸ਼ਟ ਸਬਨੈੱਟ ਅਤੇ ਗੇਟਵੇ ਵਾਲਾ ਪਾਰਦਰਸ਼ੀ ਨੈੱਟਵਰਕ ਕੰਟੇਨਰਾਂ ਨੂੰ ਸਥਾਨਕ ਲਿੰਕ 'ਤੇ ਰੱਖਦਾ ਹੈ, Linux ਕੰਮ ਦਾ ਭਾਰ VM ਪ੍ਰੌਕਸੀ ਪਿੱਛੇ ਚੱਲਦਾ ਹੈ, ਅਤੇ ਆਪਣੇ ਕਲਾਇੰਟ ਵਾਲੀ ਵੱਖਰੀ ਵਰਚੁਅਲ ਮਸ਼ੀਨ ਆਪਣੀ ਨੀਤੀ ਬਣਾਈ ਰੱਖਦੀ ਹੈ। ਇੱਕ ਜਾਣ-ਬੁੱਝ ਕੇ ਚੁਣੋ ਅਤੇ ਕੰਟੇਨਰ ਦੇ ਅੰਦਰੋਂ ਇਸਦੀ ਜਾਂਚ ਕਰੋ, ਕਿਉਂਕਿ ਵਰਤੋਂਕਾਰ ਦੀ ਬੇਨਤੀ ਉੱਥੋਂ ਹੀ ਪੈਦਾ ਹੁੰਦੀ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ