CrocRelay: Infraestructura mínima para transferencias seguras Croc se ha convertido en la herramienta más cómoda para mover archivos entre mis equipos sin montar SMB, sin depender de SSH y sin tener que pensar demasiado. Este artículo deja por escrito cómo está montado el relay propio, por qué se hizo así y cómo usarlo de forma consistente. Introducción La idea principal es tener un método rápido y seguro para enviar archivos entre máquinas de mi infraestructura, tanto en LAN como fuera de ella. Croc permite crear un canal cifrado usando un código o una clave, sin necesidad de configurar nada en los clientes. Con un relay propio se gana control total y velocidad estable. Características Transferencias directas o mediante relay según disponibilidad. Cifrado extremo a extremo mediante PAKE sin claves externas. Relay autohospedado con clave larga para evitar conexiones ajenas. Permite enviar carpetas completas y excluir archivos específicos. Funciona sobre cualquier sistema: Linux, macOS, Windows e incluso Android. No requiere abrir puertos en los clientes. Muy útil para mover configuraciones, backups pequeños o binarios entre máquinas. Yo he llegado a probar grandes cantidades de datos y sin problema. Requisitos previos Un servidor donde levantar el relay (cualquier máquina vale). Docker instalado para montar el contenedor. Una clave larga para CROC_PASS. Puerto 9009 accesible desde los clientes. Que los equipos tengan croc instalado. Implementación Docker Compose del relay El docker-compose.yml del relay se mantiene en Gitea, siempre actualizado: Docker Compose del Relay en Gitea Comando de envío básico El uso es consistente: siempre con la misma clave larga, siempre forzando el relay propio y excluyendo archivos temporales como ejemplo. croc --pass --relay ":9009" --exclude "*.tmp" send carpeta Puntos clave: --relay fija mi relay y evita que croc intente rutas alternativas. --pass debe coincidir con el CROC_PASS del contenedor. --exclude evita subir cosas que croc podría colgarse al comprimir, como sockets. Se puede usar con archivos individuales o carpetas enteras. Funcionamiento práctico Croc intenta siempre una conexión directa entre clientes. Si no es posible, utiliza el relay para negociar el intercambio y coordinar los flujos. En ambos casos la transferencia va cifrada. En mi entorno la velocidad suele ser alta incluso fuera de LAN, y dentro de LAN prácticamente se comporta como si fuese una copia local pero con más compresión. Errores comunes o decisiones importantes Elegir host networking: imprescindible para que el relay no tenga problemas recibiendo conexiones externas. Clave larga obligatoria: evita uso no autorizado. Croc no autentica por IP, así que la clave es la barrera. Exclusión de archivos problemáticos: especialmente sockets o directorios con permisos raros. Limitar acceso al puerto: aunque nadie puede transferir sin la clave, filtrar tráfico reduce ruido. Evitar guardar la clave en repositorios: solo local o en variables seguras. No usar códigos automáticos cuando se quiere trazabilidad: mejor definir uno propio. Resumen breve Relay propio en Docker usando network_mode: host. CROC_PASS largo y fuera del control de versiones. Envíos siempre con --relay + --pass. Excluir temporales para evitar problemas. Puerto 9009 filtrado por firewall. Referencias Documentación oficial de croc Repositorio en GitHub