Нет подключения к Интернет в WSL

Проблема проявляется только с WSL второй версии, т.к. первая работает на localhost – грубо говоря. Вторая версия при каждом старте машины создает отдельный виртуальный сетевой интерфейс и назначает IP адрес случайным образом.

Загляните в документацию Microsoft и там буде дан совет: отключите или корректно настройте свои антивирусы и … собственно это всё.

Читая всякие обсуждения на стековерфлоу, гитхабе найдете кучу всяких советов, скриптов, набор команд, по типу вот этих:

netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns

Но это вам не поможет.

Что делать?

Отбросить панику и проанализировать всю ситуацию.

Запускаем в WSL команду apt update и видим, что система не может отрезолвить имена. Выполняем команду: nslookup google.com – ответ будет тот же. Но если запустить ping 8.8.8.8 – пакеты улетают и прилетаю. Делаем вывод: WSL2 имеет доступ к интернет, но нет доступа к DNS. Имена не резолвятся. Следовательно – нужно правильно настроить доступ по 53 порту.

Проблема в 99% случаях в локальном файрволле. Да, да. Именно в нем.

И так, если у вас стоит антивирус, который контролирует сетевой трафик – ковыряйте его. В случае Windows Defender Firewall смотрите его настройки. Там должно быть Inbound Rules:

HNS Container Networking – DNS (UDP-In)
HNS Container Networking – ICS DNS (TCP-In)

По умолчанию, при запуске WSL2, когда создается виртуальный интерфейс, система в WDF создает нужные правила. Если их нет, то тушите машину командой wsl –shutdown и стартуйте ее снова. Правила будут автоматически созданы системой.

В случае стороннего ПО система этого сделать не может, поэтому настройте правила руками или смотрите уровень контроля антивирусом трафика по 53 порту.