Я не могу пропинговать любой веб-сайт, когда я использую WSL для Windows 10. Я использую Ubuntu 18.04 в WSL.

--- google.com ping statistics ---
14 packets transmitted, 0 received, 100% packet loss, time 38567ms

это результат, когда я пытаюсь ping google.com, я использую Windows 10 с IPv4, отключенный IPv6. Я могу нормально пинговать google.com без wsl в моей обычной командной строке

Я использую Avast Internet Security, и когда я пингую Google из экземпляра Ubuntu /WSL, это то, что я вижу.

1:

Что мне нужно сделать, чтобы включить пинг в WSL

1 ответ1

0

Сначала немного предыстории. Нужна Windows 10 Build 17627 или выше для поддержки Firewall с подключениями WSL. Вот раздел примечаний к выпуску WSL:

Сборка 17627 (Пропустить)

WSL

  • Поддержка брандмауэра Windows для процессов WSL. [GH 1852]
    • Например, чтобы позволить процессу Python WSL прослушивать любой порт, используйте расширенный брандмауэр advdirefirewall для 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 usersapce, т. Е. /bin Bin, /etc , /usr и другие.
  3. \bin\ping - бинарный файл Linux ping .

Отсюда весь путь:

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 Firewall следуйте этой инструкции от Avast Support. Откройте Настройки> Общие> Исключение и добавьте путь из предыдущего шага.

Канонические ответы:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .