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 и переустановка компонентов.
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 не будет интернета.