Как подключиться через TCP из WSL2 к Windows?

Вопрос или проблема

Я немного в растерянности с этой глупой маленькой проблемой. Я потерял счет часам, которые потратил, пытаясь ее исправить.

У меня есть экземпляр WSL, запущенный на моем компьютере с Windows 11. Они оба полностью обновлены. Я хотел бы, чтобы мой экземпляр WSL мог общаться с Windows через TCP, чтобы я мог использовать Android Studio между экземплярами. Однако, несмотря на то, что все брандмауэры и все антивирусные программы полностью отключены, я не могу заставить WSL общаться с Windows через TCP.

Когда я запускаю ip route в WSL, он отвечает следующим:

default via 192.168.blahblah dev eth0 proto kernel metric 55
192.168.somethingdifferent/24 dev eth0 proto kernel scope link metric 311
192.168.somethingslightlydifferent dev eth0 proto kernel scope link metric 55

Когда я пытаюсь вставить первый адрес (192.168.blahblah) в ping в WSL, все работает отлично. 👌 Но когда я пробую использовать telnet из WSL с тем же адресом, он выдает ошибку, говоря telnet: Unable to connect to remote host: Connection refused.

Вы пробовали…

  • Я пробовал ответ здесь, пытаясь использовать “зеркальный режим”, добавив файл .wslconfig. К сожалению, изменений нет.
  • Я пробовал отключать и перезапускать WSL множество раз с командой wsl --shutdown, как предложено в этом ответе. Я также пробовал перезагружать свой компьютер несколько раз.
  • Я посмотрел этот похожий вопрос, но там нет ответа.
  • Я пробовал использовать telnet к localhost и к 127.0.0.1, с различными портами, но ничего не срабатывает и там.
  • Я пробовал запускать Android Debug Bridge (adb) сервер на Windows на конкретном порту и использовать этот номер порта при попытке запустить команду telnet из всех IP-адресов, перечисленных выше, но также безрезультатно.

Я буду в восторге, если у кого-то есть какие-либо советы, которые они могут дать! Я попробовал все, что мог, чтобы установить любое соединение TCP между WSL и Windows, и ничего не работает! 😵

.

Ответ или решение

Для подключения из WSL2 к Windows по протоколу TCP необходимо учесть некоторые специфические моменты, которые отличаются от работы в традиционных сетях. Рассмотрим теоретические аспекты, возможные причины проблем и предоставим пошаговое руководство по их устранению.

Теория

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

Одной из особенностей является то, что к WSL2 автоматически назначается динамический IP-адрес при каждом запуске, что порой мешает установлению стабильных сетевых соединений. При этом, необходимо учитывать, что программы на Windows и WSL2 могут интерпретировать IP-адреса по-разному, особенно когда используется localhost или 127.0.0.1.

Пример проблемы

Важно понять, почему стандартные попытки соединения по TCP, такие как запуск telnet, могут терпеть неудачу. Если соединение по ICMP (ping) проходит, это лишь означает, что IP-адрес доступен, но не гарантирует, что порт TCP открыт или правильно настроен.

Когда вы пытались подключиться с помощью telnet, и получали ошибку "Unable to connect to remote host: Connection refused", это может указывать на то, что целевой порт на хосте Windows или WSL не активен или что-то блокирует соединение.

Применение на практике

  1. Проверка состояния порта на стороне Windows:

    • Убедитесь, что нужный порт открыт и прослушивается сервисом на Windows.
    • Для этого можно использовать команды типа netstat -a или специализированные утилиты, такие как tcpview.
  2. Настройка брандмауэра:

    • Несмотря на отключение брандмауэра, убедитесь, что в настройках брандмауэра добавлено правило разрешающее входящие соединения на нужном порту и IP-адресе.
  3. Использование правильных IP-адресов:

    • Попробуйте использовать IP-адрес, который ipconfig показывает для вашего Windows интерфейса.
    • Для устойчивой связи между WSL и Windows используйте IP-адреса, определенные ip addr на стороне WSL. Также можно получить IP Windows из WSL с помощью команды cat /etc/resolv.conf.
  4. Конфигурация WSL2:

    • Для более постоянного решения попробуйте добавить в файл .wslconfig, расположенный в папке пользователя Windows, следующе:
      [wsl2]
      networkingMode = bridged
    • Это может помочь изменить поведение сети для более успешного взаимодействия с Windows.
  5. Использование adb (Android Debug Bridge):

    • Если цель состоит в подключении ADB через TCP, убедитесь, что adb сервер правильно настроен и слушает нужный порт на хосте Windows.
    • Попробуйте запустить ADB с явной командой для прослушивания на всех интерфейсах: adb -a -P 5037 nodaemon server.
  6. Проверка настроек сети WSL:

    • При запуске ip route обратите внимание на указанные маршруты, это поможет вам определить корректные пути сети от WSL к Windows.
  7. Отладка с помощью других средств:

    • Можно использовать такие инструменты, как nc (netcat) для проверки поддержки порта вручную. Запустите nc -l -p <PORT> на Windows и попробуйте отправлять сообщения из WSL.

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

Надеемся, что предоставленная информация и последовательные шаги по устранению ошибок помогут вам эффективно наладить соединение между WSL2 и Windows.

Оцените материал
Добавить комментарий

Капча загружается...