问题描述
我的Windows 10笔记本电脑上运行的是Ubuntu-20.04版本2 WSL。一切都很好,我可以上网。但前提是我没有连接到VPN网络。
如果我使用Cisco AnyConnect连接到我的大学网络,我就不能再通过WSL连接到互联网,而使用Windows系统中的Firefox则一切正常。我收到:ping:Google.de:名称解析暂时失败
我已经尝试在管理模式下打开Windows命令提示符,并键入以下命令:
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
reboot
一旦成功,我就可以上网了。但当我断开VPN连接并重新连接时,我又遇到了同样的问题。我尝试再次执行命令并重新启动,但现在不再起作用。
所以我真的不知道还能做什么。我确实需要在通过VPN连接时使用WSL。
推荐答案
WSL2-VPN修复:
使用VPN时,WSL2中的DNS转发存在问题(see github Issue)。此外,Cisco AnyConnect也有问题。因此,这里有一个解决这些问题的方法。应该适用于Ubuntu和Debian。
解决方法
使用Windows PowerShell查找名称服务器(在VPN会话期间)
您将获得公司名称服务器的IPv4地址复制此地址。nslookup
在WSL:中禁用解决方案生成
sudo nano /etc/wsl.conf
将此文本复制到文件(以在WSL启动时禁用solve.conf生成)
[network] generateResolvConf = false
在WSL中将您的公司名称服务器添加到
resolv.conf
sudo nano /etc/resolv.conf
删除其他条目并添加您的公司名称服务器IP(如果您有第二个名称服务器,请将其添加到单独的行中)
nameserver X.X.X.X
(其中X.X是您在步骤1中获得的地址)
设置您的VPN适配器(如果您有Cisco AnyConnect)打开管理员PowerShell
- 查找您的VPN适配器名称:
Get-NetIPInterface
(在我的例子中:"Cisco AnyConnect"
) - 设置适配器度量(替换-与您的姓名匹配),在我的情况下,我必须在重新启动或VPN重新连接后运行:
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
(What is interface metric:用于确定路由,Windows使用度量最低的接口)
- 查找您的VPN适配器名称:
在PowerShell中重新启动WSL:
wsl.exe --shutdown
在WSL中测试运行:
wget google.com
-如果此命令有效,则完成。
- 在PowerShell中检查您的默认度量(VPN接口)(替换-与您的接口名称匹配)
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Get-NetIPInterface
- 在Windows 10上遇到问题时,使用admin PowerShell恢复此默认值(将末尾的值替换为您的默认值):
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 1
这篇关于VPN时没有互联网连接Ubuntu-WSL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!