Введение
Настройка WSL2 (Windows Subsystem for Linux 2) открывает мощные возможности для разработчиков и DevOps-специалистов, работая непосредственно в среде Linux на базе Windows. Без правильной сетевой конфигурации WSL2 изолирован и не может взаимодействовать с хостом Windows, локальной сетью или внешними сервисами. В этом руководстве вы узнаете, как настроить WSL2 для обмена трафиком с хостом, открыть порты для внешних приложений и оптимизировать сетевую производительность. После выполнения шагов вы сможете использовать WSL2 как полноценную рабочую станцию Linux с полным доступом к локальным ресурсам.
Требования / Подготовка
- Windows 10 (1909 или выше) или Windows 11 (21H2 или выше) с включённым Hyper‑V.
- Включённый WSL2 (
wsl --listдолжен отображать дистрибутивы). - Административные права на хосте для выполнения команд PowerShell и
dism. - Дистрибутив Linux (Ubuntu 20.04 LTS или 22.04 LTS) в WSL2.
- Свободный IP-адрес в диапазоне
192.168.100.0/24(или другой выбранный вами subnet).
Пошаговая инструкция
Шаг 1: Включение WSL2 и Hyper-V
Важно: Hyper‑V необходим для создания виртуальной своп-сети, которую будет использовать WSL2.
- Откройте PowerShell от имени администратора и выполните команду:
dism.exe /online /enable-feature /featurename:Microsoft‑Hyper‑V - Если Hyper‑V уже включён, команда вернёт сообщение об успешном выполнении.
Шаг 2: Настройка NAT-сети для обмена трафиком
- Создайте внутренний своп-коммутатор с NAT:
New-VMSwitch -Name "WSL2NAT" -SwitchType Internal - Определите имя сетевого адаптера:
(запишите имя, например,Get-NetAdapter -Name "WSL2NAT"vEthernet (WSL2NAT)). - Добавьте IP-адрес
192.168.100.1/24к адаптеру:New-NetIPAddress -InterfaceAlias "vEthernet (WSL2NAT)" -IPAddress 192.168.100.1 -PrefixLength 24 -DefaultGateway 192.168.100.1 - Настройте NAT для этого префикса:
New-NetNat -Name "WSL2NAT" -InternalIPInterfaceAddressPrefix "192.168.100.0/24"
Шаг 3: Подключение WSL2 к NAT-сети
Внутри дистрибутива Linux отредактируйте /etc/wsl.conf:
[network]
generator=docker-gen
Сохраните изменения, затем перезапустите WSL2:
wsl --shutdown
# Запустите дистрибутив снова
После перезапуска команда ip a покажет IP-адрес, назначенный из NAT-сети (например, 192.168.100.10/24).
Шаг 4: Портовое перенаправление на хост
На хосте Windows разрешите входящие TCP-соединения на выбранный порт (например, 8080):
netsh advfirewall firewall add rule name="AllowWSL2Port" dir=in action=allow protocol=TCP localport=8080 remoteip=192.168.100.0/24
Внутри WSL2 добавьте правило NAT для перенаправления внешнего порта (например, 80) на хост:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10:8080
sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.100.10 --dport 8080 -j MASQUERADE
Теперь внешнее приложение, обращающееся к IP-адресу хоста на порту 8080, будет перенаправлено на WSL2.
Шаг 5: Проверка подключения
- Из WSL2 проверьте доступность хоста:
ping 192.168.100.10 curl http://192.168.100.10:8080 - На хосте Windows (PowerShell):
Test-NetConnection -ComputerName 192.168.100.10 -Port 8080 - Убедитесь, что IP-адрес назначен корректно:
ip a
Шаг 6: Дополнительные советы и оптимизация
- Для сброса всех данных WSL2 и очистки сетевых адаптеров выполните
wsl --shutdown. - Для статического IP-адреса в WSL2 отредактируйте файлы сетевой конфигурации:
- Ubuntu (netplan):
/etc/netplan/01-netcfg.yaml - Общая конфигурация:
/etc/dhcpcd.conf
- Ubuntu (netplan):
- Если вам нужна полная изоляция, создайте отдельную NAT-сеть с другим префиксом (например,
192.168.200.0/24).
Проверка результата
После выполнения шагов вы должны увидеть:
- Корректный IP-адрес
192.168.100.xвнутри WSL2 (ip a). - Успешные пинг/тесты к хосту Windows.
- Доступность внешних сервисов через перенаправленные порты (
curl,telnet).
Если что-то не работает, вернитесь к шагам и проверьте настройки NAT и брандмауэра.
Возможные проблемы
- WSL2 не получает IP-адрес – проверьте
/etc/wsl.confи выполнитеwsl --shutdown && wslснова. - Хост не видит WSL2 – убедитесь, что NAT-сеть включена (
Get-NetNat) и брандмауэр Windows не блокирует192.168.100.0/24. - Перенаправление портов не работает – проверьте правила
iptables(sudo iptables -t nat -L) и брандмауэр хоста (netsh advfirewall firewall show rule name="AllowWSL2Port"). - Статический IP-адрес не сохраняется – перезапустите сетевые службы (
sudo systemctl restart networking) после редактирования конфигурационных файлов.