在我的情况下,如果没有使用VPN,我的WSL上的互联网是可以正常工作的。当我连接到VPN时,它突然停止工作。
关于在VPN上使用WSL时出现互联网丢失的问题,有一个相关的讨论(截至我发布这篇文章的当天仍在进行)
here。
之前为这个问题提出的解决方案可以工作,但需要重新启动电脑。
netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns
之前提出的另一种解决方案:
sudo nano /etc/resolv.conf
更改名称服务器为8.8.8.8或1.1.1.1或任何其他随机地址后,
在VPN上它对我不起作用。解决方法是第二个解决方案和
上面的讨论的混合体:
步骤1:
在VPN上使用PowerShell:
ipconfig /all
搜索与您的VPN连接相关联的适配器。通常您可以在描述中找到类似以下内容的内容:
"CISCO Anyconnect ..."
在该块中搜索您的DNS服务器地址(对我来说第一个DNS服务器无法使用,因此我选择了第二个)
步骤2:从这里获取,在PowerShell中:
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000
步骤三:
在我的WSL上
连接VPN:
$ sudo echo "nameserver <the DNS server address from point 1>" > /etc/resolv.conf
这种解决方案的缺点(与之前的解决方案一样)是每次启动WSL时都需要执行它。
为了使它更容易,可以创建一个短的.sh脚本来自动化它。
在你的WSL上:
$touch restore_internet_connection.sh
$nano restore_internet_connection.sh
请将以下文本放入:
echo "nameserver <the output from point 1>" > /etc/resolv.conf
下次出现这个问题时,您只需重复第2步并:
$sudo restore_internet_connection.sh
sudo nano /etc/resolv.conf
,在现有条目前加上#
,在新行上添加nameserver 8.8.8.8
,保存(Ctrl+X; Y; Enter),ping google.com
以确保它起作用,然后为了确保它不会被覆盖:sudo nano /etc/wsl.conf
,在新行上添加[network]
,然后在下一行上添加generateResolvConf = false
,保存,完成。 - Andrew