Создание bridge для WSL в Windows 10/11 (свой IP по DHCP)

Создание bridge для WSL в Windows 10/11 (свой IP по DHCP)

Содержание

1. Назначение

По умолчанию WSL 2 работает в режиме NAT: виртуальная машина получает внутренний адрес (обычно 172.x.x.x) и не видна из локальной сети. Чтобы WSL получила собственный IP-адрес от DHCP-сервера локальной сети (роутера) и стала полноценным участником сети, используется режим bridged.

В этом режиме WSL подключается к внешнему виртуальному коммутатору Hyper-V, который связан с физическим сетевым адаптером. В результате:

  • WSL получает свой IP-адрес по DHCP от роутера;
  • WSL доступна из локальной сети напрямую, без portproxy;
  • WSL может работать с VPN и сетевым оборудованием как отдельный хост.

Важно: режим networkingMode=bridged официально помечен как устаревший (deprecated) начиная с WSL 2.4.5. Он по-прежнему работает, но Microsoft рекомендует networkingMode=mirrored. При этом mirrored не выдаёт WSL отдельный адрес по DHCP — он «зеркалит» сетевые интерфейсы Windows. Если нужен именно отдельный IP из локальной сети, используйте bridged.

2. Требования

  • Windows 10 Pro / Enterprise / Education или Windows 11 Pro / Enterprise / Education (в редакции Home штатного Hyper-V нет);
  • WSL 2 версии 2.0.0 и выше (из Microsoft Store);
  • включённый компонент «Платформа виртуальных машин» (Virtual Machine Platform);
  • физический сетевой адаптер. Мост через Wi-Fi работает не со всеми драйверами — если коммутатор не создаётся, используйте Ethernet;
  • права администратора;
  • роутер с включённым DHCP.

3. Установка Hyper-V (общая для Windows 10 и 11)

Открыть PowerShell от имени администратора и выполнить:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

или через DISM:

DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V /All

После установки перезагрузить компьютер.

Проверить, что модуль Hyper-V доступен:

Get-VMSwitch

4. Windows 11

4.1. Окружение

Проверенная конфигурация:

  • Windows 11 Pro, ядро 10.0.26200, сборка 26200;
  • WSL 2 из Microsoft Store;
  • внешний коммутатор Hyper-V WSL-WiFibridge, привязанный к Wi-Fi адаптеру «Беспроводная сеть»;
  • WSL работает в режиме networkingMode=bridged;
  • WSL получает IP напрямую от домашнего роутера (пример: 192.168.11.79).

Конфигурация WSL (%UserProfile%\.wslconfig):

[wsl2]
networkingMode=bridged
vmSwitch=WSL-WiFibridge

4.2. Определение сетевого адаптера

Выполнить:

Get-NetAdapter

В данной конфигурации активен Wi-Fi адаптер с именем «Беспроводная сеть»:

Name                 InterfaceDescription                    Status
----                 --------------------                    ------
Беспроводная сеть    Wi-Fi адаптер                           Up

Запомнить имя адаптера («Беспроводная сеть») — оно понадобится при создании коммутатора.

4.3. Создание внешнего виртуального коммутатора (bridge)

Создать внешний коммутатор с именем WSL-WiFibridge, привязанный к Wi-Fi адаптеру:

New-VMSwitch -Name "WSL-WiFibridge" -NetAdapterName "Беспроводная сеть" -AllowManagementOS $true

Здесь:

  • -Name "WSL-WiFibridge" — имя коммутатора (будет указано в .wslconfig);
  • -NetAdapterName "Беспроводная сеть" — имя Wi-Fi адаптера из шага 4.2;
  • -AllowManagementOS $true — разрешает Windows использовать этот же адаптер, хост сохраняет сеть.

Во время выполнения команды соединение с интернетом на хосте может прерваться на 2–3 секунды — это нормально: перестраивается сетевой стек.

Проверить:

Get-VMSwitch | Select-Object Name, SwitchType, NetAdapterInterfaceDescription, AllowManagementOS

Ожидается:

Name           SwitchType NetAdapterInterfaceDescription              AllowManagementOS
----           ---------- ------------------------------              -----------------
WSL-WiFibridge External   Wi-Fi адаптер                                True

Также в Windows появится виртуальный адаптер:

Get-NetAdapter | Where-Object Name -like "*WSL-WiFibridge*"
Name                        InterfaceDescription                    Status
----                        --------------------                    ------
vEthernet (WSL-WiFibridge)  Hyper-V Virtual Ethernet Adapter        Up

Этот адаптер получает собственный IP-адрес от DHCP роутера.

4.4. Настройка .wslconfig

Открыть (или создать) файл %UserProfile%\.wslconfig:

notepad $env:USERPROFILE\.wslconfig

Привести файл строго к следующему виду, удалив старые и экспериментальные директивы:

[wsl2]
networkingMode=bridged
vmSwitch=WSL-WiFibridge

Здесь:

  • networkingMode=bridged — режим моста;
  • vmSwitch=WSL-WiFibridge — имя коммутатора из шага 4.3.

Примечание: параметры dhcp, memory, swap и processors не обязательны. Если они не нужны или конфликтуют, оставьте только две строки выше.

4.5. Применение настроек

Перезапустить службу WSL в PowerShell от имени администратора:

Restart-Service WslService

Альтернативный способ — полностью остановить WSL:

wsl --shutdown

Подождать около 8 секунд и запустить дистрибутив:

wsl -d Ubuntu-22.04

4.6. Проверка получения IP

В WSL проверить адрес eth0:

ip -4 addr show eth0

или:

hostname -I

Пример — интерфейс eth0 получил адрес от роутера:

inet 192.168.11.79/24 brd 192.168.11.255 scope global dynamic eth0

Проверить маршрут и связность:

ip route
ping -c 4 192.168.11.1
ping -c 4 8.8.8.8
ping -c 4 google.com

В Windows проверить адрес виртуального адаптера:

netsh interface ip show addresses "vEthernet (WSL-WiFibridge)"

Если у eth0 есть адрес из подсети роутера, отличный от адреса Windows, — bridge работает и WSL получила собственный IP по DHCP.

5. Windows 10

5.1. Окружение

Проверенная конфигурация:

  • Windows 10.0.19045.6456;
  • WSL 2.7.14.0;
  • ядро WSL 6.18.33.2-2;
  • дистрибутив Ubuntu-22.04;
  • пользователь WSL: petalinux;
  • WSL работает в режиме networkingMode=bridged;
  • IP Windows-адаптера vEthernet (WSL-Bridge): 192.168.70.20.

Конфигурация WSL (%UserProfile%\.wslconfig):

[wsl2]
memory=24GB
swap=16GB
processors=12

networkingMode=bridged
vmSwitch=WSL-Bridge
dhcp=true

5.2. Определение физического сетевого адаптера

Выполнить:

Get-NetAdapter

Найти активный адаптер, например:

Name        InterfaceDescription                    Status
----        --------------------                    ------
Ethernet    Realtek PCIe GbE Family Controller      Up

Запомнить имя адаптера (Ethernet) — оно понадобится при создании коммутатора.

5.3. Создание внешнего виртуального коммутатора (bridge)

Создать внешний коммутатор с именем WSL-Bridge, привязанный к физическому адаптеру:

New-VMSwitch -Name "WSL-Bridge" -NetAdapterName "Ethernet" -AllowManagementOS $true

Здесь:

  • -Name "WSL-Bridge" — имя коммутатора (будет указано в .wslconfig);
  • -NetAdapterName "Ethernet" — имя физического адаптера из шага 5.2;
  • -AllowManagementOS $true — разрешает Windows использовать этот же адаптер, хост сохраняет сеть.

Проверить:

Get-VMSwitch | Select-Object Name, SwitchType, NetAdapterInterfaceDescription, AllowManagementOS

Ожидается:

Name        SwitchType NetAdapterInterfaceDescription              AllowManagementOS
----        ---------- ------------------------------              -----------------
WSL-Bridge  External   Realtek PCIe GbE Family Controller           True

Также в Windows появится виртуальный адаптер:

Get-NetAdapter | Where-Object Name -like "*WSL-Bridge*"
Name                    InterfaceDescription                    Status
----                    --------------------                    ------
vEthernet (WSL-Bridge)  Hyper-V Virtual Ethernet Adapter        Up

Этот адаптер получает собственный IP-адрес от DHCP роутера.

5.4. Настройка .wslconfig

Открыть (или создать) файл %UserProfile%\.wslconfig:

notepad $env:USERPROFILE\.wslconfig

Привести файл к конфигурации из окружения:

[wsl2]
memory=24GB
swap=16GB
processors=12

networkingMode=bridged
vmSwitch=WSL-Bridge
dhcp=true

Здесь:

  • networkingMode=bridged — режим моста;
  • vmSwitch=WSL-Bridge — имя коммутатора из шага 5.3;
  • dhcp=true — WSL получает IP от DHCP-сервера сети (роутера).

5.5. Перезапуск WSL

Применить настройки, полностью остановив WSL:

wsl --shutdown

Подождать несколько секунд и запустить дистрибутив:

wsl -d Ubuntu-22.04

5.6. Проверка получения IP

В Windows проверить адрес виртуального адаптера:

netsh interface ip show addresses "vEthernet (WSL-Bridge)"

Пример:

Configuration for interface "vEthernet (WSL-Bridge)"
    DHCP enabled:                         Yes
    IP Address:                           192.168.70.20
    Subnet Prefix:                        192.168.70.0/24 (mask 255.255.255.0)
    Default Gateway:                      192.168.70.1

В WSL проверить адрес eth0:

ip -4 addr show eth0

или:

hostname -I

Пример:

inet 192.168.70.35/24 brd 192.168.70.255 scope global dynamic eth0

Проверить маршрут и связность:

ip route
ping -c 4 192.168.70.1
ping -c 4 8.8.8.8
ping -c 4 google.com

Если у eth0 есть адрес из подсети роутера, отличный от адреса Windows, — bridge работает и WSL получила собственный IP по DHCP.

6. Возможные проблемы

| Проблема | Решение | | --- | --- | | New-VMSwitch не найден | Включите Hyper-V и перезагрузитесь (шаг 3) | | Коммутатор не создаётся для Wi-Fi | Драйвер Wi-Fi не поддерживает мост — используйте Ethernet-адаптер | | WSL не стартует с networkingMode=bridged | Проверьте имя коммутатора: Get-VMSwitch; имя в vmSwitch= должно совпадать | | Нет IP у eth0 | Проверьте DHCP роутера; в Windows 10 при dhcp=true адрес выдаёт WSL-helper, в Windows 11 перезапустите Restart-Service WslService | | IP не меняется после правки .wslconfig | Windows 11: Restart-Service WslService; Windows 10: wsl --shutdown; затем подождите около 8 секунд | | Windows Home | Штатного Hyper-V нет — используйте Pro / Enterprise / Education или режим mirrored |

7. Отключение bridge

Вернуть режим NAT:

wsl --shutdown

Удалить из .wslconfig строки networkingMode, vmSwitch, dhcp или задать:

networkingMode=nat

При необходимости удалить коммутатор (укажите имя своей конфигурации):

Remove-VMSwitch -Name "WSL-WiFibridge"
Remove-VMSwitch -Name "WSL-Bridge"

8. Итоговая схема

Роутер (DHCP)
     │
     ▼
Физический адаптер Windows (Wi-Fi или Ethernet)
     │
     ├──────────────► Windows (хост)                        IP от DHCP
     │
     ▼
Hyper-V External Switch "WSL-WiFibridge" / "WSL-Bridge"
     │
     ├──────────────► vEthernet (WSL-WiFibridge) / (WSL-Bridge)  IP от DHCP
     │
     ▼
WSL 2 (eth0)                                               IP от DHCP

Итоговая конфигурация .wslconfig (Windows 11):

[wsl2]
networkingMode=bridged
vmSwitch=WSL-WiFibridge

Итоговая конфигурация .wslconfig (Windows 10):

[wsl2]
memory=24GB
swap=16GB
processors=12

networkingMode=bridged
vmSwitch=WSL-Bridge
dhcp=true