WSL2: сеть не работает в дистрибутиве. Нет интернета, ping ломается — чиним vEthernet и DNS (2025)

В Linux под WSL2 не ходит интернет: apt update падает, DNS не резолвит, пинги до 8.8.8.8 молчат. Полная инструкция: перезапуск WSL, сброс сетевого стека, проверка vEthernet и ICS, wsl.conf и resolv.conf, правила брандмауэра и полный сброс.

Коротко

  • Сначала wsl --shutdown и сетевой сброс Winsock/IP.
  • Проверяем адаптер «vEthernet (WSL)» и службу «SharedAccess».
  • Даем WSL генерировать /etc/resolv.conf автоматически.
  • Разрешаем подсистему в брандмауэре, убираем конфликтующие правила.
  • Если не помогает — полный сброс сети WSL и переустановка компонентов.
Нужна помощь? Настрою vEthernet, ICS и DNS так, чтобы сеть в WSL2 работала стабильно и после перезагрузок.

1) Мягкий сброс: стек Windows и перезапуск WSL

PowerShell от администратора — выполнять по одной:

wsl --shutdown
netsh winsock reset
netsh int ip reset
ipconfig /flushdns
wsl --shutdown

Откройте дистрибутив вновь и протестируйте сеть.

2) vEthernet (WSL) и общий доступ к интернету

WSL2 строит NAT через службу «SharedAccess». Без неё интернет в Linux не появится.

PowerShell — выполнять по одной:

Get-NetAdapter -Name "vEthernet (WSL)" -ErrorAction SilentlyContinue | ft Name, Status, MacAddress, LinkSpeed -Auto
sc queryex SharedAccess
Get-Service LxssManager | fl Status, StartType

Если адаптера нет, переустановите подсистему и платформу виртуальных машин.

PowerShell — выполнять по одной:

dism /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
wsl --install --no-distribution

3) DNS: автоматический или ручной

WSL по умолчанию генерирует resolv.conf при каждом запуске. Это удобно, если DNS на хосте меняется.

Терминал Linux — выполнять по одной:

cat /etc/resolv.conf
ls -l /etc/resolv.conf
# Включаем авто-генерацию DNS
echo "[network]" | sudo tee /etc/wsl.conf
echo "generateResolvConf = true" | sudo tee -a /etc/wsl.conf
sudo rm -f /etc/resolv.conf
exit
# затем в PowerShell:
wsl --shutdown

Для ручного DNS укажите generateResolvConf = false и создайте свой /etc/resolv.conf с нужными серверами.

4) Брандмауэр/антивирус: разрешаем vmmem и WSL

PowerShell — выполнять по одной:

Get-NetFirewallProfile | ft Name, Enabled, DefaultOutboundAction -Auto
Get-NetFirewallRule -DisplayName "*WSL*" -ErrorAction SilentlyContinue
New-NetFirewallRule -DisplayName "Allow WSL vmmem" -Program "%SystemRoot%\System32\lxss\vmmem.exe" -Direction Outbound -Action Allow -Profile Private -ErrorAction SilentlyContinue

5) Маршруты и проверка связи

Терминал Linux — выполнять по одной:

ip a
ip r
ping -c 2 8.8.8.8 || true
ping -c 2 google.com || true

Нет пинга до 8.8.8.8 — значит проблема в NAT/маршруте. Пингуется только IP — значит упал DNS.

6) Полный сброс сети WSL

PowerShell — вставить целиком:

wsl --shutdown
Stop-Service LxssManager -Force
Remove-Item -Recurse -Force "$env:USERPROFILE\AppData\Local\Packages\MicrosoftCorporationII.WindowsSubsystemForLinux_*\LocalState\network" -ErrorAction SilentlyContinue
Start-Service LxssManager

7) После VPN/фильтрации трафика

VPN-клиенты часто оставляют маршруты и нестандартные DNS. После их закрытия сделайте мягкий сброс из шага 1 и проверьте, не остались ли интерфейсы TUN/TAP.

FAQ

Можно ли дать WSL статический IP

Нет. Подсеть управляется виртуальным свитчом. Работайте через localhost и проброс портов.

Зачем SharedAccess

Эта служба даёт NAT для WSL. Если она выключена, в Linux не будет интернета.

Читайте также: