Доступ к сетевым приложениям с помощью WSL

При работе с сетевыми приложениями (будь то получение доступа к сетевому приложению Linux из приложения Windows или получение доступа к сетевому приложению Windows из приложения Linux) необходимо учитывать несколько моментов. Вам может потребоваться определить IP-адрес используемой виртуальной машины, который будет отличаться от IP-адреса локального физического компьютера.

Доступ к сетевым приложениям Linux из Windows (localhost)

Если вы создаете сетевое приложение (например, приложение, работающее на NodeJS или SQL Server) в дистрибутиве Linux, вы можете получить к нему доступ из приложения Windows (например, используя Microsoft Edge или Chrome) с помощью localhost (как обычно это и происходит).

Доступ к сетевым приложениям Windows из Linux (IP-адрес основной системы)

Если вы хотите получить доступ к сетевому приложению, работающему в Windows (например, к приложению, работающему на NodeJS или SQL Server) из дистрибутива Linux (напр., Ubuntu), необходимо использовать IP-адрес основной системы. Хотя это происходит и нечасто, для этого можно выполнить следующие действия.

  1. Получите IP-адрес основной системы, выполнив следующую команду из дистрибутива Linux: cat /etc/resolv.conf
  2. Скопируйте IP-адрес в строке, начинающейся с nameserver.
  3. Подключитесь к любому серверу Windows, используя скопированный IP-адрес.

На изображении ниже показан пример подключения к серверу Node.js под управлением Windows через cURL.

Подключение к серверу NodeJS в Windows с помощью cURL

Подключение через удаленные IP-адреса

При использовании удаленных IP-адресов для подключения к приложениям они будут рассматриваться как подключения из локальной сети (LAN). Это означает, что необходимо убедиться, что приложение может принимать подключения по локальной сети.

Например, может потребоваться привязать приложение к 0.0.0.0 вместо 127.0.0.1. В примере приложения Python, использующего Flask, это можно сделать с помощью команды app.run(host='0.0.0.0'). При внесении этих изменений не забывайте о безопасности, так как это позволит устанавливать подключения из вашей локальной сети.

Доступ к дистрибутиву WSL 2 из локальной сети (LAN)

При использовании дистрибутива WSL 1, если к компьютеру можно получить доступ из локальной сети, то приложения, работающие в WSL, могут быть также доступны в локальной сети.

Это нетипичная ситуация в WSL 2. В WSL 2 имеется виртуализированный адаптер Ethernet с собственным уникальным IP-адресом. В настоящее время для включения этого рабочего процесса необходимо выполнить те же действия, что и для обычной виртуальной машины. (Мы ищем способы улучшить это взаимодействие.)

Ниже приводится пример команды PowerShell, которая добавляет прокси-сервер портов, ожидающий передачи данных на порту узла 4000 и перенаправляющий все подключения на порт 4000 виртуальной машины WSL 2 с IP-адресом 192.168.101.100.

netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100

Доступ по протоколу IPv6

В настоящее время дистрибутивы WSL 2 не могут обращаться к IPv6-адресам. Мы работаем над добавлением этой возможности.