Вопрос или проблема
Я использую WSL2 (Ubuntu 22.04) и Windows 11 Education 24H2.
Я проверил настройки BIOS, и виртуализация включена. Hyper-V включен, и я пытался отключать и включать его, перезагружая компьютер между изменениями. Я пытался отключить брандмауэр, и это не дало результата. Я проверил %temp%, и он не сжат.
У меня есть ноутбук в той же сети с тем же (автоматически сгенерированным) /etc/resolv.conf, который может пинговать Google в WSL2 и выполнять sudo apt-get update
, поэтому не думаю, что проблема в сгенерированной конфигурации, но я попробовал изменить мой wsl.conf и resolv.conf (хотя я открыт для повторных попыток).
Я пытался установить swap=0, networkingMode=mirrored, dnsProxy=false, localhostforwarding=true, dnsTunneling=true, bestEffortDnsParsing=true, firewall=false, autoProxy=true, и они все были установлены по умолчанию. Также я изучил https://github.com/microsoft/WSL/issues/4150 этот пост и попробовал выполнить его, но не уверен, что смог успешно завершить шаги, так как было сообщение:
Remove-NetFireWallRule : No MSFT_NetFirewallRule objects found with property 'DisplayName' equal to 'WSL 2 Firewall
Unlock'. Verify the value of the property and retry.
At line:1 char:1
+ Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (WSL 2 Firewall Unlock:String) [Remove-NetFirewallRule], CimJobException
+ FullyQualifiedErrorId : CmdletizationQuery_NotFound_DisplayName,Remove-NetFirewallRule
и Система не может найти указанный файл.
Однако, я думаю, что это может быть проблема с брандмауэром, а не с wsl.conf, потому что, когда я пытаюсь ping www.google.com
, он говорит PING www.google.com (172.217.1.100) 56(84) байт данных.
Значит, он может разрешить www.google.com в адрес, верно? Проблема лишь в том, что пакеты не проходят.
Также, если я выполняю ipconfig
в Powershell, я вижу, что есть IPv4-адреса для адаптера беспроводной сети Wi-Fi, адаптера Ethernet vEthernet (Default Switch) и адаптера Ethernet vEthernet (WSL (Hyper-V firewall)), и я могу пинговать все эти адреса из PowerShell, но из WSL2 я могу успешно пинговать только адрес адаптера Ethernet vEthernet (WSL (Hyper-V firewall)).
Наконец, если я перезагружаю компьютер, а затем открываю WSL и пингую www.google.com, 2-6 пингов проходят, прежде чем они перестают доходить… и иногда еще 2-6 проходят через несколько секунд, прежде чем пакеты полностью перестают возвращаться/доставляться.
Но опять же, я пытался отключать брандмауэр Windows, и это не повлияло на возможность пинга. Я работаю над этой проблемой уже три дня и понятия не имею, в чём причина TT. Я пробовал переключиться на WSL1 ранее, и это сработало, но у меня были проблемы с установкой npx (поскольку, возможно, он путал пути Windows) :'( Также, я просто хочу использовать WSL2, потому что он должен работать, и я не понимаю, почему этого не происходит.
Ответ или решение
Теория (Theory):
Запуск Windows Subsystem for Linux 2 (WSL2) на Windows 11 может иногда сталкиваться с проблемами сетевого взаимодействия, особенно при попытке использовать пинг для проверки соединения с интернет-ресурсами. Основная причина таких проблем чаще всего связана с настройками сети и брандмауэра, особенностями виртуализации и маршрутизацией IP-пакетов между хостом и подсистемой.
WSL2 работает как полноценно изолированная виртуальная машина на базе Hyper-V. Это делает её более эффективной в сравнении с WSL1, но также привносит дополнительные сложности в сетевую конфигурацию, поскольку каждое соединение должно пройти через виртуальные сетевые интерфейсы. WSL2 использует DNS-прокси и особую маршрутизацию, чтобы обеспечить доступ к интернету и взаимодействие с внешними сетями. При этом возникают ситуации, когда нормальное функционирование подсистемы может быть заблокировано, например, некорректной работой брандмауэра или конфликтующими сетевыми правилами.
Пример (Example):
В вашем случае на ПК установлены как WSL2 с Ubuntu 22.04, так и Windows 11 Education 24H2. У вас активно используется Hyper-V, и проверка показала, что виртуализация включена в BIOS. Несмотря на то, что вы пытались выключать брандмауэр и это не повлияло на ситуацию, проблема может крыться в более сложных конфигурациях сетевых интерфейсов или в правилах брандмауэра, которые по какой-то причине остаются активны.
Вы также отметили, что WSL2 может временно "видеть" внешний адрес Google, но затем связь прерывается. Это как раз указывает на возможные проблемы с пропуском пакетов через виртуальный сетевой интерфейс. При этом ipconfig показывал, что существуют три основных адаптера, но только один из них стабильно пингуется из WSL2 — это указывает на неполадки в маршрутизации или сетевых фильтрах между другой подсистемой и вашим хостом.
Применение (Application):
Поскольку уже были проверены базовые шаги, такие как проверка гипервизора и отключение брандмауэра, следует обратить внимание на более детализированную конфигурацию сетевых настроек и маршрутизации. Вот несколько шагов, которые можно предпринять:
-
Проверка и синхронизация сетевых настроек: Проверьте, как настроены сетевые интерфейсы и маршрутизация в вашей системе. Убедитесь, что настройки в /etc/resolv.conf соответствуют вашим потребностям, и что никаких конфликтующих правил нет.
-
Исключение из брандмауэра: Убедитесь, что брандмауэр Windows не блокирует сетевой трафик WSL2. Создайте исключения для процессов wsl.exe и wslhost.exe.
-
Диагностика сетевых маршрутов: Проверьте текущие маршруты в Windows и WSL2 (команды
route print
иip route
соответственно). Убедитесь, что IP-адреса и шлюзы настроены должным образом. Это может варьироваться в зависимости от интерфейсов, используемых для связи. -
Управление IP-адресами и DNS: Иногда DNS-прокси, используемый в WSL2, может неправильно обрабатывать запросы. Попробуйте временно отключить DNS-прокси и проверьте, исправляет ли это проблему.
-
Обновление системного программного обеспечения: Убедитесь, что вы используете последние версии программного обеспечения как для WSL2, так и для Windows, включая обновления всех драйверов сетевых адаптеров, так как старые или неподдерживаемые версии могут вызывать проблемы.
-
Анализ сетевого трафика: Используйте netsh или другие инструменты диагностики сети для анализа пакетов и поиска возможных блокировок или задержек.
-
Переход на альтернативные решения: Если стабильный доступ через WSL2 не удается наладить, временно перейдите на WSL1 для решения временной задачи, или рассмотрите возможность использования VPN-сервисов, настройки которых также следует тщательно проверять на совместимость с вашим сетевым окружением.
Учитывая эти аспекты и тщательно проанализировав сетевую конфигурацию, вы сможете более эффективно устранить проблемы с подключением через WSL2.