New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WSL2] Checkpoint VPN breaks network connectivity #4246
Comments
I attempted to convert the distro back to WSL 1, but it failed with |
Oh, it might be worth noting that I've got Checkpoint VPN software (not active), Wireshark (i.e. npcap) and NordVPN (also not active) installed. I don't know whether any of those will break anything. |
Uninstalling NordVPN does not fix the problem. The Checkpoint VPN software seems to be responsible for screwing it up. Uninstalling it fixes the problem. Unfortunately (sigh), I have to have this software installed, so it looks like I'm going to have to uninstall Windows Insiders. Any chance you could work with Check Point to get this resolved? |
So, interestingly enough, uninstalling and reinstalling the Checkpoint VPN software appears to fix the problem. |
(title updated to true cause of problem) |
FWIW I've experienced what sounds like a similar issue, and I don't use Checkpoint VPN. I notice that when this happens, seemingly all socket-level operations seem to fail in Windows. Even my Android emulator becomes inaccessible to Android Studio, and all Chrome tabs indicate no internet connectivity. Closing all Ubuntu windows resolved the issue for me today, and this consistently happens when I leave a local server running in Ubuntu overnight and come back to my workstation 24 hours later. |
I'm using the Cisco AnyConnect VPN and as soon as I connect, I lose all access to the external network. Anything I can do to help debug this further? |
@cmeiklejohn please see issue #4277 If you'd like to help us debug it please send us networking logs, instructions on how to do that are here! |
I also have this problem, using Cisco. Logs here: https://aka.ms/AA6fthe |
Data point: with Windows 10.0.19013.1, CheckPoint VPN E81.40. If I right-click on the notification icon and select "Disable Security Policy" (thus regaining control of my own firewall) then WSL Ubuntu can connect to the Internet correctly. |
Same issus occurs with Cisco OpenConnect VPN. Here are the logs https://aka.ms/AA6jmg1 |
Similar issue with Citrix VPN. |
Same issues also with Checkpoint VPN |
Same problem with Cisco AnyConnect |
I lose internet connectivity in WSL2 when using SonicWall VPN in full-tunnel mode. If I switch to partial-tunnel, then WSL2 internet connectivity is fine. |
I am seeing the same behavior using Cisco AnyConnect VPN. Any updates on this issue? |
same issue using Cisco AnyConnect (connected) |
I have the same problem, but this did not seem to help in my case. |
I installed/used Cisco AnyConnect from Windows Store |
I have the same problem as @elmorekevin I'm using the latest Sonicwall NetExtender (9.0.274), and can only use full tunnel mode. WSL1 works perfectly at the same time WSL2 does not. |
I have a similar problem with Citrix Netscaler VPN at work, which only tunnels some networks. Internet access is fine with wsl2 but connecting to a host inside a VPN tunneled network, the name can be resolved to an IP but then timeouts (wireshark says tcp retransmission). Citrix Netscaler says, that it has tunneled that connection in the "tunneled application" window. Also disabled the firewall completely, but that didn't work either.... |
At random, I tried to use WSL 2 when I was connected to VPN, and to my utter and total surprise, it started working! I have not been able to reproduce the result since. But I was able to access both my VPN network and the internet (via full tunnel mode). I did make an observation though. When it worked, I had done Sometimes I see three IPs in WSL2 ( Recently updated to Windows 10 Pro build 10.0.19041 |
|
Workaround steps to get Internet working on VPNSince the one time I got internet working on WSL2 was after an Windows 10 update, I was guessing that maybe somehow the network was reset, it and was because I started WSL2 while on VPN... This has worked twice now using Sonicwall VPN, so I hope this works for someone else: WARNING: You should always backup registry keys before you delete them, in case this breaks things!
While still on VPN, shutting down WSL2 and restarting it, still worked. However...
Does not work. This is not a great workaround, but it is a start... Shortcuts welcome! |
The workaround I have at the moment is to work within a container. Even though Docker uses WSL2 as it's backend, they seem to have got a better network setup that would work through the VPN. |
I can confirm the comment of @AmmarRahman. After installing Docker Desktop on my Windows machine and switch to the WSL2 backend, I noticed that this docker daemon is able to access resources in the vpn (downloads an image from a docker registry there). I can also confirm it by running a container accessing resources on the vpn |
Until a proper fix arrives from microsoft, here is a workaround that I use, to change the mtu size on startup.
echo<<EOF | sudo tee /etc/init.d/eth0-mtu
#!/bin/sh
ip link set dev eth0 mtu 1350
EOF
sudo chmod 755 /etc/init.d/eth0-mtu
sudo chown root:root /etc/init.d/eth0-mtu
To find path to your distro:
Inspired by https://adrianstoll.com/tips-and-tricks/running-services-at-startup-windows-subsystem-for-linux.html |
Hi guys |
@d-ryzhikov solution seem to be working in principle. I have tried the new found WSL boot script support for doing that and it seems to solve the situation as well. All what you need to do is to add [boot]
command="ip link set dev eth0 mtu 1350" to After a computer restart, WSL seems to be working fine with VPN on. |
Hi, all. I'm experiencing the same issue when connecting to the VPN network at work using Cisco AnyConnect. The solution from the recent comments does not work for me. I edit the /etc/wsl.conf as described above and set the MTU size to 1350. Executing
However Thank you. |
I came up with a different solution, as I seem to have a different problem than the other posts here. In my situation the endpoint firewall was in the way, For virtualbox etc. the company excluded some ip addresses from these rules exactly for such internal purposes. So I had to use one of these ip addresses to allow internet access. I do that with the following scripts (e.g. Windows / PowershellA small powershell script which adds a route to the vSwitch to route traffic to the ip range/single IP excluded in the checkpoint firewall.
Linux / WSL2A script that switches the activate IP address of the system, it turned out that I didn't need to change the /etc/resolv.conf (DNS resolution) that may vary in your setup.
|
@baruchiro |
Just dropping by to say that with socat and a local proxy you can circumvent altogether this problem, at least for http calls:
It's a workaround, but it's robust, and it should work for all cases. Doesn't matter which vpn, if you have connectivity in windows you will have it in WSL. |
@barroudjo Yes for a specific additional customer VPN I had to use a similiar setup. But I use the docker magic for that. Docker Desktop does a very good job to circumvent the WSL2 quirks by some tun/tap magic, so you can just start a squid proxy in docker. So I came up with the following:
Done! |
@smerschjohann that's a good one ! A bit simpler than my solution too (you just have to install docker desktop) ! And you could improve it just a bit by using a non-caching smaller proxy: https://hub.docker.com/r/vimagick/tinyproxy. |
I had the same behavior - connection via https/443 didn't work on WSL2, giving:
However it worked on WSL1. Interestingly enough - for me it turned out to be the Symantec Endpoint Protection antivirus... Not sure yet what exactly it blocks - will try to find. |
Alright, so I've been wanting to use WSL 2 for a while now and the only thing stopping me is the VPN connectivity issue. I found something that I'm not sure if others have because I haven't found any posts in the issues I've been looking through and figured I should throw this in here as a possible reason for the issue with VPN connectivity issues. I have tried a lot of the workarounds except for the metric modification because I don't want my system to "disable/ignore" my VPN. From what I understand of the metric value is that it is a priority system and if you increase the metric on a VPN to higher than your outgoing internet nic you are basically routing 0 traffic through the VPN. (If I am misunderstanding this, please let me know). So, I've been looking into the Hyper-V Virtual Switch and while trying to create an external switch /(or modifying the WSL one) the external network interfaces list does not show the VPN interface image. I am using Private Internet Access as my VPN connection and as shown in the image is not in the selection list. I hope this helps with figuring out if there might be an issue with the Virtual Switch instead of with the WSL networking in general. Just some extra info showing that DNS resolving is working fine (for some reason)[this is a fresh Ubuntu 20.04 WSL 2 install]. > curl -L ip.me -v
* Trying 134.209.78.99:80...
* TCP_NODELAY set
* connect to 134.209.78.99 port 80 failed: Connection timed out
* Failed to connect to ip.me port 80: Connection timed out
* Closing connection 0
curl: (28) Failed to connect to ip.me port 80: Connection timed out
> ip route
default via 172.17.40.145 dev eth0
172.17.40.144/28 dev eth0 proto kernel scope link src 172.17.40.147
> ping 172.17.40.145
PING 172.17.40.145 (172.17.40.145) 56(84) bytes of data.
64 bytes from 172.17.40.145: icmp_seq=1 ttl=128 time=0.317 ms
64 bytes from 172.17.40.145: icmp_seq=2 ttl=128 time=0.441 ms
64 bytes from 172.17.40.145: icmp_seq=3 ttl=128 time=0.292 ms
^C
--- 172.17.40.145 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2113ms
rtt min/avg/max/mdev = 0.292/0.350/0.441/0.065 ms
> ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
^C
--- 1.1.1.1 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4185ms |
@barroudjo & @smerschjohann many thanks for your proxy ideas! We (@tkalmar and I) also added a dante socks proxy so that we can SSH to other machines in our corporate network. |
I carefully followed all these steps and I'm able to ping external sites from WSL2, but I can't curl or wget them for some reason. ping works:
curl does not work:
In addition to using Cisco AnyConnect VPN on my Windows 10 host, all my traffic also goes through a Zscaler proxy running on Windows on http://localhost:9000. That means that while I'm connected to my VPN, in Windows I also have to specify HTTP_PROXY=http://localhost:9000 pretty much everywhere you can imagine so that things can access the internet. Inside of WSL, I'm able to refer to this Zscaler proxy as http://host.docker.internal:9000. However I'm getting this error: curl: (56) Recv failure: Connection reset by peer and I don't know at what layer it's failing...
In, Powershell, if I run wsl hostname -I, the IP of my Windows host is 172.25.167.201, but trying to use this proxy as 172.25.167.201:9000 instead of http://host.docker.internal:9000 inside WSL doesn't work. So I don't think that's the correct way to go about doing this.
Any thoughts or suggestions? |
I just came across this https://github.com/sakai135/wsl-vpnkit. It seems to be working perfectly |
I have created a script to simplify the solution above for our corporate machines. I have adapted it to be more generic on https://github.com/AmmarRahman/wsl-vpn Please feedback if this work for you. |
Thank you @sakai135 and @AmmarRahman! This is exactly what I've been looking for. Thank you vpnkit for showing Microsoft how to fix their product I can confirm this works with Sonicwall using NetExtender (10.2.309, but I doubt the version matters). I no longer have to use the broken MobileConnect. |
just a comment at least for Globalprotect users. you may need to have priorities like WLS -> VPN -> Local Network, otherwise you may end with the DNS changed in order in the windows machine. Get-NetIPInterface -InterfaceAlias "vEthernet (WSL)" | Set-NetIPInterface -InterfaceMetric 1
Get-NetIPInterface -InterfaceAlias "WiFi" | Set-NetIPInterface -InterfaceMetric 6000
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "PANGP Virtual Ethernet Adapter"} | Set-NetIPInterface -InterfaceMetric 5000 |
removing comment, refreshed windows 2 times, could not replicate first working sollution, i probably did not payed attention and it was WSL1 |
@idsergiu provided the best and most simpler solution. Thank you very much guys! |
Before I forget: today I restarted my PC and I connected to Cisco VPN before login to Windows (it is possible in the windows logon page). Then, even applying what I decribed in my previous post, it didn't worked. Then, what I did to fix it was: 1 - Disconect from VPN
4 - Run this tool within the WSL. |
Appreciate that you want to help, but please stick to #4277 for Cisco. |
I'm using Windows 10 Pro, version 21H1, compilation 19043.1110, Windows Feature Experience Pack 120.2212.3530.0 and Ubuntu 20.04 on WSL2. When I connect to my corporate VPN using Check Point Mobile client, Ubuntu on WSL2 can't access any machine on VPN. Access to my home network and Internet remains okay, but I can't reach any machine on VPN. Does anybody knows how to fix it? |
Do we have to run this after every reboot? I am asking because we use GlobalProtect on our company laptops and dont have admin rights to run this command every time. Thanks |
Actually you need to run every time you connect the VPN. I haven't been able to find a way to keep the values permanent or without the need of elevated rights |
Many VPN clients have the ability to run a post connection script, https://docs.paloaltonetworks.com/globalprotect/9-1/globalprotect-admin/globalprotect-apps/deploy-app-settings-transparently/customizable-app-settings/script-deployment-options.html, however I'm not sure if that will be able to run with the rights you need (I supposed that depends on how GlobalProtect works) If your Admins are willing to setup this up for you, they can
Now this means you'll have permission to run an "elevated" task. This is the closest to a "windows sudo" list I know of. There's a command. As a user, you can create a shortcut to run I used to think this would help, but on second glance, it will not, it's kind of solves an opposite problem |
Hi @wesleymusgrove,
I'm facing the same issue here (win10 20H2 + WSL2 + Zscaler client connector 3.1.0.96)
curl on host through proxy => OK $ curl -v https://www.google.com/
* Uses proxy env variable https_proxy == '10.90.161.68:9001'
* Trying 10.90.161.68:9001...
* Connected to 10.90.161.68 (10.90.161.68) port 9001 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to www.google.com:443
> CONNECT www.google.com:443 HTTP/1.1
> Host: www.google.com:443
> User-Agent: curl/7.78.0
> Proxy-Connection: Keep-Alive
>
* Recv failure: Connection reset by peer
* Received HTTP code 0 from proxy after CONNECT
* CONNECT phase completed!
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer Were you able to solve it ? |
Works like a charm, thank you |
Using also Zscaler proxy running on Windows on http://localhost:9000. and having the same problem than @aderuelle |
(I've searched the open issues, and none that I could find were exactly the same)
Windows 10.0.18922.1000
I just installed Windows Insiders, and updated my Ubuntu distro to WSL2. It can no longer access the Internet.
From the Ubuntu bash prompt:
ping github.com
doesn't work (100% packet loss);ping 8.8.8.8
is the same./etc/resolv.conf
givesnameserver 192.168.115.225
.ping 192.168.115.225
doesn't work.My Ubuntu distro has IP
192.168.115.230
; I can ping that from Ubuntu.The Windows IP address is 192.168.115.225, and I can ping it from PowerShell. Pinging the Ubuntu distro's IP (192.168.115.230) also works, from PowerShell.
Inside Ubuntu,
route -n
reports:I'm using a Surface Go, Windows 10 Pro, connected to the Internet over Wifi.
I might have some left-over detritus from when I attempted to get a Hyper-V VM connecting via Wifi. That was prior to upgrading to Windows Insiders. I don't know how much of that Hyper-V networking infrastructure is shared, and I don't know how to debug that.
The text was updated successfully, but these errors were encountered: