windows 10 WSL ubuntu 无法 ping 任何内容

use*_*850 11 windows ping rails windows-subsystem-for-linux

当我使用适用于 Windows 10 的 WSL 时,我无法 ping 通任何网站。我在 WSL 中运行 Ubuntu 18.04。

--- google.com ping statistics ---
14 packets transmitted, 0 received, 100% packet loss, time 38567ms
Run Code Online (Sandbox Code Playgroud)

这是当我尝试 ping google.com 时的结果,我使用的是带 IPv4 的 Windows 10,禁用了 IPv6。我可以在常规命令提示符下正常 ping google.com,无需使用 wsl

我正在运行 Avast internet security,当我从 ubuntu/WSL 实例内部 ping google 时,这就是我所看到的。

1在此输入图像描述

我需要做什么才能在 WSL 中启用 ping

Bis*_*iyo 3

首先是一些背景知识。应该需要 Windows 10 Build 17627 或更高版本来支持具有 WSL 连接的防火墙。以下是WSL 发行说明中的​​部分:

内部版本 17627(跳过)

世界SL

  • Windows 防火墙支持 WSL 进程。[GH 1852]
    • 例如,要允许 WSL python 进程侦听任何端口,请使用提升的 Windows cmd:netsh.exe advfirewall firewall add rule name=wsl_python dir=in action=allow program="C:\Users\<UserName>\AppData\Local\Packages\canonicalgrouplimited.ubuntuonwindows_79rhkp1fndgsc\localstate\rootfs\usr\bin\python2.7" enable=yes
    • 有关如何添加防火墙规则的更多详细信息,请参阅链接

下一步,找到需要互联网连接的 Linux 可执行文件的绝对路径。完整路径可以分为三部分:

  1. C:\Users\UserName\AppData\Local\Packages-- 通用Windows 平台应用程序存储用户特定文件、临时文件等的路径。
  2. CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs-- Ubuntu 18.04 Appx 软件包存储 Ubuntu 用户空间文件的路径/bin,即/etc/usr等。
  3. \bin\ping-- Linuxping二进制文件。

因此整个路径是:

C:\Users\UserName\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\bin\ping
Run Code Online (Sandbox Code Playgroud)

您可以使用以下 PowerShell 脚本来获取该路径。ubuntu只需在要求输入分发名称时输入即可。

C:\Users\UserName\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\bin\ping
Run Code Online (Sandbox Code Playgroud)

最后一步,添加防火墙规则。对于 Windows 防火墙,请以管理员身份运行此命令以添加出站防火墙规则。

$DistroName=Read-Host "Enter Distribution Name"
$pacakgeName = (Get-AppxPackage *$DistroName*).PackageFamilyName
$appData = [System.Environment]::ExpandEnvironmentVariables("%LocalAppData%")
$InstallDir = $appData + "\Packages\" + $pacakgeName + "\LocalState\rootfs"
echo $InstallDir
Invoke-Item $InstallDir
Read-Host -Prompt "Press any key to continue..."
Run Code Online (Sandbox Code Playgroud)

对于 Avast 防火墙,请遵循Avast 支持部门的说明。打开“设置”>“常规”>“排除”并添加上一步中的路径。

规范答案: