Почему я могу получить доступ к своей виртуальной машине WSL2 Ubuntu только с localhost, но не с 127.0.0.1?

Почему я могу получить доступ к своей виртуальной машине WSL2 Ubuntu только с localhost, но не с 127.0.0.1?

У меня очень мало опыта работы с виртуальными машинами. Я успешно установил WSL2 и Ubuntu 20, а затем установил стек LAMP. Все работает отлично, но при использовании браузера на моей машине Windows я могу получить доступ к Apache на виртуализированном Ubuntu только с помощью locahost. 127.0.0.1 говорит, что он не может быть достигнут. У меня все мои домены разработки направлены на 127.0.0.1 в hosts, так что, конечно, это тоже не работает.

Конфигурация портов Apache:

    Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule> 

Виртуальные хосты

<VirtualHost *:80>
or <VirtualHost *:443>

НО из журналов следует, что запросы к 127.0.0.1 даже не доходят до Apache, что вполне объяснимо, учитывая сообщение «невозможно получить доступ» в браузере.

Может ли кто-нибудь указать мне направление, в котором мне следует искать?

Спасибо.

решение1

Спасибо за комментарии. Нашел решение ближе к концу всего этого руководства по настройке wsl2 ubuntu здесь: https://dev.to/aitorsol/wsl2-windows-linux-subsystem-a-guide-to-install-a-local-web-server-ubuntu-20-04-apache-php8-y-mysql8-3bbk

Скрипт, включенный в этот пост, немного несовместим с моей системой, поскольку ifconfig устарел, поэтому версия, которую я использовал, использует ip addr в первой строке вместо ifconfig.Из прочтенного в другом месте, eth0 может не использоваться в вашей системе, поэтому вам может потребоваться настроить первую строку в соответствии с адаптером.

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

:

$remoteport = bash.exe -c "ip addr list eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';

if( $found ){
  $remoteport = $matches[0];
} else{


echo "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}

#[Ports]

#All the ports you want to forward separated by coma
$ports=@(80,443,10000,3000,5000,8080);


#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";


#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";

#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";

for( $i = 0; $i -lt $ports.length; $i++ ){
  $port = $ports[$i];
  iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
  iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}

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

После тестирования я настроил запуск из .profile, чтобы изменения переадресации портов происходили при запуске виртуальной машины.

/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe "C:\Users\user\wsl-networking-startup-ip-change.ps1"

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