Skip to main content

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:

  • --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