--- name: win_portproxy_add kind: function lang: ps domain: infra version: "1.0.0" purity: impure signature: "win_portproxy_add -ListenPort [-ConnectPort ] [-ListenAddr ] [-ConnectAddr ]" description: "Añade una regla de port proxy v4tov4 con netsh para redirigir tráfico desde ListenAddr:ListenPort hacia ConnectAddr:ConnectPort. Si ya existe una regla para el mismo listenaddress:listenport, la elimina y la recrea. Requiere privilegios de Administrador." tags: [portproxy, netsh, windows, network, infra, wsl2, cdp, redirect, proxy] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] params: - name: ListenPort desc: "Puerto en el que escucha el proxy (1-65535)" - name: ConnectPort desc: "Puerto de destino al que conectar (default: =ListenPort)" - name: ListenAddr desc: "Dirección IP en la que escucha (default: 0.0.0.0)" - name: ConnectAddr desc: "Dirección IP de destino (default: 127.0.0.1)" output: "Void - crea regla de port proxy v4tov4 vía netsh, idempotente por ListenAddr:ListenPort" tested: false tests: [] test_file_path: "" file_path: "powershell/functions/infra/win_portproxy_add.ps1" --- ## Uso ```powershell # Caso típico WSL2 → Chrome CDP: redirigir 0.0.0.0:9222 → 127.0.0.1:9222 .\win_portproxy_add.ps1 -ListenPort 9222 # Con todos los parámetros explícitos .\win_portproxy_add.ps1 -ListenPort 9222 -ConnectPort 9222 -ListenAddr 0.0.0.0 -ConnectAddr 127.0.0.1 # Redirigir a un puerto diferente .\win_portproxy_add.ps1 -ListenPort 8080 -ConnectPort 3000 ``` ```bash # Desde WSL2 — habilitar acceso a Chrome CDP en el host Windows powershell.exe -ExecutionPolicy Bypass -File win_portproxy_add.ps1 -ListenPort 9222 ``` ## Parametros | Parametro | Tipo | Obligatorio | Default | Descripcion | |----------------|--------|-------------|---------------|--------------------------------------------------| | `-ListenPort` | int | si | — | Puerto en el que escucha el proxy (1-65535) | | `-ConnectPort` | int | no | =ListenPort | Puerto de destino al que conectar (1-65535) | | `-ListenAddr` | string | no | `0.0.0.0` | Dirección IP en la que escucha el proxy | | `-ConnectAddr` | string | no | `127.0.0.1` | Dirección IP de destino | ## Notas - Requiere ejecutarse como **Administrador** en Windows. - Caso de uso principal: WSL2 no puede alcanzar `127.0.0.1` del host Windows directamente. Esta regla hace que el host escuche en `0.0.0.0:PORT` y reenvíe al loopback donde Chrome (u otro proceso) está escuchando. - Idempotente respecto a listenaddress:listenport: si ya existe una regla para esa combinación, la elimina y la recrea. - Combinar con `win_firewall_add_rule` para que el firewall también permita el tráfico entrante. - Retorna exit code 0 si tuvo éxito, 1 si hubo error. ## Flujo completo WSL2 → Chrome CDP ```bash # 1. Abrir Puerto en firewall powershell.exe -ExecutionPolicy Bypass -File win_firewall_add_rule.ps1 -Name "CDP-9222" -Port 9222 # 2. Redirigir tráfico de red al loopback powershell.exe -ExecutionPolicy Bypass -File win_portproxy_add.ps1 -ListenPort 9222 # 3. Arrancar Chrome con CDP en Windows # chrome.exe --remote-debugging-port=9222 --headless # 4. Desde WSL2 conectar al host Windows # WSL2_HOST=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}') # curl http://$WSL2_HOST:9222/json ```