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

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

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

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

4 ответа

Мой ответ основан на статье " Запуск общедоступного сервера из 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 Networking.

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

  1. Обновите Windows до последней версии
  2. wsl --shutdown
  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

Это решило мою проблему:

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

Выберите свой компьютер, откройте диспетчер виртуальных коммутаторов.

Выберите WSL

Установить внешнюю сеть

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

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

sudo ip addr flush dev eth0 sudo dhclient eth0

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

Другие вопросы по тегам