WSL2 VPN ਸਬਨੈੱਟ ਤੱਕ ਨਹੀਂ ਪਹੁੰਚਦਾ: ਹੋਸਟ ਦਾ ਰੂਟ ਪੜ੍ਹੋ
ਡਿਸਟ੍ਰੋ ਆਪਣੇ NAT ਪਿੱਛੇ ਬੈਠਦਾ ਹੈ ਅਤੇ Windows ਟਨਲ ਨੂੰ ਕਦੇ ਨਹੀਂ ਵੇਖਦਾ। ਹੋਸਟ ਤੋਂ ਮੌਜੂਦਾ ਪਤਾ ਅਤੇ ਪ੍ਰੀਫਿਕਸ ਪੜ੍ਹੋ, ਫਿਰ ਉਹਨਾਂ ਨੂੰ WSL ਅੰਦਰ ਸ਼ਾਮਲ ਕਰੋ।
ਡਿਸਟ੍ਰੋ ਦੇ ਅੰਦਰੋਂ ਅੰਦਰੂਨੀ ਸਰਵਰ ਨੂੰ ping ਸਮਾਂ ਸੀਮਾ ਪਾਰ ਕਰ ਜਾਂਦਾ ਹੈ, ਜਦਕਿ ਉਹੀ ਪਤਾ Windows ਤੋਂ ਜਵਾਬ ਦਿੰਦਾ ਹੈ। VPN ਜੁੜਿਆ ਹੋਇਆ ਹੈ ਅਤੇ Windows ਦਾ ਰੂਟ ਸਹੀ ਹੈ, ਇਸ ਲਈ ਪਾੜਾ WSL ਦੀ ਹੱਦ ਹੈ। ਫੇਲ ਹੋਈ ਕਮਾਂਡ ਤੋਂ ਹੋਸਟ ਇੰਟਰਫੇਸ ਤੱਕ ਦਾ ਰਾਹ ਤੁਰੋ। ਹੱਲ ਕਨਫਿਗ ਫਾਈਲ ਵਿੱਚ ਸਥਿਰ CIDR ਨਹੀਂ ਹੈ; ਇਹ ਮੌਜੂਦਾ ਪਤਾ ਪੜ੍ਹ ਕੇ ਉੱਥੇ ਸ਼ਾਮਲ ਕਰਨਾ ਹੈ ਜਿੱਥੇ ਡਿਸਟ੍ਰੋ ਇਸਨੂੰ ਵਰਤ ਸਕਦਾ ਹੈ।
ਪੱਕਾ ਕਰੋ ਕਿ ਰਾਹ ਕਿੱਥੇ ਰੁਕਦਾ ਹੈ
ਦੋਵੇਂ ਪਾਸਿਆਂ 'ਤੇ ਉਹੀ ਟੈਸਟ ਚਲਾਓ: Windows ਤੋਂ ਇੱਕ ਅੰਦਰੂਨੀ ਹੋਸਟ ਹੱਲ ਕਰਕੇ ਜੁੜੋ, ਫਿਰ ਇਸਨੂੰ ਡਿਸਟ੍ਰੋ ਵਿੱਚ ਦੁਹਰਾਓ। Windows ਵਿੱਚ ਸਫਲਤਾ ਅਤੇ ਡਿਸਟ੍ਰੋ ਵਿੱਚ ਸਮਾਂ ਸੀਮਾ ਨਾਲ ਨੁਕਸ ਦੋਵਾਂ ਵਿਚਕਾਰ ਦਿਖਦਾ ਹੈ, VPN ਕਲਾਇੰਟ ਜਾਂ ਅੰਦਰੂਨੀ ਸਰਵਰ ਵਿੱਚ ਨਹੀਂ। ਕੋਈ ਵੀ ਰੂਟ ਬਦਲਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਕਰੋ, ਤਾਂ ਜੋ ਦੋਵੇਂ ਨਤੀਜੇ ਇੱਕੋ ਮੰਜ਼ਿਲ ਦਾ ਵਰਣਨ ਕਰਨ।
ਡਿਸਟ੍ਰੋ ਦੇ ਅੰਦਰ, ip -4 addr WSL NAT ਰੇਂਜ ਦੇ ਪਤੇ ਵਾਲਾ ਵਰਚੁਅਲ ਅਡੈਪਟਰ ਦਿਖਾਉਂਦਾ ਹੈ, ਅਤੇ ip route WSL ਗੇਟਵੇ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰਦਾ ਡਿਫਾਲਟ ਰੂਟ ਦਿਖਾਉਂਦਾ ਹੈ। ਕਾਰਪੋਰੇਟ ਪ੍ਰੀਫਿਕਸ ਲਈ ਕੋਈ ਰੂਟ ਨਹੀਂ ਹੈ, ਕਿਉਂਕਿ ਹੋਸਟ ਦੇ ਟਨਲ ਅਡੈਪਟਰ ਦਾ ਡਿਸਟ੍ਰੋ ਅੰਦਰ ਕੋਈ ਬਰਾਬਰ ਨਹੀਂ ਹੈ। ਡਿਫਾਲਟ ਗੇਟਵੇ WSL NAT ਵੱਲ ਜਾਂਦਾ ਹੈ, ਕਾਰਪੋਰੇਟ ਨੈੱਟਵਰਕ ਵੱਲ ਨਹੀਂ।
ਪਹਿਲਾਂ ਪਹੁੰਚਯੋਗ ਲਿੰਕ 'ਤੇ ਸਥਾਨਕ ਪਤਾ ਸ਼ਾਮਲ ਕੀਤੇ ਬਿਨਾਂ ਕਾਰਪੋਰੇਟ ਰੂਟ ਸ਼ਾਮਲ ਕਰਨ ਨਾਲ ਸਮਾਂ ਸੀਮਾ ਜਾਂ ਨੈੱਟਵਰਕ ਅਪਹੁੰਚ ਤਰੁੱਟੀ ਹੁੰਦੀ ਹੈ। ਰੂਟ ਨੂੰ ਲਾਭਦਾਇਕ ਬਣਾਉਣ ਵਾਲਾ ਹਿੱਸਾ ਪਤਾ ਹੈ, ਇਸ ਲਈ ਪਹਿਲਾਂ ਉਹ ਪੜ੍ਹੋ ਅਤੇ ਰੂਟ ਨੂੰ ਦੂਜਾ ਕਦਮ ਮੰਨੋ।
ਮਿਰਰ ਨੈੱਟਵਰਕਿੰਗ ਜਾਂ ਸਕ੍ਰਿਪਟ ਰੂਟ ਚੁਣੋ
ਮਿਰਰ ਨੈੱਟਵਰਕਿੰਗ ਡਿਸਟ੍ਰੋ ਨੂੰ ਹੋਸਟ ਦੇ ਆਪਣੇ ਇੰਟਰਫੇਸ ਦਿੰਦੀ ਹੈ, ਇਸ ਲਈ ਟਨਲ ਅਤੇ ਉਸਦੇ ਰੂਟ ਕਾਪੀ ਕੀਤੇ ਬਿਨਾਂ ਦਿਖਦੇ ਹਨ। ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਨਵੇਂ Windows ਬਿਲਡ ਅਤੇ .wslconfig ਵਿੱਚ networkingMode=mirrored 'ਤੇ ਨਿਰਭਰ ਹੈ, ਅਤੇ ਇਸਨੂੰ ਚਾਲੂ ਕਰਨ ਨਾਲ localhost ਫਾਰਵਰਡਿੰਗ ਵਰਗਾ ਅਸੰਬੰਧਿਤ ਵਿਵਹਾਰ ਬਦਲਦਾ ਹੈ। ਇਸਨੂੰ ਰੂਟ ਦੀ ਬਾਰੀਕ ਟਿਊਨਿੰਗ ਨਹੀਂ, ਪਲੇਟਫਾਰਮ ਬਦਲਾਅ ਮੰਨੋ। ਜੇ ਬਿਲਡ ਇਸਨੂੰ ਸਮਰਥਨ ਦਿੰਦਾ ਹੈ ਅਤੇ ਮਾੜੇ ਪ੍ਰਭਾਵ ਸਵੀਕਾਰਯੋਗ ਹਨ, ਤਾਂ ਇਹ ਸਭ ਤੋਂ ਛੋਟਾ ਰਾਹ ਹੈ।
ਸੰਕਰਾ ਤਰੀਕਾ ਡਿਫਾਲਟ NAT ਰੱਖਦਾ ਹੈ ਅਤੇ ਜਦੋਂ ਵੀ ਟਨਲ ਉੱਠਦਾ ਹੈ, ਟਨਲ ਦਾ ਪਤਾ ਅਤੇ ਰੂਟ ਡਿਸਟ੍ਰੋ ਵਿੱਚ ਕਾਪੀ ਕਰਦਾ ਹੈ। ਇਹ ਵੱਧ ਬਿਲਡਾਂ 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ, localhost ਵਿਵਹਾਰ ਨਹੀਂ ਬਦਲਦਾ, ਅਤੇ VPN ਬੰਦ ਹੋਣ 'ਤੇ ਦਿਖਣਯੋਗ ਢੰਗ ਨਾਲ ਫੇਲ ਹੁੰਦਾ ਹੈ। ਕੀਮਤ ਇੱਕ ਛੋਟੀ ਸਕ੍ਰਿਪਟ ਹੈ ਜੋ ਹਰ ਕਨੈਕਸ਼ਨ 'ਤੇ ਚਲਾਉਣੀ ਪੈਂਦੀ ਹੈ।
ਇੱਕ ਚੁਣੋ ਅਤੇ ਲਿਖ ਲਓ। ਮਿਰਰ ਕਨਫਿਗਰੇਸ਼ਨ ਨੂੰ ਮੈਨੁਅਲ ਰੂਟਾਂ ਨਾਲ ਮਿਲਾਉਣ ਨਾਲ ਇੱਕੋ ਪ੍ਰੀਫਿਕਸ ਲਈ ਦੋ ਰਾਹ ਵਾਲਾ ਅਤੇ ਕਿਸੇ ਦਾ ਵੀ ਸਪੱਸ਼ਟ ਮਾਲਕ ਨਾ ਹੋਣ ਵਾਲਾ ਡਿਸਟ੍ਰੋ ਬਣਦਾ ਹੈ। ਇੱਕ ਦਸਤਾਵੇਜ਼ੀ ਤਰੀਕਾ ਦੋ ਅੱਧ-ਕਨਫਿਗਰ ਕੀਤਿਆਂ ਨਾਲੋਂ ਡੀਬੱਗ ਕਰਨਾ ਸੌਖਾ ਹੈ।
ਹੋਸਟ ਤੋਂ ਮੌਜੂਦਾ ਟਨਲ ਵੇਰਵੇ ਲਓ
ਅਡੈਪਟਰ ਨੂੰ ਨਾਮ ਨਾਲ ਨਹੀਂ, MAC ਪਤੇ ਨਾਲ ਮਿਲਾਓ, ਕਿਉਂਕਿ ਨਾਮ VPN ਕਲਾਇੰਟ ਅਤੇ ਕਨੈਕਸ਼ਨ ਕ੍ਰਮ ਨਾਲ ਬਦਲਦੇ ਹਨ। ਅਡੈਪਟਰ ਇੱਕ ਵਾਰ ਸੂਚੀਬੱਧ ਕਰੋ, ਟਨਲ ਅਡੈਪਟਰ ਦਾ MAC ਨੋਟ ਕਰੋ, ਫਿਰ ਉਸਦਾ ਪਤਾ ਅਤੇ ਪ੍ਰੀਫਿਕਸ ਪੁੱਛੋ। MAC ਮੁੜ-ਜੁੜਨ ਦੌਰਾਨ ਵਰਚੁਅਲ ਅਡੈਪਟਰ ਨਾਲ ਰਹਿੰਦਾ ਹੈ, ਪਰ ਨਾਮ ਅਤੇ ਇੰਟਰਫੇਸ ਇੰਡੈਕਸ ਨਹੀਂ ਰਹਿੰਦੇ:
powershell.exe 'Get-NetAdapter | Where-Object { $_.MacAddress -eq "3C-52-82-0A-1B-7C" } | Get-NetIPAddress -AddressFamily IPv4 | Select-Object IPAddress, PrefixLength'ਗੇਟਵੇ ਇੰਟਰਫੇਸ ਕਨਫਿਗਰੇਸ਼ਨ ਤੋਂ ਆਉਂਦਾ ਹੈ। ਪਹਿਲਾਂ ਇੰਟਰਫੇਸ ਇੰਡੈਕਸ ਲਓ, ਫਿਰ ਅਗਲੀ ਹੌਪ ਪੜ੍ਹੋ। ਰੀਬੂਟ ਜਾਂ ਅਡੈਪਟਰ ਰੀਸੈਟ ਤੋਂ ਬਾਅਦ ਇੰਡੈਕਸ ਬਦਲ ਸਕਦਾ ਹੈ, ਇਸ ਲਈ ਸਕ੍ਰਿਪਟ ਨੂੰ ਇਸਨੂੰ ਸਟੋਰ ਕਰਨ ਦੀ ਬਜਾਏ ਪੜ੍ਹਨਾ ਚਾਹੀਦਾ ਹੈ:
powershell.exe '(Get-NetAdapter | Where-Object { $_.MacAddress -eq "3C-52-82-0A-1B-7C" }).InterfaceIndex'
powershell.exe '(Get-NetIPConfiguration -InterfaceIndex 27).IPv4DefaultGateway.NextHop'ਆਉਟਪੁੱਟ ਨੂੰ ਵੇਰੀਏਬਲ ਨੂੰ ਦੇਣ ਤੋਂ ਪਹਿਲਾਂ tr -d '\r' ਰਾਹੀਂ ਲੰਘਾਓ। PowerShell ਲਾਈਨਾਂ ਨੂੰ carriage return ਨਾਲ ਖਤਮ ਕਰਦਾ ਹੈ, ਅਤੇ ਸਟ੍ਰਿਪ ਨਾ ਕਰਨ 'ਤੇ ਆਖਰੀ ਫੀਲਡ ਵਿੱਚ ਲੁਕਿਆ ਅੱਖਰ ਰਹਿ ਜਾਂਦਾ ਹੈ ਜੋ ਰੂਟ ਕਮਾਂਡ ਨੂੰ ਉਲਝਾਉਣ ਵਾਲੀ ਪਾਰਸ ਤਰੁੱਟੀ ਨਾਲ ਫੇਲ ਕਰਦਾ ਹੈ।
ਡਿਸਟ੍ਰੋ ਦੇ ਅੰਦਰ ਪਤਾ ਅਤੇ ਰੂਟ ਲਾਗੂ ਕਰੋ
ਟਨਲ ਦਾ ਪਤਾ ਡਿਸਟ੍ਰੋ ਦੇ ਇੰਟਰਫੇਸ 'ਤੇ ਪ੍ਰੀਫਿਕਸ ਵਾਲੇ ਪਤੇ ਵਜੋਂ ਸਥਾਪਿਤ ਕਰੋ, ਫਿਰ ਕਾਰਪੋਰੇਟ ਬਲਾਕ ਨੂੰ ਹੋਸਟ ਦੇ ਗੇਟਵੇ ਰਾਹੀਂ ਰੂਟ ਕਰੋ:
sudo ip addr add 172.20.14.37/22 dev vpn
sudo ip route add 172.20.0.0/16 via 172.20.12.1 dev vpnਕਨੈਕਸ਼ਨ ਚੱਕਰ ਵਿੱਚ ਆਉਣ 'ਤੇ NetworkManager ਮੈਨੁਅਲੀ ਕਨਫਿਗਰ ਕੀਤਾ ਪਤਾ ਸੁੱਟ ਦਿੰਦਾ ਹੈ, ਅਤੇ ਕੋਈ DHCP ਕਲਾਇੰਟ ਬਦਲ ਨਹੀਂ ਮੰਗਦਾ। ਢੰਗ ਨੂੰ ਸਵੈਚਾਲਿਤ 'ਤੇ ਰੱਖੋ ਤਾਂ ਜੋ ਹਰ ਮੁੜ-ਜੁੜਨ ਪਤਾ ਤਾਜ਼ਾ ਕਰੇ, ਫਿਰ ਕਨੈਕਸ਼ਨ ਦੁਬਾਰਾ ਉੱਪਰ ਲਿਆਓ। ਮੈਨੁਅਲ ਢੰਗ ਪਹਿਲੀ ਮੁੜ-ਜੁੜਨ ਤੱਕ ਸਥਿਰ ਦਿਖਦਾ ਹੈ:
nmcli con show vpn
sudo nmcli con mod vpn ipv4.method auto
sudo nmcli con up vpnਦੋਵੇਂ ਕਦਮ VPN ਸ਼ੁਰੂ ਕਰਨ ਵਾਲੇ ਹੁੱਕ ਤੋਂ ਚਲਾਓ, ਇੰਟਰਐਕਟਿਵ ਸ਼ੈੱਲ ਤੋਂ ਨਹੀਂ। ਪਤਾ ਪੜ੍ਹਨ, ਸ਼ਾਮਲ ਕਰਨ, ਰੂਟ ਸ਼ਾਮਲ ਕਰਨ ਅਤੇ ਮੁੱਲ ਲੌਗ ਕਰਨ ਵਾਲੀ ਸਕ੍ਰਿਪਟ ਵਾਰ-ਵਾਰ ਮੈਨੁਅਲ ਮੁਰੰਮਤ ਨੂੰ ਦੁਹਰਾਉਣਯੋਗ ਬਣਾਉਂਦੀ ਹੈ, ਅਤੇ ਪ੍ਰੀਫਿਕਸ ਬਦਲਣ 'ਤੇ ਸਭ ਤੋਂ ਪਹਿਲਾਂ ਪੜ੍ਹਨ ਵਾਲੀ ਚੀਜ਼ ਲੌਗ ਹੈ।
ਨਾਮ ਪਿੰਨ ਕਰੋ ਅਤੇ ਰਾਹ ਸਾਬਤ ਕਰੋ
ਨੈੱਟਵਰਕ ਸਵਿੱਚ ਤੋਂ ਬਾਅਦ ਕਰਨਲ ਡਿਸਟ੍ਰੋ ਦੇ ਇੰਟਰਫੇਸ ਦਾ ਨਾਮ eth1 ਅਤੇ eth2 ਵਿਚਕਾਰ ਬਦਲ ਸਕਦਾ ਹੈ, ਅਤੇ ਨਾਮ 'ਤੇ ਲਿਖੀ ਸਕ੍ਰਿਪਟ ਫਿਰ ਗਲਤ ਡਿਵਾਈਸ ਸੋਧਦੀ ਹੈ। MAC ਨਾਲ ਬੱਝਿਆ udev ਨਿਯਮ ਇੰਟਰਫੇਸ ਨੂੰ ਸਥਿਰ ਲੇਬਲ ਦਿੰਦਾ ਹੈ:
SUBSYSTEM=="net", ACTION=="add", ATTRS{address}=="3c:52:82:0a:1b:7c", NAME="vpn"ਫਿਰ ਪਤਾ, ਰੂਟ ਅਤੇ ਅਸਲ TCP ਕਨੈਕਸ਼ਨ ਨਾਲ ਪੁਸ਼ਟੀ ਕਰੋ: ip -4 addr show dev vpn, ip route get 172.20.4.10 ਅਤੇ ਜਾਣੇ-ਪਛਾਣੇ ਅੰਦਰੂਨੀ ਪੋਰਟ ਨਾਲ ਕਨੈਕਸ਼ਨ। ਰੂਟ ਖੋਜ ਵਿੱਚ vpn ਡਿਵਾਈਸ ਅਤੇ ਤੁਹਾਡੇ ਸ਼ਾਮਲ ਕੀਤੇ ਸਰੋਤ ਪਤੇ ਦਿਖਣੇ ਚਾਹੀਦੇ ਹਨ।
ਜੇ ਤਿੰਨੇ ਡਿਸਟ੍ਰੋ ਦੇ ਅੰਦਰ ਪਾਸ ਹੋ ਜਾਣ ਅਤੇ ਕਨੈਕਸ਼ਨ ਫਿਰ ਵੀ ਫੇਲ ਹੋਵੇ, ਤਾਂ ਪੈਕੇਟ WSL ਛੱਡ ਕੇ Windows ਪਾਸੇ ਸੁੱਟਿਆ ਜਾ ਰਿਹਾ ਹੈ। ਸਕ੍ਰਿਪਟ ਬਦਲਣ ਤੋਂ ਪਹਿਲਾਂ ਹੋਸਟ ਫਾਇਰਵਾਲ ਅਤੇ VPN ਕਲਾਇੰਟ ਦੀ ਆਪਣੀ ਫਿਲਟਰਿੰਗ ਜਾਂਚੋ, ਕਿਉਂਕਿ ਇੱਕ ਹੋਰ ਰੂਟ ਸੋਧ ਪਹਿਲਾਂ ਹੀ ਹੋਸਟ ਤੱਕ ਪਹੁੰਚ ਰਹੇ ਪੈਕੇਟ ਨੂੰ ਠੀਕ ਨਹੀਂ ਕਰੇਗੀ।