¿Cómo reenviar WSL2 8080 al 8080 del host de Windows?

¿Cómo reenviar WSL2 8080 al 8080 del host de Windows?

Tengo:

  1. una bota de primaveraaplicación ejecutándoseen Windowsen 8080y
  2. aserviciocorreren el contenedor Docker dentro del WSL2ubuntu y

estoy buscando como¿Habilitar el 8080 del host de Windows para este servicio?

Ellimitaciónes que el servicio es parte de la configuración de desarrollo y está construido con docker-compose, por lo que la solución debe ser independiente de IP o estar completamente (al máximo) automatizada.

Se puede acceder a la aplicación con curl $(hostname).local:8080, pero cuando intento agregar iptablesreglas (basadas en esasencontrado aquí) para redirigir"wsl:8080->winhost:8080":

sudo iptables -A FORWARD -i lo -o eth0 -p tcp --syn --dport 8080 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i lo -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o lo -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -i lo -p tcp --dport 8080 -j DNAT --to-destination 172.28.80.1:8080
sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 8080 -d 172.28.80.1 -j SNAT --to-source 127.0.0.1:8080

donde 172.28.80.1- es la IP del host de Windows y luego curlcomienza a bloquearse hasta que se agota el tiempo de espera.

¿Alguna sugerencia?

Respuesta1

Logré establecer una conexión desde el interior de un contenedor Docker en WSL2 a un puerto abierto en la máquina con Windows (contenedor php con xdebug en ubuntu conectándose a phpstorm en Windows) de la siguiente manera:

  1. asigne el host en docker-compose.yml o docker-compose.override.yml y reconstruya el contenedor
services:
  php:
    build:
      context: ./
      target: debug
    extra_hosts:
      - "host.docker.internal:host-gateway"
  1. Hacer ping host.docker.internaldesde el contenedor ahora debería revelar la IP asignada por Docker para su red o puede especificar manualmente la IP del puente y los rangos de IP de la subred predeterminada de Docker creando un archivo /etc/docker/daemon.jsoncon la siguiente estructura; más detalles aquí:https://serverfault.com/a/942176/1029877
{
  "bip": "172.30.0.1/16",
  "default-address-pools":[
    {"base":"172.32.0.0/16","size":24},
    {"base":"172.33.0.0/16","size":24},
    {"base":"172.34.0.0/16","size":24}
  ]
}

dónde

  • bipsería el valor que Docker asigna bajohost.docker.internal
  • default-address-poolsse utilizará para asignar direcciones IP a contenedores
  1. luego defina una nueva regla iptable de la siguiente manera
iptables -t nat -A PREROUTING -j DNAT -d 172.30.0.1 -p tcp --dport 9003 --to 172.24.96.1

dónde

  • 172.30.0.1es el destino de la solicitud inicial, donde se intenta conectar
  • 172.24.96.1es la dirección IP asignada a la red WSL, donde debemos reenviar la solicitud
  • 9003es el puerto - el mismo tanto para el origen como para el destino

Más recursos de inspiración o problemas con los que me he topado:

Ahora estoy buscando automatizar esto y asegurarme de que no tenga ningún problema al cambiar las conexiones de red o después de despertar de la suspensión/hibernación (como sucede de vez en cuando con otro reenvío de puerto a través de ssh; sin embargo, esto podría estar relacionado con algunos controladores en mi dispositivo).

información relacionada