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 <clave-larga> --relay "<IP-o-dominio-del-relay>:9009" --exclude "*.tmp" send carpeta
Puntos clave:
--relayfija mi relay y evita que croc intente rutas alternativas.--passdebe coincidir con elCROC_PASSdel contenedor.--excludeevita 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_PASSlargo y fuera del control de versiones.- Envíos siempre con
--relay+--pass. - Excluir temporales para evitar problemas.
- Puerto 9009 filtrado por firewall.