¿Por qué solo puedo acceder a mi máquina virtual WSL2 Ubuntu con localhost pero no con 127.0.0.1?

¿Por qué solo puedo acceder a mi máquina virtual WSL2 Ubuntu con localhost pero no con 127.0.0.1?

Tengo muy poca experiencia con máquinas virtuales. Instalé con éxito WSL2 y ubuntu 20 y luego instalé una pila LAMP. Todo funciona bien, pero cuando uso un navegador en mi máquina con Windows, solo puedo acceder a Apache en el Ubuntu virtualizado usando locahost. 127.0.0.1 dice que no se puede alcanzar. Tengo todos mis dominios de desarrollo apuntados a 127.0.0.1 en los hosts, así que, por supuesto, eso tampoco funciona.

La configuración de puertos de Apache es

    Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

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

Los hosts virtuales son

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

PERO según los registros parece que las solicitudes a 127.0.0.1 ni siquiera llegan a Apache, lo cual tiene sentido dado el mensaje "no se puede acceder" en el navegador.

¿Alguien puede indicarme dónde debería mirar?

Gracias.

Respuesta1

Gracias por los comentarios. Solución encontrada hacia el final de toda esta guía de configuración de wsl2 ubuntu aquí: https://dev.to/aitorsol/wsl2-windows-linux-subsystem-a-guide-to-install-a-local-web-server-ubuntu-20-04-apache-php8-y-mysql8-3bbk

El script incluido en esa publicación es ligeramente incompatible con mi sistema porque ifconfig ha quedado obsoleto, por lo que la versión que utilicé usa ip addr en la primera línea en lugar de ifconfig.Según la lectura en otro lugar, es posible que eth0 no se use en su sistema, por lo que es posible que deba ajustar esa primera línea de acuerdo con el adaptador.

Edite qué puertos desea reenviar a la máquina virtual en el script.

:

$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";
}

Una vez que haya ejecutado esto, debería poder acceder a Apache en la máquina virtual accediendo a la IP LAN de su máquina Windows y, obviamente, 127.0.0.1 funciona en la máquina misma.

Después de probarlo, configuré que lo ejecutara desde .profile para que los cambios de reenvío de puertos se produzcan cuando se inicie la máquina virtual.

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

información relacionada