Что означает проблема с сетью в WSL
Проблема с сетью в WSL (Windows Subsystem for Linux) проявляется как полное или частичное отсутствие доступа к интернету и локальным сетям изнутри Linux-окружения. Симптомы включают: ошибку Network is unreachable при попытке ping, таймауты в curl или wget, невозможность установки пакетов через apt/npm/pip, а также проблемы с доступом к сетевым ресурсам Docker или других сервисов. WSL 2 использует виртуальную машину Hyper-V с собственным виртуальным адаптером, и любые изменения в сетевой конфигурации Windows (например, подключение VPN, смена прокси, обновление драйверов) могут нарушить маршрутизацию между хостом и подсистемой.
Причины возникновения
- Конфликт с VPN или корпоративными прокси-серверами — VPN-клиенты часто перенаправляют весь трафик через виртуальный адаптер, что ломает маршруты WSL.
- Повреждённые или устаревшие драйверы виртуальной сети Hyper-V — особенно после крупных обновлений Windows.
- Некорректная конфигурация DNS — WSL автоматически генерирует
/etc/resolv.conf, но иногда получает нерабочие DNS-серверы (например,127.0.0.1). - Брандмауэр Windows блокирует трафик — правило может запрещать подключения для виртуального адаптера
vEthernet (WSL). - Сброс сетевых настроек Windows — команды
netshили перезагрузка могут сбросить статические маршруты, необходимые WSL. - Устаревшая версия WSL — в ранних сборках WSL 2 были баги с сетью после спящего режима.
Способ 1: Перезапуск WSL и сброс сетевых служб Windows
Часто помогает простой перезапуск подсистемы и обновление аренды IP.
- Закройте все открытые терминалы WSL.
- Запустите PowerShell от имени администратора.
- Выполните команды последовательно:
wsl --shutdown ipconfig /release ipconfig /renew netsh winsock reset - Перезагрузите компьютер.
- Запустите WSL и проверьте доступ:
ping 8.8.8.8.
⚠️ Важно:
netsh winsock resetтребует перезагрузки. Сохраните работу перед выполнением.
Способ 2: Ручная настройка DNS в WSL
Если пинг по IP работает, а доменные имена — нет, проблема в DNS.
- Внутри WSL откройте файл
/etc/resolv.conf:sudo nano /etc/resolv.conf - Замените содержимое на:
nameserver 8.8.8.8 nameserver 1.1.1.1 - Чтобы система не перезаписывала файл при перезапуске, создайте
/etc/wsl.conf:[network] generateResolvConf = false - Перезапустите WSL:
wsl --shutdownи снова запустите дистрибутив.
Способ 3: Обновление WSL и компонентов Windows
Устаревшее ПО — частая причина сетевых глюков.
- В PowerShell (администратор) обновите ядро WSL:
wsl --update - Установите последнюю версию пакета обновлений Windows через Параметры → Обновление и безопасность → Проверить наличие обновлений.
- Внутри WSL обновите пакеты дистрибутива (для Ubuntu/Debian):
sudo apt update && sudo apt upgrade -y - Перезапустите WSL.
Способ 4: Настройка исключений в брандмауэре Windows
Если фаервол блокирует виртуальный адаптер.
- Откройте Брандмауэр Защитника Windows с расширенными параметрами.
- Создайте новое правило для входящих подключений:
- Тип: «Для программы» → выберите
C:\Windows\System32\vmwp.exe(процесс Hyper-V). - Действие: «Разрешить подключение».
- Профиль: все (Domain, Private, Public).
- Тип: «Для программы» → выберите
- Аналогично создайте правило для исходящих подключений.
- Или временно отключите фаервол для теста:
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled Falseв PowerShell (администратор). Не забудьте включить обратно!
Способ 5: Полный сброс сети WSL
Если ничего не помогает, выполните «чистую» переустановку сетевой инфраструктуры WSL.
- Экспортируйте данные дистрибутива (если нужно):
wsl --export Ubuntu ubuntu_backup.tar - Удалите виртуальную сеть WSL:
wsl --unregister - Удалите старый адаптер в Диспетчере устройств (показать скрытые устройства) → Сетевые адаптеры → удалите
vEthernet (WSL). - Перезагрузите компьютер — Windows создаст новый адаптер при следующем запуске WSL.
- Запустите дистрибутив заново (если удаляли, установите заново из Microsoft Store).
Профилактика
- Избегайте одновременного запуска нескольких VPN-клиентов — они конфликтуют с виртуальными адаптерами WSL. Используйте split-tunneling для исключения подсети
172.16.0.0/12. - Не меняйте вручную маршруты в Windows через
route add, если не знаете, как это повлияет на WSL. - Регулярно обновляйте WSL —
wsl --updateраз в месяц. - Контролируйте антивирусы — некоторые (например, Avast, Kaspersky) имеют собственные сетевые фильтры, которые могут блокировать трафик WSL. Добавляйте исключения для папок WSL (
C:\Users\<User>\AppData\Local\Packages\...). - Используйте стабильные версии Windows — Insider-сборки часто содержат баки с сетью.