当我使用适用于 Windows 10 的 WSL 时,我无法 ping 任何网站。我在 WSL 中运行 Ubuntu 18.04。
--- google.com ping statistics ---
14 packets transmitted, 0 received, 100% packet loss, time 38567ms
这是我尝试 ping google.com 时的结果吗?我使用的是 Windows 10,带有 IPv4,已禁用 IPv6。我可以在常规命令提示符下正常 ping google.com,而无需 wsl
我正在运行 Avast 互联网安全软件,当我从 ubuntu/WSL 实例内部 ping 谷歌时,我看到的就是这样的。
1:
我需要做什么才能在 WSL 中启用 ping
答案1
首先介绍一下背景知识。需要 Windows 10内部版本 17627 或更高版本支持使用 WSL 连接的防火墙。以下是WSL 发行说明:
内部版本 17627(直接跳过)
西弗吉尼亚海岸
- 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可执行文件的绝对路径。完整路径可分为三个部分:
C:\Users\UserName\AppData\Local\Packages
-- 路径通用 Windows 平台应用存储用户特定文件、临时文件等。CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs
-- Ubuntu 18.04 Appx 包存储 Ubuntu 用户空间文件的路径/bin
,即/etc
、/usr
等。\bin\ping
-- Linuxping
二进制文件。
因此整个路径是:
C:\Users\UserName\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\bin\ping
您可以使用以下 PowerShell 脚本获取该路径。ubuntu
当系统要求输入分发名称时,只需输入即可。
$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..."
最后一步,添加防火墙规则。对于 Windows 防火墙,以管理员身份运行此命令以添加出站防火墙规则。
netsh.exe advfirewall firewall add rule name=wsl_ping dir=out action=allow program=<path_to_ping> enable=yes
对于 Avast 防火墙,请按照此指令来自 Avast 支持。打开设置 > 常规 > 排除并添加上一步中的路径。
规范答案: