Instalacion Wings

Este addon requiere un binario de Wings modificado (fork con las rutas /api/proxy/* agregadas). Repetí estos pasos en el código fuente de Wings antes de compilar, y después distribuí el binario resultante a cada nodo, o compilalo directamente en cada uno.

Paso 1: Copiar los archivos nuevos

Importante: Wings es un binario compilado, no archivos que Wings lea en caliente. Estos .go van a la carpeta fuente de tu fork de Wings (donde tengas el código que después compilás con go build), normalmente en tu compu o en un servidor de build, no directamente en el nodo donde corre el daemon.

Opción A: arrastrando y soltando. Abrí el código fuente de tu Wings en tu explorador de archivos (o VS Code) y arrastrá la carpeta proxy de wings/new-files/ dentro de la carpeta proxy de tu Wings, y la carpeta router dentro de tu router, fusionando, no reemplazando (tu Wings ya tiene otros archivos en esas mismas carpetas que hay que conservar).

Opción B: por terminal:

bash
cp -r wings/new-files/proxy/*   /ruta/al/codigo-fuente-de/wings/proxy/
cp -r wings/new-files/router/*  /ruta/al/codigo-fuente-de/wings/router/

Archivos que se copian (4 en total, todos son archivos nuevos, no pisan nada que ya exista):

  • proxy/manager.go: núcleo, escribe /etc/nginx/conf.d/pawproxy/<dominio>.conf, corre nginx -t y recarga
  • proxy/certbot.go: emisión (certbot certonly --nginx) y revocación de certificados Let's Encrypt
  • proxy/validator.go: validación segura de nombres de dominio (anti path-traversal / anti-injection en la config de nginx)
  • router/router_proxy.go: handlers postProxyDomain, deleteProxyDomain, getProxyDomains, getProxyHealth, postProxyCheckConfig

Paso 2: Aplicar el fragmento inyectado

wings/injected-code/router__router.go va dentro de Configure(), en el grupo protected del router (justo después de la línea de /api/deauthorize-user):

go
protected.POST("/api/proxy/domain", postProxyDomain)
protected.DELETE("/api/proxy/domain/:domain", deleteProxyDomain)
protected.GET("/api/proxy/domains", getProxyDomains)
protected.GET("/api/proxy/health", getProxyHealth)
protected.POST("/api/proxy/check-config", postProxyCheckConfig)

Estas rutas usan el mismo middleware de autenticación (Bearer token del nodo) que ya usa el resto de Wings, así que no hay que agregar nada de auth aparte.

Paso 3: Compilar

bash
go build -o wings

Requiere Go 1.24.x (toolchain 1.24.1).

Paso 4: Preparar nginx en el nodo

bash
mkdir -p /etc/nginx/conf.d/pawproxy
mkdir -p /etc/nginx/ssl/pawproxy

Y asegurate de que nginx.conf (o el bloque http {}) incluya el directorio de configs:

nginx
include /etc/nginx/conf.d/pawproxy/*.conf;

Paso 5: Instalar certbot (opcional, solo si vas a permitir Let's Encrypt)

bash
apt install certbot python3-certbot-nginx

Paso 6: Reiniciar Wings

bash
systemctl restart wings

Paso 7: Verificar

bash
curl -H "Authorization: Bearer <token_del_nodo>" \
     http://localhost:<daemon_port>/api/proxy/health

Respuesta esperada:

json
{"status":"ok","module":"pawproxy"}

Si esto responde bien pero el panel sigue mostrando "Could not reach the proxy module" en Admin → Nodes → (nodo) → Proxy, revisá que el panel esté apuntando a la URL/puerto correcto del daemon y que no haya un firewall bloqueando la conexión panel→nodo.

Siguiente: Configuración por nodo →