1. Instalación de un Servidor Web (Apache o Nginx)

 

1. Instalación de un Servidor Web (Apache o Nginx)

El proceso es el mismo que en cualquier servidor Linux. La opción más común es Apache o Nginx.

Pasos para instalar Apache:

bash
# Actualizar la lista de paquetes
sudo apt update

# Instalar Apache
sudo apt install apache2 -y

# Iniciar el servicio
sudo service apache2 start

Para Nginx en su lugar:

bash
sudo apt update
sudo apt install nginx -y
sudo service nginx start

Verificar que funciona:
Desde tu navegador en Windows, ve a http://localhost. Deberías ver la página de bienvenida de Apache o Nginx.🎉

Los archivos de tu sitio web se guardan en:

  • Apache: /var/www/html/

  • Nginx: /var/www/html/ (por defecto)

Para que los servicios se inicien automáticamente al arrancar WSL, puedes habilitar systemd (opcional, pero recomendado).


2. Acceso por SSH a tu WSL

Sí, puedes acceder a tu WSL por SSH desde otros equipos de la red o incluso desde Internet (con configuración adicional).

2.1. Instalar y Configurar SSH en WSL

bash
# Instalar el servidor SSH
sudo apt install openssh-server -y

# Editar la configuración
sudo nano /etc/ssh/sshd_config

Asegúrate de que estas líneas estén así (sin # al inicio):

text
Port 22
PasswordAuthentication yes

Reiniciar el servicio:

bash
sudo service ssh restart

Probar localmente:

bash
ssh localhost

2.2. Conectar desde Otros Equipos de la Red (el desafío de WSL2)

Aquí está el punto clave que mencionas. WSL2, a diferencia de WSL1, no comparte la IP de Windows. Funciona con una máquina virtual en modo NAT (Traducción de Direcciones de Red). Esto significa que tiene su propia IP privada, a la que no se puede acceder directamente desde la red local. 

La solución: Redirigir (forward) puertos desde Windows hacia WSL2.

Opción A: El método clásico (port forwarding manual)

  1. Obtén la IP de WSL (desde PowerShell como administrador):

    powershell
    wsl -- ip addr | grep eth0

    Busca la IP (ej. 172.xx.xx.xx).

  2. Crea una regla de port forwarding en Windows (PowerShell como administrador):

    powershell
    netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.xx.xx.xx

    Usamos el puerto 2222 para evitar conflictos con el SSH de Windows. 

  3. Abre el puerto en el Firewall de Windows (PowerShell como administrador):

    powershell
    New-NetFirewallRule -DisplayName "WSL SSH" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 2222

  4. Conéctate desde otro equipo:

    bash
    ssh usuario_wsl@IP_DEL_PC_WINDOWS -p 2222

    (Usa la IP de tu PC Windows en la red local).

⚠️ Advertencia: La IP de WSL2 cambia cada vez que reinicias Windows. Tendrás que repetir el paso 2 con la nueva IP. Puedes automatizar esto con un script.

Opción B: El método recomendado: "Modo Reflejado" (Mirrored Mode) ⭐

A partir de Windows 11, WSL2 tiene un modo de red reflejado que hace que WSL use la misma IP que Windows. 

  1. Crea (o edita) el archivo C:\Users\TU_USUARIO\.wslconfig y añade:

    ini
    [wsl2]
    networkingMode=mirrored
    dnsTunneling=true
    firewall=true
    autoProxy=true

  2. Reinicia WSL (en PowerShell):

    powershell
    wsl --shutdown
  3. Vuelve a abrir WSL. ¡Ya no necesitas port forwarding! La IP de WSL es la misma que la de Windows.

  4. Abre el puerto 22 en el Firewall de Windows (PowerShell como administrador):

    powershell
    New-NetFirewallRule -DisplayName "WSL SSH" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 22
  5. Conéctate directamente:

    bash
    ssh usuario_wsl@IP_DEL_PC_WINDOWS

    (Usa el puerto 22, que es el estándar).

💡 Nota importante: WSL2 se apaga después de un tiempo de inactividad, lo que detiene sshd. Para mantenerlo activo, mantén abierta una sesión de WSL o usa herramientas como wsl --keep-distro (en Windows 11).


3. Configuración de Red: WSL2 vs Máquina Virtual

Tu intuición es correcta. La red de WSL2 funciona de manera muy similar a la de una máquina virtual.

CaracterísticaWSL2Máquina Virtual (VMware/VirtualBox)
ArquitecturaMáquina virtual ligera gestionada por Hyper-V.Máquina virtual completa.
Modo NAT (por defecto)Sí, tiene su propia IP privada.Sí, es el modo por defecto.
Acceso desde la LANRequiere port forwarding o modo reflejado.Requiere configuración de red en "puente" (bridge) o port forwarding.
IPDinámica y cambia al reiniciar.Puede ser estática o dinámica, dependiendo de la configuración.
RendimientoMuy alto, casi nativo.Puede ser más lento, depende de los recursos asignados.

En resumen: WSL2 es una VM, pero mucho más ligera e integrada con Windows. La configuración de red es el principal punto donde notarás la diferencia.


4. Contenedores (Docker) y SSH

Puedes ejecutar contenedores Docker dentro de WSL y acceder a ellos por SSH de varias maneras.

4.1. Ejecutar Docker en WSL2 (Recomendado)

La forma más limpia es instalar Docker Desktop con el backend de WSL2

  1. Descarga e instala Docker Desktop desde docker.com.

  2. En la configuración de Docker Desktop, activa "Use WSL 2 based engine".

  3. Elige tu distribución Ubuntu en "Resources" -> "WSL Integration".

Ahora puedes ejecutar contenedores directamente desde tu terminal WSL con docker run.

4.2. Acceder por SSH a un Contenedor

Hay dos enfoques principales:

Opción 1: Mapear puertos del contenedor a WSL

Al ejecutar un contenedor, mapea su puerto SSH (ej. 22) a un puerto en WSL (ej. 2223).

bash
docker run -d -p 2223:22 --name mi_servidor_ssh ubuntu:22.04

Luego, desde WSL o desde la red (si configuraste el port forwarding), puedes conectarte a localhost:2223.

Opción 2: Ejecutar SSH dentro del contenedor

Dentro del contenedor, instala y configura el servidor SSH. Luego, mapea el puerto 22 del contenedor a un puerto en el host (WSL). El proceso es similar al que hicimos para acceder a WSL desde la red, pero ahora el "host" es WSL y el "invitado" es el contenedor.

4.3. Acceder a WSL desde un Contenedor

Si un contenedor necesita conectarse a un servicio que corre en WSL (no dentro de otro contenedor), usa la IP de Windows desde la perspectiva de WSL:

bash
ip route show | grep -i default | awk '{ print $3}'

Esta IP (ej. 172.xx.xx.1) es la que el contenedor debe usar para acceder a servicios en el host WSL.


5. Resumen y Buenas Prácticas

  1. Para desarrollo local: Apache/Nginx en WSL y accede desde Windows con localhost. Sin complicaciones.

  2. Para acceso desde la red local (LAN): La opción más sencilla y moderna es habilitar el modo reflejado en .wslconfig. Olvídate del port forwarding manual. 

  3. Para acceso desde Internet (WAN): Necesitarás configurar el port forwarding en tu router para redirigir el tráfico del puerto externo (ej. 2222) a la IP de tu PC Windows (y luego al puerto de WSL). Esto ya es más avanzado y requiere conocimientos de redes.

  4. Para contenedores: Usa Docker Desktop con integración WSL2. Mapea puertos para acceder a los servicios de los contenedores.

**********************************

WSL está diseñado para que compartir archivos entre Windows y Linux sea muy sencillo. La integración es tan directa que puedes ver y manipular los archivos de un sistema directamente desde el otro.

Aquí te explico cómo hacerlo en ambos sentidos.

📂 Desde WSL (Linux) hacia Windows

Desde tu terminal de WSL, puedes acceder a todas las unidades de Windows porque se montan automáticamente en la carpeta /mnt/.

  • Ver el contenido de tu disco C: Para listar los archivos de tu unidad C, usa el comando ls:

    bash
    ls /mnt/c/
  • Navegar a una carpeta específica: Para moverte a, por ejemplo, tu carpeta de "Documentos", usa cd:

    bash
    cd /mnt/c/Users/TuUsuarioWindows/Documentos

    Recuerda reemplazar TuUsuarioWindows con el nombre de tu usuario en Windows.

  • Copiar un archivo de Windows a WSL: Una vez ubicado en la carpeta de Windows que te interesa, puedes usar el comando cp para copiar un archivo a tu entorno de WSL. Por ejemplo, para copiar mi_archivo.txt a tu carpeta de inicio en WSL:

    bash
    cp mi_archivo.txt /home/tu_usuario_wsl/

    (Reemplaza tu_usuario_wsl con tu nombre de usuario en WSL).

🪟 Desde Windows hacia WSL (Linux)

Existen un par de métodos muy cómodos para hacer esto.

  • Usando el Explorador de Archivos de Windows (El más fácil): WSL expone sus archivos a través de una ruta de red especial.

    1. Abre el Explorador de Archivos en Windows.

    2. En la barra de direcciones, escribe \\wsl$ y presiona Enter.

    3. Verás una carpeta por cada distribución de Linux que tengas instalada (por ejemplo, Ubuntu). Haz doble clic para entrar.

    4. Dentro, podrás navegar por todo el sistema de archivos de WSL. Ahora, puedes copiar y pegar archivos desde cualquier otra carpeta de Windows directamente en esta ventana, como si fuera una carpeta más de tu PC.

  • Copiar texto entre sistemas (Clipboard): Puedes usar el portapapeles para transferir texto entre ambos sistemas.

    • En WSL, para copiar la salida de un comando al portapapeles de Windows, usa clip.exe. Por ejemplo:

      bash
      cat /etc/hosts | clip.exe
    • En Windows, para pegar ese texto en una terminal de WSL, solo usa el atajo de teclado habitual Ctrl + V (o clic derecho).

Comentarios

Entradas más populares de este blog

12. Hola Mundo en Docker.

11¿Qué es Docker? y ¿Por qué debo saberlo?

14. Publish and Detached modes