Проблемы с сетью при использовании WSL2

Проблемы с сетью при использовании WSL2

В настоящее время я использую Windows10 и WSL2 с Ubuntu 20.04 для разработки. В большинстве случаев это работает отлично, за исключением одной проблемы. Кажется, что-то сломалось на сетевом уровне между Windows/WSL2. При обслуживании angular с помощью 'ng serve' я не могу получить к нему доступ из Windows.

Только при использовании терминала в VS Code и открытии браузера по ссылке в выводе терминала Windows откроет его - однако он не открывает 'localhost:4200', а открывает 127.0.0.1:'random port', который не разрешен нашим прокси-сервером, что означает, что приложение Angular будет отображаться, но не будет доступно для использования. После этого приложение будет доступно с localhost:4201 - но никогда до его открытия из VS Code. Это означает, что я не могу использовать другие терминалы (например, новый Windows Terminal или ConEmu) для запуска приложений.

Насколько я могу судить, это проблема Windows, а не проблема самой установки Linux, но я не нашел способа «переустановить» часть Windows WSL2 без потери всех данных на установке Linux. Буду признателен за любые указания.

решение1

Мой ответ основан на статье Запуск публичного сервера из WSL 2, где теория заключается в том, что Windows создает виртуальный адаптер, который не подключен должным образом к сетевому адаптеру Интернета.

В статье поднимаются следующие вопросы:

  1. В WSL убедитесь, что ваш сервер использует IPv4

  2. Если вы используете брандмауэр в WSL, разрешите соответствующий порт (3390)

  3. В Windows перенаправьте свой порт с публичного IP-порта на порт WSL в командной строке или Powershell с правами администратора:

     netsh interface portproxy add v4tov4 listenport=$PORT listenaddress=0.0.0.0 connectport=$PORT connectaddress=127.0.0.1
    
  4. В Windows разрешите порт через брандмауэр Windows, используя новое правило для входящего трафика.

  5. Для доступа из Интернета настройте переадресацию портов на маршрутизаторе.

Видео на YouTube, описывающее процесс с некоторыми небольшими отличиями, можно найти здесь. Сеть WSL 2.

решение2

Для того чтобы это сработало, мне понадобилось три вещи:

  1. Обновите до последней версии Windows
  2. wsl --shutdown
  3. Настройки > Сеть и Интернет > Сбросить настройки сети какописано здесь

решение3

Я тоже с этим столкнулся; вот мое решение:WSL2-PortForward.cmd

Он позаботится о правилах прокси-сервера и брандмауэра для вашего порта и уберет за собой.

@ECHO OFF
SET LXDISTRO=MyWSL2vm & SET WSL2PORT=3399 & SET HOSTPORT=3398
NETSH INTERFACE PORTPROXY RESET & NETSH AdvFirewall Firewall delete rule name="%LXDISTRO% Port Forward" > NUL
WSL -d %LXDISTRO% -- ip addr show eth0 ^| grep -oP '(?^<=inet\s)\d+(\.\d+){3}' > IP.TMP
SET /p IP=<IP.TMP
NETSH INTERFACE PORTPROXY ADD v4tov4 listenport=%HOSTPORT% listenaddress=0.0.0.0 connectport=%WSL2PORT% connectaddress=%IP% 
NETSH AdvFirewall Firewall add rule name="%LXDISTRO% Port Forward" dir=in action=allow protocol=TCP localport=%HOSTPORT% > NUL
ECHO WSL2 Virtual Machine %IP%:%WSL2PORT%now accepting traffic on %COMPUTERNAME%:%HOSTPORT%

Выполните команду:

.\WSL2-PortForward.cmd

Результат:

WSL2 Virtual Machine 172.17.109.95:3399 now accepting traffic on MYCOMPUTER:3398

решение4

Выполнение этих действий решило мою проблему:

Откройте Hyper-V Manager от имени администратора.

Выберите свой ПК, откройте Virtual Switch Manager.

Выбрать WSL

Настроить на внешнюю сеть

Выберите сетевую карту, через которую проходит трафик

Затем войдите в терминал wsl2 и настройте IP-адрес. Например:

sudo ip addr flush dev eth0 sudo dhclient eth0

Вот где я это нашел:https://stackoverflow.com/a/62438375/10853017

Связанный контент